Estoy buscando usar el lazo como método para seleccionar características y ajustar un modelo predictivo con un objetivo binario. A continuación se muestra un código con el que estaba jugando para probar el método con regresión logística regularizada.
Mi pregunta es si obtengo un grupo de variables "significativas", pero ¿puedo ordenarlas por orden para estimar la importancia relativa de cada una? ¿Se pueden estandarizar los coeficientes para este propósito de rango por valor absoluto (entiendo que se muestran en la escala variable original a través de la coef
función)? Si es así, cómo hacerlo (usando la desviación estándar de x e y) Estandarizar los coeficientes de regresión .
CÓDIGO DE MUESTRA:
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)
fuente
Para obtener el coeficiente en un espacio que le permite comparar directamente su importancia, debe estandarizarlos. Escribí una nota en Thinklab para discutir la estandarización de los coeficientes de regresión logística.
(Muy) Larga historia corta, aconsejo usar el método Agresti :
Si confió en la estandarización interna por glmnet (opción predeterminada
standardize = TRUE
), estos coeficientes estandarizados son en realidad los que resultan del paso de ajuste, antes de la retransformación por glmnet en el espacio original (vea otra nota :-)).fuente
std_coefs <- coefs[-1, 1] * sds
glmnet
objeto fue creado constandardize = TRUE
ostandardize = FALSE
, ¿sí?