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电平和单片机输…

移除字符串中空格_Java实现

package com.leetcode;/*** 移除字符串中空格*/ public class RemoveSpaceFromStr {public static String removeWhiteSpaceFromStr(String input){StringBuilder outputnew StringBuilder();char[] charsinput.toCharArray();for (char c : chars) {if(!Character.isWhitespac…

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

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

国产游戏的崛起与挑战:技术创新如何驱动未来发展

近年来,中国的游戏行业如星火燎原,国产游戏不仅在国内市场站稳了脚跟,更在国际市场上逐渐展露锋芒。从《原神》到《永劫无间》,这些作品以其精美的画面、复杂的物理引擎和智能化的AI技术赢得了广泛的赞誉。尽管如此,面…

STM32的hal库中,后缀带ex和不带的有什么区别

在STM32的HAL(硬件抽象层)库中,后缀带“ex”和不带“ex”的文件及其包含的内容存在显著的区别。这些区别主要体现在功能扩展性、使用场景以及API的层次上。 一、功能扩展性 不带“ex”后缀的文件: 这些文件通常包含标准的、核心…

Java中的访问修饰符详解

目录 1. public 2. protected 3. Default (无修饰符) 4. private 在Java编程语言中,访问修饰符是非常重要的一部分,它决定了类、变量、方法和构造器的访问级别。Java中主要有四种访问修饰符:public、protected、default(没有修…

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

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

WebSocket和HTTP请求的区别

1. 连接方式 HTTP请求:基于“请求-响应”模式。每次通信都要重新建立连接,客户端发送请求后服务器返回响应,连接就断开了。这种模式通常适合不频繁更新的数据,如静态页面的加载。WebSocket:支持长连接,连接…

Python是什么

Python在编程语言中的地位 特点使用看法 特点 优点: 语法语义简单,容易上手功能强大,应用广泛生态丰富,具有海量的成熟第三方库方便调用C/C编写的代码 缺点: 执行效率比较弱对多核并发程序不友好动态类型系统对大型项目不友好 使用 扬长避短 看法 我们要把Python当成一…

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

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

springdata同时集成mongodb和elasticsearch异常

错误 Invalid bean definition with name ‘bookEsRepository’ defined in com.db.repository.BookEsRepository defined in EnableMongoRepositories declared on MongoRepositoriesRegistrar.EnableMongoRepositoriesConfiguration: 产生原因 【spring-boot-starter-data…

【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是…

ubuntu常用文件操作

1. 查看文件和目录 列出目录内容: ls列出当前目录的文件和子目录。常用参数包括: ls -l:显示详细信息(权限、所有者、大小、时间等)。ls -a:显示隐藏文件(以 . 开头的文件)。ls -h&a…

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 查看所有磁盘和分区,找到想要替换用户可使用文件夹内存的磁盘和分区。若没有进行分区,并转为所需要的分区数据类型,先进行分区与格式化,过程自行查阅。 扩充替换过程,例如…

28.3 一致性哈希和推送数据的redirect流程

本节重点介绍 : 开启一致性哈希环变更监听处理 这个服务的节点变更了(节点宕机、扩容)就对哈希环进行重置 开启结果监听和watch服务编写pgw的http接收端 推送数据的redirect流程 一致性哈希和推送数据的redirect流程 开启一致性哈希环变更监听处理 位置 sd/rings.go当这个…

大语言模型数据处理方法(基于llama模型)

文章目录 前言一、基于huggingface的DataCollatorForSeq2Seq方法解读1、DataCollatorForSeq2Seq方法2、batch最长序列填充3、指定长度填充二、构建大语言模型数据加工模块1、数据读取2、数据加工1、数据格式2、预训练(pretrain)数据加工3、微调(sft)数据加工①、sft数据加工…