Saya melihat menggunakan laso sebagai metode untuk memilih fitur dan menyesuaikan model prediksi dengan target biner. Di bawah ini adalah beberapa kode yang saya mainkan untuk mencoba metode ini dengan regresi logistik yang teratur.
Pertanyaan saya adalah apakah saya mendapatkan sekelompok variabel "signifikan" tetapi apakah saya dapat menentukan urutannya untuk memperkirakan tingkat kepentingan relatif masing-masing? Dapatkah koefisien distandarisasi untuk keperluan peringkat ini dengan nilai absolut (saya mengerti bahwa koefisien ditunjukkan pada skala variabel asli melalui coef
fungsi)? Jika ya, bagaimana cara melakukannya (menggunakan standar deviasi x dan y) Menstandarisasi Koefisien Koefisien .
KODE SAMPEL:
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)
sumber
Untuk mendapatkan koefisien dalam ruang yang memungkinkan Anda membandingkan kepentingannya secara langsung, Anda harus membakukannya. Saya menulis catatan tentang Thinklab untuk membahas standardisasi koefisien regresi logistik.
(Sangat) Singkatnya, saya menyarankan untuk menggunakan metode Agresti :
Jika Anda mengandalkan standarisasi internal oleh glmnet (opsi default
standardize = TRUE
), koefisien terstandarisasi ini sebenarnya yang dihasilkan dari langkah pemasangan, sebelum mentransformasi ulang oleh glmnet di ruang asli (lihat catatan lain :-)).sumber
std_coefs <- coefs[-1, 1] * sds
glmnet
objek itu dibuat denganstandardize = TRUE
ataustandardize = FALSE
, ya?