Je cherche à utiliser le lasso comme méthode pour sélectionner des entités et ajuster un modèle prédictif avec une cible binaire. Voici un code avec lequel je jouais pour essayer la méthode avec régression logistique régularisée.
Ma question est de savoir si j'obtiens un groupe de variables "significatives", mais suis-je en mesure de classer ces variables pour estimer l'importance relative de chacune? Les coefficients peuvent-ils être standardisés à cet effet de classement par valeur absolue (je comprends qu'ils sont montrés sur l'échelle variable d'origine à travers la coef
fonction)? Si tel est le cas, comment procéder (en utilisant l'écart type de x et y) Standardiser les coefficients de régression .
EXEMPLE DE CODE:
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)
la source
Pour obtenir le coefficient dans un espace qui vous permet de comparer directement leur importance, vous devez les standardiser. J'ai écrit une note sur Thinklab pour discuter de la standardisation des coefficients de régression logistique.
(Très) Bref, je conseille d'utiliser la méthode Agresti :
Si vous vous êtes appuyé sur la standardisation interne par glmnet (option par défaut
standardize = TRUE
), ces coefficients standardisés sont en fait ceux résultant de l'étape d'ajustement, avant retransformation par glmnet dans l'espace d'origine (voir une autre note :-)).la source
std_coefs <- coefs[-1, 1] * sds
glmnet
objet ait été créé avecstandardize = TRUE
oustandardize = FALSE
, oui?