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

岭回归(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.mzph.cn/diannao/58307.shtml

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

相关文章

模块化主动隔振系统市场规模:2023年全球市场规模大约为220.54百万美元

模块化主动隔振系统是一种用于精密设备和实验装置的隔振解决方案,通过主动控制技术消除振动干扰,提供稳定的环境。目前,随着微纳制造和精密测量技术的发展,对隔振系统的要求越来越高。模块化设计使得系统能够灵活适应不同负载和工…

STM32 第3章 如何用串口下载程序

时间:2024.10.28 一、学习内容 1、安装USB转串口驱动 1.1串口下载连接示意图 1、USB转串口模块在开发板上是一个独立的模块,可通过调帽与其他串口连接,USART1/2/3/4/5 2、只有USART1才具有串口下载的功能。 3、CH340是电平转换芯片,将电脑端输出的USB电平和单片机输…

1.3 面向对象 C++面试问题

1.3.1 简述一下什么是面向对象,面向对象与面向过程的区别 什么是面向对象 面向对象(Object-Oriented Programming,OOP)是一种编程范式,它通过将现实世界中的实体抽象为“对象”来组织代码。面向对象编程关注对象及其交互&#x…

行业首发|美格智能创新推出5G+Wi-Fi 7智能终端解决方案,端侧AI助力数智升维

在数字化时代的生产生活过程中,特殊场景下的通信需求愈发重要。高速、灵活、稳定的通信保障能够进一步提升生产生活的效率。随着5G网络的高速发展,一方面,其凭借低时延、高带宽、高可靠性和大规模连接的特性让移动终端的网络连接实现跨越式升…

论文解析八: GAN:Generative Adversarial Nets(生成对抗网络)

目录 1.GAN:Generative Adversarial Nets(生成对抗网络)1、标题 作者2、摘要 Abstract3、导言 IntroductionGAN的介绍 4、相关工作 Related work5、模型 Adversarial nets总结 6.理论计算 Theoretical Results具体算法公式全局优化 Global O…

【32】C++流

目录 C流 读写文件:文件流 对文本文件流读写 写文本文件 读文本文件 对二进制文件流读写 写二进制文件 读二进制文件 对文件流按格式读写取数据 按指定格式写文件 按指定格式读文件 C流 IO: 向设备输入数据和输出数据 C的IO流 设备: 文件控制台特定的数…

21世纪20年代了, 居然遭遇扩容U盘!

扩容u盘前些年很泛滥, 所以也有针对扩容u盘的测试软件 h2testw h2testw的工作原理很简单, 就是往u盘里写文件,写满后再读取文件进行验证 如果没有h2test, 也可以往里面考大文件, 再拷贝出来, 不出错就表示…

Navicat导入Excel数据时数据被截断问题分析与解决方案

目录 前言1. 问题分析1.1 默认字段类型的影响1.2 MySQL诊断机制的限制 2. 解决方案2.1 修改字段长度2.2 修改Excel数据以影响推断2.3 检查导入工具的设置 3. 其他注意事项3.1 注册表的修改3.2 增加自增ID 4. 结语 前言 在数据库的日常操作中,将Excel数据导入MySQL是…

SQL Server 当前日期及其未来三天的日期

当前日期及其未来三天的日期,并分别以 YYYY-MM-DD 和 yyyyMMdd 的格式展示 1、当前日期及其未来三天的日期,以 YYYY-MM-DD的格式展示 WITH CurrentDate AS (SELECT GETDATE() AS 当前日期 ) -- 使用 CONVERT 函数 SELECTCONVERT(VARCHAR(10), 当前日期,…

Ubuntu22.04版本左右,扩充用户可使用内存

1 取得root权限后,输入命令 lsblk 查看所有磁盘和分区,找到想要替换用户可使用文件夹内存的磁盘和分区。若没有进行分区,并转为所需要的分区数据类型,先进行分区与格式化,过程自行查阅。 扩充替换过程,例如…

Springboot项目搭建的问题

1.第一次出现这个问题是在使用postgresql进行搭建项目的时候,但是配置文件中的驱动一致导入不了 最后发现是meaven中依赖导入不进来(不知道为什么),于是手动的在meaven中央仓库下载了对应的jar进行配置 然后项目可以正常启动 2.…

大模型系列——AlphaZero/强化学习/MCTS

AlphaGo Zero无需任何人类历史棋谱,仅使用深度强化学习,从零开始训练三天的成就已远远超过了人类数千年积累的围棋知识。 1、围棋知识 (1)如何简单理解围棋知识 (2)数子法分胜负:https://zhu…

w外链如何跳转微信小程序

要创建外链跳转微信小程序,主要有以下几种方法: 使用第三方工具生成跳转链接: 注册并登录第三方外链平台:例如 “W外链” 等工具。前往该平台的官方网站,使用手机号、邮箱等方式进行注册并登录账号。选择创建小程序外…

Jellycat玩偶界的天花板,如何用情绪营销征服成年人的心?

Jellycat的用户肯定对这个品牌有一定的了解,不知道的用户或许也看过这个很火的茄子表情包,这是Jellycat很火的一款玩偶“活泼茄子”。Jellycat,这个源自英国伦敦的高端玩具品牌,近年来在全球范围内迅速走红,摇身一变玩…

基于SSM土家风景文化管理系统的设计

管理员账户功能包括:系统首页,个人中心,用户管理,景点分类管理,热门景点管理,门票订单管理,旅游线路管理,系统管理 前提账号功能包括:系统首页,个人中心&…

搭建海外云服务器需要什么费用?

搭建海外云服务器需要什么费用?搭建海外云服务器的费用涉及多个方面,包括服务器实例费用、公网带宽费用、磁盘存储费用、操作系统费用和其他费用。具体费用取决于所选的云服务提供商、服务器配置、计费模式等因素。以下是UU云小编整理的一些主要的费用构…

IDEA->EasyCode(mapper.xml) 字段无逗号分隔和修改全局变量问题

1.mapperxml字段无逗号分隔 在easycode的设置里找到: 1、Template下的 mapper.xml.vm脚本 2、Global Config下的 mybatisSupport.vm脚本 将脚本里的 $velocityHasNext 替换成 $foreach.hasNext,然后保存。Mybatis-Plus框架操作一样 github->issue连…

Elastic Stack - FileBeat 入门浅体验

Filebeat 是 Elastic Stack 中的一个轻量级日志转发器,主要用于收集和转发日志数据。Filebeat 作为代理安装在您的服务器上,可以监控您指定的日志文件或位置,收集日志事件,并将其转发到 Elasticsearch 或 Logstash 进行索引。 一…

STM32--基于STM32F103C8T6的OV7670摄像头显示

本文介绍基于STM32F103C8T6实现的OV7670摄像头显示设计(完整资源及代码见文末链接) 一、简介 本文实现的功能:基于STM32F103C8T6实现的OV7670摄像头模组实时在2.2寸TFT彩屏上显示出来 所需硬件: STM32F103C8T6最小系统板、OV76…

C#与C++交互开发系列(十一):委托和函数指针传递

前言 在C#与C的互操作中,委托(delegate)和函数指针的传递是一个复杂但非常强大的功能。这可以实现从C回调C#方法,或者在C#中调用C函数指针的能力。无论是跨语言调用回调函数,还是在多线程、异步任务中使用委托&#x…