Я розглядаю використання ласо як методу вибору функцій та підгонки прогнозної моделі з бінарною ціллю. Нижче наведено якийсь код, з яким я грав, щоб спробувати метод з регульованою логістичною регресією.
Моє запитання: я отримую групу "значущих" змінних, але чи можу я класифікувати їх для оцінки відносної важливості кожної? Чи можна стандартизувати коефіцієнти для цієї мети ранжування за абсолютним значенням (я розумію, що вони відображаються на вихідній шкалі змінної через coef
функцію)? Якщо так, то як це зробити (використовуючи стандартне відхилення x і y) Стандартизуйте регресійні коефіцієнти .
ЗРАЗДОВИЙ КОД:
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)