R语言实现Lasso回归

news2024/11/28 8:50:46

一、Lasso回归

Lasso 回归(Least Absolute Shrinkage and Selection Operator Regression)是一种用于线性回归和特征选择的统计方法。它在回归问题中加入了L1正则化项,有助于解决多重共线性(多个特征高度相关)和特征选择问题。以下是关于 Lasso 回归的重要信息:

**1. 回归问题:** Lasso 回归用于解决回归问题,其中目标是根据一组特征来预测一个连续的数值输出。它是线性回归的扩展,可以用于估计线性关系中的系数。

**2. L1 正则化项:** Lasso 回归的关键特点是它在损失函数中添加了L1正则化项,这是模型系数的绝对值之和。这个正则化项的存在使得一些模型系数变为零,从而实现了特征选择的效果。L1 正则化的数学形式如下:

这里,Wi 表示模型的系数,λ(lambda) 是控制正则化程度的超参数。

**3. 特征选择:** Lasso 回归通过将一些系数压缩为零来选择最相关的特征。这意味着在建模过程中,一些特征被剔除,从而减少了模型的复杂性和过拟合的风险。这对于高维数据集中的特征选择非常有用。

**4. 模型复杂性控制:** 通过调整正则化参数 λ(lambda) 的值,可以控制模型的复杂性。较大的 λ(lambda) 会导致更多的系数变为零,从而降低模型的复杂性,而较小的 λ(lambda) 允许更多的非零系数,使模型更复杂。

**5. 优点:** Lasso 回归有助于解决多重共线性问题,减少了过拟合风险,提供了特征选择的功能,可以处理高维数据集。

**6. 适用领域:** Lasso 回归广泛应用于数据挖掘、机器学习、统计建模和各种领域的数据分析中,特别是在需要自动选择最重要特征的情况下。

二、Lasso回归对多维数据模型进行降维处理和复杂性控制

下面我们以一个例子进行Lasso回归对多维数据模型进行降维处理和复杂性控制

随机生成一个样本量为100,特征变量为10的模拟数据,并将10个特征变量形成矩阵形式,第一列是我们对应的结局变量,其他的10列是我们的特征变量。总共有100行代表100个样本,在实际中可能是100个病人的数据。

# 生成模拟数据set.seed(123)  # 设置随机种子以获得可重现的结果n <- 100  # 样本数量p <- 10   # 特征数量# 创建自变量矩阵 xx <- matrix(rnorm(n * p), n, p)
# 创建因变量 ytrue_coef <- c(2, 3, -1, 0, 0, 0, 1, 0, 0, 0)  # 真实的系数epsilon <- rnorm(n, mean = 0, sd = 1)  # 随机误差项y <- x %*% true_coef + epsilon
# 将数据放入一个数据框data <- data.frame(y, x)

这里的数据集data是我们接下来要进行lasso回归的模拟数据,接下来进行lasso回归。

#################安装和加载glmnet包install.packages("glmnet")library(glmnet)
# 将数据拆分为自变量和因变量x <- as.matrix(data[, -1])  # 自变量矩阵y <- data$y  # 因变量
# 执行Lasso回归fit <- glmnet(x, y, family = "gaussian", alpha = 1, maxit = 1000)  # alpha = 1 表示Lasso回归 maxit = 1000代表拉索回归的迭代次数为1000次
# 使用交叉验证选择最佳lambdacvfit <- cv.glmnet(x, y, family = "gaussian", alpha = 1, maxit = 1000)
# 打印最佳lambda的交叉验证结果print(cvfit)
# 查看最佳lambda值best_lambda <- cvfit$lambda.mincat("Best lambda:", best_lambda, "\n"# 可视化交叉验证误差随lambda的变化plot(cvfit)​​​​​​​

交叉验证误差路径图

`plot(cvfit)`生成的图形是交叉验证过程中均方误差(Mean-Squared Error,MSE)随正则化参数 logλ 的变化图,通常称为“交叉验证误差路径”图。这个图可以帮助你选择最佳的正则化参数 λ,以获得最适合你的 Lasso 回归模型。

在这个图中,你会看到横坐标是 logλ 的值,纵坐标是均方误差(MSE)。图中通常有两条线:

1. **MSE曲线(红色线):** 这条曲线显示了在不同 λ 值下的均方误差。曲线通常呈现 U 形,最低点对应着最佳的 λ 值。这个 λ 值产生了具有良好泛化性能的 Lasso 模型。

2. **垂直线(竖直的虚线或实线):** 这条线标记了交叉验证过程中选择的最佳 λ 值。如果使用一种特定的标准来选择最佳 λ(例如,"1se" 或 "min" 标准),那么这条线将标记该标准下的最佳 λ。

图表,主要关注以下几点:

- 寻找 MSE 曲线的最低点,这个点对应着最佳的 λ 值。

- 查看最佳 λ 值所在的位置,以确定选择模型时使用的 λ。

- 如果存在 "1se" 标准的竖直线,可以根据这个标准来选择一个更稀疏(更简化)的模型,即选择一个 λ 值,使模型具有较少的非零系数。

我们可以看到最佳lambda的交叉验证结果:

 Lambda   Index  Measure        SE      Nonzero

min 0.06832    41    1.243      0.1621       8

1se 0.20863    29    1.392       0.1479       4

这是 `cv.glmnet` 函数的输出结果,用于交叉验证 Lasso 回归模型(L1 正则化线性回归)。

1. `Measure: Mean-Squared Error`:这一部分指示了用于评估模型性能的指标,这里使用的是均方误差(Mean-Squared Error),通常用于回归问题的性能度量,它衡量了模型的预测值与实际观测值之间的平均平方误差。

2. `Lambda`:这一列列出了不同的正则化参数 λ(lambda)的值。正则化参数控制了模型的复杂性,λ 越大,模型的系数越趋向于零,模型更加简单。

3. `Index`:这一列是与每个 λ 值关联的模型索引。它表示在执行交叉验证时,哪个模型被选择为最佳模型。在这里,`Index` 列显示了最佳模型对应的 λ 的索引。

4. `Measure`:这一列是每个 λ 值下使用交叉验证计算得到的性能度量(均方误差)。

5. `SE`:这一列是均方误差的标准误差(Standard Error),它表示均方误差的置信区间。

6. `Nonzero`:这一列显示了在最佳模型中非零系数的数量。在 Lasso 回归中,正则化会将某些系数收缩为零,因此这一列显示了最佳模型中有多少个非零系数。

总结来说,这个输出结果提供了在不同正则化参数 λ 下模型的性能度量(均方误差),并指示了最佳模型所对应的 λ 值、均方误差和非零系数的数量。在实际应用中,通常会选择具有最小均方误差的模型作为最佳模型,以用于进一步的预测或分析。

那么结合这个输出的结果还有可视化的结果我们可以看出非零系数数量为8个时,回归模型最优。也就是对应的图中左侧的曲线。

# 绘制Lasso路径plot(fit, xvar = "lambda", label = TRUE)

系数轨迹(Coefficient Path)图

`plot(fit, xvar = "lambda", label = TRUE)` 绘制的是 Lasso 回归路径图,通常也称为系数轨迹(Coefficient Path)图。这个图有助于可视化在不同正则化参数 λ 的情况下,Lasso 回归模型的系数(回归系数)如何变化。这里是如何解释这个图的关键点:

1. **横坐标 Lambda(λ):** 这是正则化参数 λ 的值,它代表了模型复杂性的程度。λ 越大,模型的正则化程度越强,系数越趋向于零。图中横坐标从右到左逐渐减小,代表 λ 逐渐增大。

2. **纵坐标 Coefficients:** 这是模型中每个特征的系数值。每个特征在图上都有一条路径线,显示了在不同 λ 值下其系数如何变化。系数可以是正数、负数或零。

3. **颜色:** 每条路径线的颜色通常不同,以区分不同的特征。

4. **标签 Label:** 如果在 `plot()` 函数中设置了 `label = TRUE`,则路径图上会标记每个特征的名称或索引。

在解释路径图时,可以关注以下几点:

- **非零系数的特征:** 对于每个特征,从左到右的路径线表示了在 λ 增大的情况下系数的变化。当 λ 较大时,系数通常会逐渐减小,并有些系数会变为零。从左到右的路径线显示了特征是否被选择进入模型以及它们的权重。

- **稀疏性:** 路径图的右侧表示 λ 较大,模型较为稀疏,只有少数非零系数。左侧表示 λ 较小,模型较为复杂,更多系数不为零。

- **特征比较:** 通过比较不同特征的路径线,可以看出哪些特征对于模型的预测具有重要影响,哪些特征的影响较小。

- **最佳 λ 值:** 在路径图上,你可以根据模型选择的标准来选择最佳 λ 值。这通常是通过交叉验证来确定的,通常在路径图上标记。

总之,Lasso 路径图有助于理解模型在不同正则化参数下的变化情况,帮助我们选择适当的 λ 值以构建具有合适复杂性的模型。

那么让我们看一下最佳模型的系数

​​​​​​​

coef=coef(fit, s = cvfit$lambda.min)index=which(coef !=0)actCoef=coef[index]lassoGene=row.names(coef)[index]geneCoef=cbind(Gene=lassoGene,Coef=actCoef)geneCoef  #查看模型的相关系数

有八个特征变量被筛选出来,这也与我们在前面两个可视化的系数轨迹(Coefficient Path)图和交叉验证误差路径图中看到的相符。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1254388.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java中有几种基本数据类型以及转换方式【Java面经(1)】

问&#xff1a;Java中有几种基本数据类型呢&#xff1f;以及它们之间的转换方式。详细介绍下 总共有8种基本数据类型 byte 、short 、long 、float 、double 、boolean 、char 详细类型以及字节数&#xff1a; 基本数据类型的转换方式 自动类型转换&#xff1a;小–>大 byt…

Vue快速实践总结 · 上篇

文章目录 模板语法数据绑定事件处理计算属性监视属性&#xff08;监听器&#xff09;条件渲染列表渲染数据监视原理内置指令总结生命周期组件化编程组件使用步骤组件的嵌套this指向单文件组件ref、props 脚手架(Vue CLI)render函数 参考自己的Vue专栏以及Vue官方文档 模板语法 …

stm32 42步进电机 上位机示例

脉冲到底是个啥东西&#xff1f;步进电机一直说发脉冲 步进电机通过接收脉冲信号来实现精确的位置控制。脉冲是一种短暂的电信号&#xff0c;它的变化可以触发步进电机转动一定的角度或步进。步进电机控制系统会根据输入的脉冲信号来精确定位和控制步进电机的转动&#xff0c;每…

Android平台GB28181设备接入模块开发填坑指南

技术背景 为什么要开发Android平台GB28181设备接入模块&#xff1f;这个问题不再赘述&#xff0c;在做Android平台GB28181客户端的时候&#xff0c;媒体数据这块&#xff0c;我们已经有了很好的积累&#xff0c;因为在此之前&#xff0c;我们就开发了非常成熟的RTMP推送、轻量…

rsyslog出现Unit rsyslog.service is masked不可用问题解决

博主在测试将日志发送到日志服务器的功能时遇到了rsyslog服务不可用的问题&#xff0c;具体来说&#xff0c;就是执行systemctl restart rsyslog或者 service rsyslog restart命令时&#xff0c;出现了标题中所述的Unit rsyslog.service is masked问题。网上查找了很多资料&…

云服务器上部署 Web 项目及端口异常处理

文章目录 1. 在云服务器的 MySQL(MariaDB) 中, 建库建表2. 微调代码3. 打包4. 把 war 包 拷贝到云服务器上端口被占用处理 1. 在云服务器的 MySQL(MariaDB) 中, 建库建表 在云服务器中进入 MySQL mysql -u root -p把之前本地写好的 SQL 代码一粘贴即可 例如: -- 这个文件主要…

【Python】用三种方法创建tkinter桌面窗口

Python的tkinter是Python的标准GUI库之一&#xff0c;它是一个开源的、跨平台的GUI工具包&#xff0c;可以用于创建桌面应用程序。 tkinter提供了许多常见的GUI组件&#xff0c;例如按钮、文本框、标签、列表框等等&#xff0c;可以轻松地创建各种类型的桌面应用程序。它还支持…

go atexit源码分析

文章目录 atexit源码解析UML类图样例一: 程序退出之前执行注册函数1.1 流程图1.2 代码分析 样例二&#xff1a;使用cancel取消注册函数2.1 cancel流程图2.2 代码分析 样例三&#xff1a;使用Fatal/Fatalln/Fatal执行注册函数3.1 Fatal/Fatalln/Fatal流程图3.2 代码分析 atexit源…

什么是LASSO回归,怎么看懂LASSO回归的结果

随着机器学习的发展&#xff0c;越来越多SCI文章都使用了更多有趣、高效的统计方法来进行分析&#xff0c;LASSO回归就是其中之一。很多小伙伴听说过LASSO&#xff0c;但是对于LASSO是什么&#xff0c;有什么用&#xff0c;怎么才能实现&#xff0c;大家可能一头雾水。今天的文…

每日一题2023.11.26——个位数统计【PTA】

题目要求&#xff1a; 输入格式&#xff1a; 每个输入包含 1 个测试用例&#xff0c;即一个不超过 1000 位的正整数 N。 输出格式&#xff1a; 对 N 中每一种不同的个位数字&#xff0c;以 D:M 的格式在一行中输出该位数字 D 及其在 N 中出现的次数 M。要求按 D 的升序输出。…

【华为数通HCIP | 网络工程师】821-IGP高频题、易错题之OSPF(7)

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

blender 3D眼球结构

角膜&#xff08;Cornea&#xff09;&#xff1a;眼球的前部&#xff0c;透明的曲面&#xff0c;负责折射光线。虹膜&#xff08;Iris&#xff09;&#xff1a;眼睛的颜色部分&#xff0c;控制瞳孔大小以调整进入眼睛的光量。瞳孔&#xff08;Pupil&#xff09;&#xff1a;虹膜…

S25FL系列FLASH读写的FPGA实现

文章目录 实现思路具体实现子模块实现top模块 测试Something 实现思路 建议读者先对 S25FL-S 系列 FLASH 进行了解&#xff0c;我之前的博文中有详细介绍。 笔者的芯片具体型号为 S25FL256SAGNFI00&#xff0c;存储容量 256Mb&#xff0c;增强高性能 EHPLC&#xff0c;4KB 与 6…

快速幂算法详解(C++实现)

文章目录 1. 什么是快速幂2. 暴力求解代码实现缺陷分析 3. 优化一&#xff1a;取模运算的性质4. 优化二&#xff1a;快速幂算法的核心思想5. 终极优化&#xff1a;位运算优化6. 源码 这篇文章我们来一起学习一个算法——快速幂算法。 1. 什么是快速幂 顾名思义&#xff0c;快速…

中海油“海安杯”一站到底知识竞赛真的很有特色

中海油“海安杯”一站到底知识竞赛规格高&#xff0c;赛制复杂&#xff0c;天纵知识竞赛系统为此次知识竞赛提供了软件支持。本次竞赛设置选手区和擂台区两个区域。比赛共分为五个轮次&#xff0c;五个轮次选手区所有参赛选手均需答题。 第一轮&#xff1a;“脱颖而出” 所有参…

叠加原理(superposition principle)

叠加原理&#xff08;superposition principle&#xff09;指对线性系统而言&#xff0c;两个或多个输入产生的输出&#xff0c;等于这几个输入单独引起的输出的和&#xff0c;即输入的叠加等于各输入单独引起的输出的叠加。 例如&#xff0c;如果输入产生的输出是&#xff0c;…

B树与B+树的对比

B树&#xff1a; m阶B树的核心特性&#xff1a; 树中每个节点至多有m棵子树&#xff0c;即至多含有m-1个关键字根节点的子树数属于[2, m]&#xff0c;关键字数属于[1, m-1]&#xff0c;其他节点的子树数属于 [ ⌈ m 2 ⌉ , m ] [\lceil \frac{m}{2}\rceil, m] [⌈2m​⌉,m]&am…

Spring的依赖注入,依赖注入的基本原则,依赖注入的优势

文章目录 Spring的依赖注入依赖注入的基本原则依赖注入有什么优势查找定位操作与应用代码完全无关。有哪些不同类型的依赖注入实现方式&#xff1f;构造器依赖注入和 Setter方法注入的区别 Spring的依赖注入 控制反转IoC是一个很大的概念&#xff0c;可以用不同的方式来实现。…

电子学会C/C++编程等级考试2022年09月(二级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:统计误差范围内的数 统计一个整数序列中与指定数字m误差范围小于等于X的数的个数。 时间限制:5000 内存限制:65536输入 输入包含三行: 第一行为N,表示整数序列的长度(N <= 100); 第二行为N个整数,整数之间以一个空格分…

【教学类-06-12】20231126 (一)如何让加减乘除题目从小到大排序(以1-20之间加法为例,做正序排列用)

结果展示 优化后 优化前 背景需求&#xff1a; 生成列表 单独抽取显示题目排序方法 存在问题: 我希望 00 01 02……这样排序&#xff0c;但是实际上&#xff0c;除了第一个加数会从小到大排序&#xff0c;第二个被加数的第十位数和个位数都会从小到大排序&#xff0c;也就是…