启
比较原始做LASSO包是library(glmnet)
若目标是纯 LASSO 分析,alpha 必须设为 1
标准化数据:LASSO 对特征的尺度敏感,需对数据进行标准化(均值为0,方差为1)。
cv.glmnet获得的lambda.min 或者 lambda.1se 传递给
glmnet::glmnet(lambda = ???)
# 加载数据(以 mtcars 为例)
data(mtcars)
x <- as.matrix(mtcars[, -1]) # 特征矩阵(mpg 是响应变量)
y <- mtcars$mpg
# 交叉验证选择最优 lambda(自动 LASSO)
cv_fit <- cv.glmnet(x, y, alpha = 1)
best_lambda <- cv_fit$lambda.min
# 用最优 lambda 训练最终模型
final_model <- glmnet(x, y, alpha = 1, lambda = best_lambda)
# 查看筛选的变量
selected_vars <- rownames(coef(final_model))[coef(final_model)[, 1] != 0]
print(selected_vars)
手动标准化特征矩阵
x_scaled <- scale(x)
分类变量区别-测试
标签编码适用:若分类变量有明确顺序(如"低、中、高"),直接使用标签编码(0,1,2)即可,无需独热编码
library(glmnet)
data(iris)
str(iris$Species)
df=iris
design_matrix <- model.matrix(~ Species, data = df)
x<-as.matrix(data.frame(Sepal.Width=df$Sepal.Width,
Petal.Length=df$Petal.Length,
Petal.Width=df$Petal.Width,design_matrix))
fit1 <- cv.glmnet(x = x,y = df$Sepal.Length)
fit1
plot(fit1)
iris$Species_num <- as.numeric(iris$Species)
x2 <- as.matrix(iris[, c(2, 3, 4