第100+20步 ChatGPT学习:R实现Lasso回归

基于R 4.2.2版本演示

一、写在前面

花了好几期分享了使用R语言实现机器学习分类,基本把常见模型都讲完了。

最后就以Lasso回归收尾得了。

Lasso回归应该很出名了,做特征变量筛选的,因此,不过多介绍。

二、R代码实现Lasso回归

(1) 导入数据

我习惯用RStudio自带的导入功能:

(2) 建立Lasso回归模型(默认参数)

R 复制代码
# 安装并加载 glmnet 库(如果尚未加载)
# install.packages("glmnet")
library(glmnet)
library(ggplot2)

# 准备数据
x_train <- model.matrix(~ . -X, data = trainData)
y_train <- as.numeric(trainData$X) - 1

# 训练 LASSO 回归模型
lassoModel <- glmnet(x_train, y_train, family = "binomial", alpha = 1)

# 使用交叉验证找到最优 lambda 值
cv_lasso <- cv.glmnet(x_train, y_train, family = "binomial", type.measure = "mse", alpha = 1)

# 选择一个 lambda 值
lambda_min <- cv_lasso$lambda.min
lambda_1se <- cv_lasso$lambda.1se

# 输出最优 lambda 值
cat("Lambda.min:", lambda_min, "\n")
cat("Lambda.1se:", lambda_1se, "\n")

# 提取系数(使用 lambda.min)
coef_lasso <- coef(cv_lasso, s = "lambda.min")

# 转换为数据框并过滤非零系数
coef_lasso_matrix <- as.matrix(coef_lasso)

# 提取非零系数(忽略截距)
important_features <- coef_lasso_matrix[coef_lasso_matrix[, 1] != 0, , drop = FALSE]

# 显示重要特征
print("Important Features from LASSO Regression:")
print(important_features)

结果输出:

把每一个特征的重要性进行了量化输出。

三、Lasso回归结果可视化

下一步,就是如何把Lasso回归模型的输出可视化,这里有几种方式:

(1)柱状图

R 复制代码
# 创建一个数据框用于图形展示
important_features_df <- data.frame(
  Feature = rownames(important_features),
  Coefficient = important_features[, 1]
)
# 绘制重要特征的系数图
ggplot(important_features_df, aes(x = reorder(Feature, Coefficient), y = Coefficient)) +
  geom_col(fill = "steelblue") +
  labs(title = "Important Features in LASSO Model",
       x = "Feature",
       y = "Coefficient") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 65, hjust = 1))

输出:

(2)棒棒糖图

R 复制代码
# 绘制棒棒糖图展示系数
ggplot(important_features_df, aes(x = reorder(Feature, Coefficient), y = Coefficient)) +
  geom_segment(aes(x = Feature, xend = Feature, y = 0, yend = Coefficient), color = "grey") +
  geom_point(size = 3, color = "blue") +
  labs(title = "Lollipop Chart of LASSO Coefficients",
       x = "Feature",
       y = "Coefficient") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 65, hjust = 1))

输出:

(3)Coefficient Path

R 复制代码
library(glmnet)

# 准备数据
# 确保 data$X 已被转换为因子
x_train <- model.matrix(~ . - X, data = trainData)
y_train <- as.numeric(trainData$X) - 1

# 训练 LASSO 回归模型,允许 glmnet 自动生成 lambda 序列
lassoModel <- glmnet(x_train, y_train, family = "binomial", alpha = 1)

# 绘制系数路径图,确保使用变量名称作为标签
plot(lassoModel, xvar = "lambda", label = TRUE, xlab = "Log(Lambda)", ylab = "Coefficients")

# 添加图表标题
title("Coefficient Path for LASSO Model")

输出:

至于上述结果怎么看,自行GPT啦。

四、最后

至于怎么安装,自学了哈。

数据嘛:

链接:https://pan.baidu.com/s/1rEf6JZyzA1ia5exoq5OF7g?pwd=x8xm

提取码:x8xm

相关推荐
大白的编程日记.10 分钟前
【计算机基础理论知识】C++篇(二)
开发语言·c++·学习
Chef_Chen13 分钟前
从0开始学习R语言--Day42--LM检验
学习
C语言小火车16 分钟前
野指针:C/C++内存管理的“幽灵陷阱”与系统化规避策略
c语言·c++·学习·指针
Chef_Chen27 分钟前
从0开始学习R语言--Day40--Kruskal-Wallis检验
开发语言·学习·r语言
ozawacai1 小时前
markdown学习笔记(个人向) Part.1
笔记·学习
吃货界的硬件攻城狮1 小时前
【显示模块】嵌入式显示与触摸屏技术理论
stm32·单片机·嵌入式硬件·学习
rui锐rui2 小时前
大数据学习6:Sqoop数据迁移工具
大数据·学习·sqoop
psybrain2 小时前
脑科学圈| 利用眼动追踪评估演讲情境下焦虑障碍儿童的注视行为
学习·心理学·脑科学·课堂·焦虑·儿童青少年·眼动
序属秋秋秋3 小时前
《C++初阶之内存管理》【内存分布 + operator new/delete + 定位new】
开发语言·c++·笔记·学习
许白掰3 小时前
Linux入门篇学习——Linux 工具之 make 工具和 makefile 文件
linux·运维·服务器·前端·学习·编辑器