Ich möchte das Lasso als Methode zur Auswahl von Merkmalen und zur Anpassung eines Vorhersagemodells an ein binäres Ziel verwenden. Im Folgenden ist ein Code aufgeführt, mit dem ich die Methode mit regulierter logistischer Regression ausprobiert habe.
Meine Frage ist, dass ich eine Gruppe von "signifikanten" Variablen erhalte, aber bin ich in der Lage, diese zu sortieren, um die relative Wichtigkeit der einzelnen zu schätzen? Können die Koeffizienten für diesen Zweck der Rangordnung nach Absolutwert normiert werden (ich verstehe, dass sie durch die coef
Funktion auf der ursprünglichen variablen Skala angezeigt werden)? Wenn ja, wie geht das? (Unter Verwendung der Standardabweichung von x und y) Regressionskoeffizienten standardisieren .
BEISPIELCODE:
library(glmnet)
#data comes from
#http://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+(Diagnostic)
datasetTest <- read.csv('C:/Documents and Settings/E997608/Desktop/wdbc.data.txt',head=FALSE)
#appears to use the first level as the target success
datasetTest$V2<-as.factor(ifelse(as.character(datasetTest$V2)=="M","0","1"))
#cross validation to find optimal lambda
#using the lasso because alpha=1
cv.result<-cv.glmnet(
x=as.matrix(dataset[,3:ncol(datasetTest)]),
y=datasetTest[,2],
family="binomial",
nfolds=10,
type.measure="deviance",
alpha=1
)
#values of lambda used
histogram(cv.result$lambda)
#plot of the error measure (here was deviance)
#as a CI from each of the 10 folds
#for each value of lambda (log actually)
plot(cv.result)
#the mean cross validation error (one for each of the
#100 values of lambda
cv.result$cvm
#the value of lambda that minimzes the error measure
#result: 0.001909601
cv.result$lambda.min
log(cv.result$lambda.min)
#the value of lambda that minimzes the error measure
#within 1 SE of the minimum
#result: 0.007024236
cv.result$lambda.1se
#the full sequence was fit in the object called cv.result$glmnet.fit
#this is same as a call to it directly.
#here are the coefficients from the min lambda
coef(cv.result$glmnet.fit,s=cv.result$lambda.1se)
quelle
Um den Koeffizienten in einem Raum zu erhalten, mit dem Sie ihre Wichtigkeit direkt vergleichen können, müssen Sie sie standardisieren. Ich schrieb eine Notiz über Thinklab, um die Standardisierung der logistischen Regressionskoeffizienten zu diskutieren.
(Sehr) Kurz gesagt, ich empfehle die Agresti- Methode:
Wenn Sie sich auf die interne Standardisierung durch glmnet (Standardoption
standardize = TRUE
) verlassen haben, sind diese standardisierten Koeffizienten tatsächlich diejenigen, die sich aus dem Anpassungsschritt ergeben, bevor sie durch glmnet im ursprünglichen Raum erneut transformiert werden (siehe einen anderen Hinweis :-)).quelle
std_coefs <- coefs[-1, 1] * sds
glmnet
Objekt mitstandardize = TRUE
oderstandardize = FALSE
ja erstellt wurde?