Lucas带你手撕机器学习——岭回归

news2024/11/24 7:39:58

岭回归(Ridge Regression)

一、背景与引入

在进行线性回归分析时,我们常常面临多重共线性的问题。多重共线性指的是自变量之间高度相关,这会导致回归系数的不稳定性,使得模型的预测能力降低。传统的线性回归通过最小二乘法来拟合数据,但在自变量之间存在共线性时,最小二乘估计(Ordinary Least Squares, OLS)可能产生较大的方差,从而影响模型的可靠性。

为了克服这个问题,岭回归应运而生。岭回归在最小二乘法的基础上引入了正则化(Regularization)技术,通过添加惩罚项来控制模型复杂度,从而提高模型的泛化能力。

二、岭回归的原理

岭回归的基本思想是在线性回归的损失函数中增加一个惩罚项。该惩罚项是所有回归系数的平方和乘以一个非负的超参数 (\lambda)(也称为岭参数)。这种方法通过惩罚大的回归系数来减小模型的复杂度,从而降低模型的方差。

损失函数

岭回归的损失函数可以表示为:

在这里插入图片描述

其中:

  • (y) 是目标变量。
  • (X) 是自变量矩阵。
  • (\beta) 是回归系数。
  • (\lambda) 是惩罚项的强度,控制正则化的程度。
三、数学推导
  1. 最小二乘法

在线性回归中,我们通过最小化以下损失函数来求解回归系数 (\beta):

在这里插入图片描述

  1. 岭回归的损失函数

在岭回归中,我们在最小二乘法的损失函数上添加一个惩罚项,得到如下损失函数:

在这里插入图片描述

  1. 求解岭回归系数

为了找到使损失函数最小化的 (\beta),我们可以对损失函数求导并令其为零。通过矩阵运算,可以得到岭回归的解:

在这里插入图片描述

其中,(I) 是单位矩阵,(\lambda) 是岭参数,控制正则化的强度。通过引入 (\lambda),我们可以有效控制回归系数的大小,减少模型的方差。

四、岭回归的实现
4.1 使用 Sklearn 实现岭回归

在 Python 中,可以使用 scikit-learn 库轻松实现岭回归。以下是一个简单的示例,使用 Ridge 类实现岭回归:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_regression
from sklearn.linear_model import Ridge
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# 生成模拟数据
X, y, coef = make_regression(n_samples=100, n_features=10, noise=0.1, coef=True, random_state=42)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建岭回归模型
ridge = Ridge(alpha=1.0)  # alpha对应于λ

# 拟合模型
ridge.fit(X_train, y_train)

# 预测
y_pred = ridge.predict(X_test)

# 计算均方误差
mse = mean_squared_error(y_test, y_pred)
print("均方误差:", mse)

# 可视化真实值与预测值
plt.scatter(y_test, y_pred)
plt.xlabel("真实值")
plt.ylabel("预测值")
plt.title("真实值与预测值的关系")
plt.plot([min(y_test), max(y_test)], [min(y_test), max(y_test)], color='red', linestyle='--')  # y=x 线
plt.show()
4.2 代码解析
  • 数据生成:使用 make_regression 函数生成模拟的线性回归数据集,包括10个特征和一定的噪声。
  • 数据划分:使用 train_test_split 将数据划分为训练集和测试集,测试集占20%。
  • 创建模型:使用 Ridge 类创建岭回归模型,设置超参数 (\alpha)(即惩罚项的强度)。
  • 拟合模型:在训练集上拟合模型。
  • 预测:在测试集上进行预测。
  • 评估模型:使用均方误差(MSE)评估模型性能。
  • 可视化:通过散点图可视化真实值与预测值的关系,并添加y=x线作为基准。
4.3 超参数调优

选择合适的 (\lambda) 值对于岭回归的性能至关重要。可以使用交叉验证(Cross Validation)来选择最佳的超参数。例如,使用 GridSearchCV 来调优 (\alpha):

from sklearn.model_selection import GridSearchCV

# 定义参数范围
param_grid = {'alpha': np.logspace(-3, 3, 7)}

# 创建岭回归模型
ridge = Ridge()

# 进行网格搜索
grid_search = GridSearchCV(ridge, param_grid, cv=5, scoring='neg_mean_squared_error')
grid_search.fit(X_train, y_train)

# 输出最佳参数
print("最佳α值:", grid_search.best_params_)

通过交叉验证,可以得到最佳的 (\lambda) 值,进而提高模型的泛化能力。

五、岭回归的优缺点
5.1 优点
  1. 减少方差:通过引入正则化项,岭回归有效减少了回归系数的方差,提高了模型的稳定性。
  2. 处理多重共线性:岭回归在自变量之间存在共线性时,仍然能够提供稳定的估计。
  3. 保留所有特征:与 Lasso 回归不同,岭回归不会将某些特征的系数压缩到零,而是使其趋近于零,从而保留了所有特征的信息。
5.2 缺点
  1. 难以解释:由于岭回归保留所有特征,模型的解释性较差,特别是在特征较多时。
  2. 选择 (\lambda) 的困难:选择合适的 (\lambda) 值可能会增加模型调优的复杂性,尤其是在特征空间较高时。
  3. 计算开销:在特征维度非常高的情况下,计算 ((X^TX + \lambda I)^{-1}) 的开销可能较大。
六、岭回归的应用实例

岭回归在实际应用中有广泛的应用场景,以下是一些常见的应用领域:

  1. 经济学建模:在经济学中,通常会遇到许多自变量之间存在高度相关的情况,岭回归可以用来建立稳健的回归模型。
  2. 基因数据分析:在生物信息学中,基因表达数据通常包含大量特征(基因)和相对较少的样本,岭回归可以帮助克服高维数据中的多重共线性问题。
  3. 房价预测:在房价预测模型中,多个特征(如面积、卧室数量、位置等)可能存在一定的相关性,岭回归可以提供稳定的预测结果。
七、岭回归的扩展

岭回归的基本思想可以扩展到其他类型的回归中,如:

  • 弹性网(Elastic Net):结合了 L1(Lasso)和 L2(Ridge)正则化的优点,适用于特征较多且相关性较强的情况。
  • 偏最小二乘回归(PLS Regression):在自变量存在多重共线性的情况下,采用偏最小二乘法进行回归分析。
八、总结

岭回归是一种强大的线性回归扩展方法,通过引入 L2 正则化项,有效降低了多重共线性对模型的影响。尽管其在解释性和超参数选择上可能存在一定的挑战,但在许多实际应用中,岭回归提供了稳定和可靠的解决方案。随着机器学习和数据分析的发展,岭回归在各个领域的应用仍在不断扩大,为更复杂的数据分析提供了有效的工具。

好的,以下是对岭回归的拓展部分,涵盖其理论延伸、应用示例、与其他方法的比较,以及最新研究方向等内容。


岭回归的拓展

理论延伸
岭回归与其他正则化方法的比较
  • Lasso 回归(Lasso Regression):Lasso 回归通过引入 L1 正则化项,可以将某些特征的回归系数压缩为零,从而实现特征选择。与岭回归相比,Lasso 更适合用于高维特征选择场景,而岭回归则更注重控制多重共线性。

  • 弹性网(Elastic Net):弹性网结合了 L1 和 L2 正则化的优点,适用于特征数量大于样本数量或者存在多重共线性的情况。弹性网的损失函数可以表示为:

在这里插入图片描述

通过调节 (\lambda_1) 和 (\lambda_2),弹性网能够平衡 Lasso 和岭回归的特性,适应不同的建模需求。

适应性岭回归(Adaptive Ridge Regression)

适应性岭回归是一种改进的岭回归方法,试图通过动态调整 (\lambda) 来适应不同特征的重要性。具体来说,该方法根据每个特征的预测能力或重要性来设置不同的惩罚参数,从而提高模型的性能。这一思路可以通过对特征进行预处理或利用交叉验证来实现。

应用示例
环境科学

在环境科学研究中,岭回归被用于处理涉及多个环境因子的复杂模型。例如,在研究气候变化对植物生长影响的模型中,多个气候因子(如温度、降水量、日照时间等)往往相互影响且高度相关。岭回归能够有效减小因共线性带来的预测不稳定性,从而提供更可靠的预测结果。

医疗领域

在医疗领域,岭回归被广泛应用于疾病预测和诊断。例如,分析基因组数据以预测某种疾病的风险时,特征的维度通常很高,且各基因之间可能存在共线性。在这种情况下,岭回归能够帮助研究人员得到更稳定的模型,以识别与疾病相关的基因特征。

金融风险管理

在金融领域,岭回归被用于建立信用评分模型和风险管理模型。例如,银行在评估借款人的信用时,通常会考虑多个因素(如收入、负债、信用历史等),这些因素可能会相互影响。通过岭回归,金融机构能够建立更稳定的评分模型,降低违约风险。

与其他方法的比较

在选择模型时,岭回归通常与其他回归方法进行比较,如 Lasso 回归、逐步回归(Stepwise Regression)、主成分回归(Principal Component Regression)等。以下是它们的比较:

方法特点适用场景
岭回归(Ridge)L2 正则化,适合处理多重共线性,保留所有特征特征多且相关性强
Lasso 回归L1 正则化,可以实现特征选择特征维度大且希望进行特征选择
逐步回归逐步添加或删除特征,根据 AIC/BIC 进行选择特征数量相对较少,容易解释模型
主成分回归先降维再回归,处理高维数据特征数目远大于样本数的情况
最新研究方向

随着机器学习和深度学习的发展,岭回归的应用和理论研究也在不断拓展。以下是一些当前研究的方向:

深度学习与岭回归的结合

近年来,研究人员开始探索将岭回归与深度学习结合的方法,例如在神经网络中引入岭正则化以增强模型的鲁棒性。通过在网络的损失函数中添加 L2 正则化项,可以提高模型的泛化能力,尤其在样本数量不足或特征维度过高的情况下。

高维数据分析

随着生物信息学、金融科技等领域数据维度的迅速增加,研究人员对高维数据的分析提出了新的方法和思路。针对高维数据中的多重共线性问题,研究者们提出了一些改进的岭回归方法,如加权岭回归(Weighted Ridge Regression)等,以增强模型的适应性。

结合贝叶斯方法

贝叶斯方法与岭回归的结合是一个活跃的研究领域。贝叶斯岭回归(Bayesian Ridge Regression)通过对岭回归的参数引入先验分布,能够在小样本情况下提高模型的稳定性与预测能力。这一方法为不确定性量化提供了新的视角。

总结

岭回归是一种强大的回归分析工具,尤其适用于自变量之间存在多重共线性的情况。通过引入 L2 正则化项,岭回归有效降低了模型的方差,提高了预测的稳定性。尽管其在模型解释性和超参数选择上存在一定的挑战,但其在经济学、环境科学、医疗健康等多个领域的广泛应用证明了其价值。

在现代数据分析中,岭回归与其他方法的结合及其理论拓展正在成为研究的热点,未来有望在更复杂的数据集和应用场景中继续发挥重要作用。

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

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

相关文章

【R + Python】iNaturalist 网站图片下载 inat api

文章目录 一、iNaturalist 简介二、R语言API:rinat三、示例3.1 获取观测数据3.2 绘制可视化图像函数用法 3.4 在区域网格中搜索3.5 下载图片3.51 提取图片 url3.52 下载图片: R语言3.53 下载图片: python 四、获取详细rinat包的文档 一、iNaturalist 简介 &#x1…

微服务网关Zuul

一、Zuul简介 Zuul是Netflix开源的微服务网关,包含对请求的路由和过滤两个主要功能。 1)路由功能:负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础。 2)过滤功能:负责对请求的过程…

ReactOS系统中搜索给定长度的空间地址区间中的二叉树

搜索给定长度的空间地址区间 //搜索给定长度的空间地址区间 MmFindGap MmFindGapTopDown PVOID NTAPI MmFindGap(PMADDRESS_SPACE AddressSpace,ULONG_PTR Length,ULONG_PTR Granularity,BOOLEAN TopDown );PMADDRESS_SPACE AddressSpace,//该进程用户空间 ULONG_PTR Length,…

spring整合使用xml方式整合Druid数据源连接池

1.普通的JDBC数据库连接使用 DriverManager 来获取,每次向数据库建立连接的时候都要将 Connection加载到内存中,再验证用户名和密码(得花费0.05s~1s的时间)。需要数据库连接的时候,就向数据库要求 一个,执行完成后再断…

2024 年 MathorCup妈杯A题台风的分类与预测论文首发+代码分享

基于多模型方法的台风分类、路径预测及登陆后降水影响分析 摘要 台风作为全球最严重的自然灾害之一,具有极大的破坏性和复杂性,其预测和分类具有重要意义。本文基于历史台风数据,针对台风的特征分类、路径预测以及登陆后的降水量和风速变化…

linux网络编程5——Posix API和网络协议栈,使用TCP实现P2P通信

文章目录 Posix API和网络协议栈,使用TCP实现P2P通信1. socket()2. bind()3. listen()4. connect()5. accept()6. read()/write(), recv()/send()7. 内核tcp数据传输7.1 TCP流量控制7.2 TCP拥塞控制——慢启动/拥塞避免/快速恢复/快速重传 8. shutdown()9. close()9…

Jvm中的堆和栈

JVM中的堆和栈分别存放不同的数据类型和内容。 ‌栈(Stack)‌: 存储基本数据类型(如int, char, boolean等)和对象的引用。存储局部变量、方法调用、程序运行状态、方法返回值等。每个线程都有一个独立的线程栈&#…

【 IC每日一题】

IC每日一题 1 八股题:低功耗设计方法1.1 功耗类型1.1.1 动态功耗1.1.2 静态功耗 1.2 SoC低功耗设计方法1.2.1 基于时钟clock的低功耗设计1.2.2 基于电压域voltage的低功耗设计1.2.3 多阈值库1.2.4 RTL低功耗设计 2 手撕题:序列检测2.1 移位寄存器写法2.2…

ClickHouse 3节点集群安装

ClickHouse 简介 ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。 官方网站:https://clickhouse.com/ 项目地址:https://github.com/ClickHouse/ClickHouse 横向扩展集群介绍 此示例架构旨在提供可扩展性。它包括三个节点&#xff…

ffmpeg视频滤镜: 色温- colortemperature

滤镜简述 colortemperature 官网链接 》 FFmpeg Filters Documentation 这个滤镜可以调节图片的色温,色温值越大显得越冷,可以参考一下下图: 咱们装修的时候可能会用到,比如选择灯还有地板的颜色的时候,选暖色调还是…

提升产品竞争力之--IPD产品成本篇

在汉捷的咨询过程中,很多企业老总交流时都会提起这个抱怨:“现在产品竞争太激烈了,客户买产品首先看价格,你价格高一点就买别家的啦……” 汉捷咨询在前文谈到“通过定义产品包需求,来提升产品竞争力。差异化开发&…

Maven - Assembly实战

文章目录 PreAssembly插件基本配置使用示例示例1:创建包含依赖的JAR包示例2:自定义描述符示例3:多模块项目打包 实战 _qiwenfile结构pom.xml触发脚本 实战 _nacos输出 zip / tar.gz常见问题及解决方案 Pre Spring Boot - 瘦身大作战&#xf…

Go 版本升级 | 统计 Github 社区 Go 版本分布情况

背景 因为最近三年用的 Go 版本是 1.16,但最新的版本升级到了 1.23,很多依赖的三方包最新文件都已经升级,使用了泛型以及 GO 新版本的特性,导致我只能适配 Go1.16 的三方包旧版本,但这种问题发生的频率多了后&#xf…

解决运行jar错误: 缺少 JavaFX 运行时组件, 需要使用该组件来运行此应用程序

报错 众所周知jdk8以上都没有Javafx java -jar target/myyscan-1.0-SNAPSHOT.jar 错误: 缺少 JavaFX 运行时组件, 需要使用该组件来运行此应用程序解决 https://gluonhq.com/products/javafx/ 去下载/javafx/到本地,选择自己的型号 然后记得指定路径 java --m…

React类组件详解

React类组件是通过创建class继承React.Component来创建的,是React中用于构建用户界面的重要部分。以下是对React类组件的详细解释: 一、定义与基本结构 类组件使用ES6的class语法定义,并继承自React.Component。它们具有更复杂的功能&#xf…

R语言机器学习算法实战系列(十二)线性判别分析分类算法 (Linear Discriminant Analysis)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍LDA的原理LDA的步骤教程下载数据加载R包导入数据数据预处理数据描述数据切割构建模型预测测试数据评估模型模型准确性混淆矩阵模型评估指标ROC CurvePRC Curve保存模型总结优点:缺…

《性能之巅:洞悉系统、企业与云计算》-观测工具-笔记

《性能之巅:洞悉系统、企业与云计算》第一章(绪论)和第二章(方法)的笔记,请参考Part 1,第三章(操作系统)的笔记,请参考Part 2,本文是第四章——观…

鸿蒙开发融云demo发送文本消息

鸿蒙开发融云demo发送文本消息 融云鸿蒙版是不带UI的,得自己一步步搭建。 这次说如何发送文本消息,并且显示文本消息 一、思路 发送用:IMEngine.getInstance().sendMessage 显示文本: Text(ImUtils.dealMyTextContent(this.ms…

Linux:磁盘深潜:探索文件系统、连接之道与库的奥秘

✨✨✨学习的道路很枯燥,希望我们能并肩走下来! 文章目录 目录 文章目录 前言 一 磁盘 1.1 磁盘的物理结构 1.2 磁盘的存储结构 1.3 磁盘的逻辑结构 ​编辑二 文件系统 2.1 简单了解 2.2 inode 2.3 文件描述符,进程与文件系统的关系 ​编辑2…

格姗知识圈博客网站开源了!

格姗知识圈博客 一个基于 Spring Boot、Spring Security、Vue3、Element Plus 的前后端分离的博客网站!本项目基本上是小格子一个人开发,由于工作和个人能力原因,部分技术都是边学习边开发,特别是前端(工作中是后端开…