R语言实现Lasso回归

一、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.rhkb.cn/news/206883.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言——写一个简单函数,找两个数中最大者

#include <stdio.h>int max( int a, int b ) { return a>b ? a:b; }int main() { int a, b;printf("输入两个数:\n");scanf("%d %d", &a, &b);printf("max %d\n", max(a, b));return 0; }输出结果&#xff1a;

C#文件基本操作(判断文件是否存在、创建文件、复制或移动文件、删除文件以及获取文件基本信息)

目录 一、判断文件是否存在 1.File类的Exists()方法 2.FileInfo类的Exists属性 二、创建文件 1.File类的Create()方法 2.FileInfo类的Create()方法 三、复制或移动文件 1.File类的Copy()方法 2.File类的Move()方法 3.FileInfo类的CopyTo()方法 四、删除文件 1.File…

大数据基础设施搭建 - Hive

文章目录 一、上传压缩包二、解压压缩包三、配置环境变量四、初始化元数据库4.1 配置MySQL地址4.2 拷贝MySQL驱动4.3 初始化元数据库4.3.1 创建数据库4.3.2 初始化元数据库 五、启动元数据服务metastore5.1 修改配置文件5.2 启动/关闭metastore服务 六、启动hiveserver2服务6.1…

MacOS + Android Studio 通过 USB 数据线真机调试

环境&#xff1a;Apple M1 MacOS Sonoma 14.1.1 软件&#xff1a;Android Studio Giraffe | 2022.3.1 Patch 3 设备&#xff1a;小米10 Android 13 一、创建测试项目 安卓 HelloWorld 项目: 安卓 HelloWorld 项目 二、数据线连接手机 1. 手机开启开发者模式 参考&#xff1…

FFmpeg之将视频转为16:9(横屏)或9:16(竖屏)(一)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

代码随想录算法训练营第一天 | 704. 二分查找 27. 移除元素

class Solution { public:int search(vector<int>& nums, int target) {int l0;int rnums.size()-1;while(l<r){int mid(lr)>>1;if(targetnums[mid]) return mid;if(target>nums[mid]){lmid1;}else{rmid-1;}}return -1;} }; 之前就已经熟悉二分法了&am…

【HuggingFace Transformer库学习笔记】基础组件学习:pipeline

一、Transformer基础知识 pip install transformers datasets evaluate peft accelerate gradio optimum sentencepiece pip install jupyterlab scikit-learn pandas matplotlib tensorboard nltk rouge在host文件里添加途中信息&#xff0c;可以避免运行代码下载模型时候报错…

计算机网络(二)

&#xff08;八&#xff09;客户端软件设计的细节 A、解析协议号 客户端可能会需要通过协议名指定协议&#xff0c;但是Socket接口是用协议号指定的&#xff0c;这时候我们就需要使用getprotobyname()函数实现协议名到协议号的转换&#xff0c;该函数会返回一个指向protoent的…

西南科技大学电路分析基础实验A1(元件伏安特性测试 )

目录 一、实验目的 二、实验设备 三、预习内容(如:基本原理、电路图、计算值等) 1、测定线性电阻的伏安特性 2、二极管伏安特性测试 3、测定实际电压源的伏安特性 四、实验数据及结果分析(预习写必要实验步骤和表格) 1、测定线性电阻的伏安特性 2、二极管伏安特性测…

Redis未授权访问-CNVD-2019-21763复现

Redis未授权访问-CNVD-2019-21763复现 利用项目&#xff1a; https://github.com/vulhub/redis-rogue-getshell 解压后先进入到 RedisModulesSDK目录里面的exp目录下&#xff0c;make编译一下才会产生exp.so文件&#xff0c;后面再利用这个exp.so文件进行远程代码执行 需要p…

能耗远程在线监测系统在工业节能提高效率

摘要&#xff1a;为保证企业实现节能减排目标&#xff0c;设计和使用远程在线监测系统势在必行。远程在线监测系统是基于传感器与网络技术的优势&#xff0c;在企业区域各个位置针对性安装传感器&#xff0c;对实时数据进行采集、编码传输到远程管理系统。远程管理系统对采集的…

系统设计面试指南之分布式任务调度

1 简介 任务是需要资源(CPU 时间、内存、存储、网络带宽等)在指定时间内完成的一段计算工作。 通过智能地将资源分配给任务以满足任务级和系统级目标的系统称为任务调度程序。 任务调度程序&#xff1a; 及时决定和分配资源给任务的过程称为任务调度。 当我们在 Facebook 发…

【EasyExcel】导出excel并支持自定义设置数据行背景颜色等

需求背景&#xff1a; 根据查询条件将列表数据导出&#xff0c;并筛选出满足某个条件的数据&#xff0c;将满足条件的数据的背景颜色设置成黄色。 &#xff08;本文例子如&#xff1a;name出现的次数大于等于2&#xff0c;将相关数据背景颜色都设置为黄色&#xff09; …

MySQL备份与恢复(重点)

MySQL备份与恢复&#xff08;重点&#xff09; 一、用户管理与权限管理 ☆ 用户管理 1、创建MySQL用户 注意&#xff1a;MySQL中不能单纯通过用户名来说明用户&#xff0c;必须要加上主机。如jack10.1.1.1 基本语法&#xff1a; mysql> create user 用户名被允许连接的主…

java springboot测试类虚拟MVC环境 匹配返回值与预期内容是否相同 (JSON数据格式) 版

上文java springboot测试类鉴定虚拟MVC请求 返回内容与预期值是否相同我们讲了测试类中 虚拟MVC发送请求 匹配返回内容是否与预期值相同 但是 让我意外的是 既然没人骂我 因为我们实际开发 返回的基本都是json数据 字符串的接口场景是少数的 我们在java文件目录下创建一个 dom…

3分钟使用 WebSocket 搭建属于自己的聊天室(WebSocket 原理、应用解析)

文章目录 WebSocket 的由来WebSocket 是什么WebSocket 优缺点优点缺点 WebSocket 适用场景主流浏览器对 WebSocket 的兼容性WebSocket 通信过程以及原理建立连接具体过程示例Sec-WebSocket-KeySec-WebSocket-Extensions 数据通信数据帧帧头&#xff08;Frame Header&#xff09…

Spring整合web环境

目录 Javaweb三大组件及环境特点 Spring整合web环境的思路及实现 Spring的web开发组件spring-web MVC框架思想及其设计思路 Javaweb三大组件及环境特点 Spring整合web环境的思路及实现 package com.xfy.listener;import com.xfy.config.SpringConfig; import org.springfra…

具备这四个特征的项目经理,牛逼!

大家好&#xff0c;我是老原。 成为一个业绩第一又能准时下班的工作强人&#xff0c;应该是每个职场人的梦想&#xff0c;但现实往往不那么尽如人意…… 虽然如此&#xff0c;但是不代表我们不能向能做到这样的大佬看齐啊。 工作十余年&#xff0c;见过各种各样的职场人士&a…

高级IO select 多路转接实现思路

文章目录 select 函数fd_set 类型timeval 结构体select 函数的基本使用流程文件描述符就绪条件以select函数为中心实现多路转接的思路select 缺陷 select 函数 int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); selec…

6.1 Windows驱动开发:内核枚举SSDT表基址

SSDT表&#xff08;System Service Descriptor Table&#xff09;是Windows操作系统内核中的关键组成部分&#xff0c;负责存储系统服务调用的相关信息。具体而言&#xff0c;SSDT表包含了系统调用的函数地址以及其他与系统服务相关的信息。每个系统调用对应SSDT表中的一个表项…