Eu estou olhando para usar o laço como um método para selecionar recursos e ajustar um modelo preditivo com um alvo binário. Abaixo está um código com o qual eu estava jogando para testar o método com regressão logística regularizada.
Minha pergunta é: recebo um grupo de variáveis "significativas", mas posso classificá-las para estimar a importância relativa de cada uma? Os coeficientes podem ser padronizados para esse propósito de classificação por valor absoluto (eu entendo que eles são mostrados na escala de variáveis original por meio da coef
função)? Nesse caso, como fazê-lo (usando o desvio padrão de xey) Padronizar coeficientes de regressão .
CÓDIGO DE AMOSTRA:
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)
fonte
Para obter o coeficiente em um espaço que permita comparar diretamente a importância deles, você deve padronizá-los. Escrevi uma nota no Thinklab para discutir a padronização dos coeficientes de regressão logística.
(Muito) Resumindo, recomendo usar o método Agresti :
Se você confiou na padronização interna pelo glmnet (opção padrão
standardize = TRUE
), esses coeficientes padronizados são realmente os resultantes da etapa de ajuste, antes da retransformação pelo glmnet no espaço original (consulte outra nota :-)).fonte
std_coefs <- coefs[-1, 1] * sds
glmnet
objeto foi criado comstandardize = TRUE
oustandardize = FALSE
, sim?