Python机器学习教程—岭回归的原理和实现

article/2025/9/13 0:37:03

在某些场景下,线性回归无法给出一个效果好的预测模型,那么就需要使用线性回归的升级版,去面对更复杂的应用场景,本文所记录的岭回归便是线性回归的一个升级版。

目录

强势样本对模型的影响

实例

岭回归定义

岭回归的实现

岭回归代码实例

调整岭回归的参数 


强势样本对模型的影响

如下图的例子,每个样本点是员工的工作年限对应的一个薪资水平,通过线性回归拟合了一条直线,可以看到有6个点是正常的样本,但最上面有一个强势样本。

在实际看来这并非是不合理的情况,但在线性回归中,这个强势样本对模型的影响很大。如果我们只拟合前6个样本,会得到如图下面那条直线。因此可见强势样本产生的影响造成了这个模型发生了改变,那么很有可能在之后对大部分正常数据样本预测时,就会变得不准确。

因此,这种情况下,不如抛弃强势样本,防止其对整个模型的预测效果产生较大的影响。

实例

仍以员工工作年限和对应薪资水平的数据集进行举例,但是前30个都是正常的样本数据,因此在最后32-34行,添加了3个强势样本,很明显与之前的数据有差别。

在python中对上述数据进行线性回归的模型拟合

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import sklearn.linear_model as lm # 加载数据集
data=pd.read_csv("Salary_Data2.csv")
x,y=data['YearsExperience'],data['Salary']
plt.grid(linestyle=':')
plt.scatter(x,y,s=60,color='dodgerblue',label='Samples')train_x,train_y=pd.DataFrame(x),y
# 基于sklearn提供ApI,训练线性回归模型
model=lm.LinearRegression()
model.fit(train_x,train_y)# 进行预测
pred_train_y=model.predict(train_x)#可视化
plt.grid(linestyle=':')
plt.scatter(x,y,s=60,color='dodgerblue',label='Samples')
plt.plot(x,pred_train_y,color='orangered',label='Regression Line')
plt.legend()

可以看到图中训练的数据中3个强势样本,对比不带有强势样本的回归模型,其提高了模型的斜率,也因为受强势样本影响,导致模型对其他正常数据的拟合效果不是很好。

带有强势样本的回归模型
不带强势样本的回归模型

那么如何解决这个问题?就需要使用岭回归。

岭回归定义

普通线性回归模型使用基于梯度下降的最小二乘法,在最小化损失函数的前提下,寻找最优模型参数,于此过程中,包括少数异常样本在内的全部训练数据都会对最终模型参数造成程度相等的影响,异常值对模型所带来影响无法在训练过程中被识别出来。为此,岭回归在模型迭代过程所依据的损失函数中增加了正则项,以限制模型参数对异常样本的匹配程度,进而提高模型面对多数正常样本的拟合精度。

也就是说,有着强势样本的情况下,如果模型对样本数据拟合的太精确,那么反而会受到强势样本很大的影响,因此我们考虑稍微欠拟合一点,反而会使得强势样本的影响变小。那么岭回归的损失函数定义式为:

loss=\frac{1}{2}\sum_{i=1}^{n}(\widehat{y_{i}}-y_{i})^{2}+\lambda \sum \omega _{i}^{2}

公式前半部分同原本的线性回归模型一样是样本误差,后半部分\lambda \sum \omega _{i}^{2}就是正则项,除了系数λ,后面是模型参数的平方再求和,参数λ是对后面的参数平方和进行一个范围的限制或规约,使用其控制这个数值是小还是大。整个损失函数就由原本的损失函数+这个正则项,如果正则项为0,那与原本的线性回归没区别。

所以loss函数要取最小值,还要与这个正则项有关,如果λ值调大一些,那么正则项对loss函数的影响就大一些,同理,λ值如果调小,那么正则项对总的loss函数影响就减小。并且正则项求导也是非常好求的。因此loss会考虑正则项,那么自然对模型的拟合度就会降低。

当参数λ=0时

上图λ=0,相当于普通的线性回归模型,而下图将λ调整为0.5,所以模型loss就要考虑正则项,可以看到总样本误差为90.691,而其中原本的loss值为22.582,对比上图15.249确实有升高,也说明了对模型的拟合程度降低了。

当参数λ=0.5时

虽然加上正则项,模型的总样本误差loss值增加了,但很明显从图中可以看到,对除了强势样本之外的普通样本的值反而拟合效果更好了。

那么如何选择合适的参数λ?自然还是要利用到上文中所学的模型的评估指标R^{^{2}},那个参数对应的得分高就用哪个参数。

岭回归的实现

岭回归同样可以用python的sklearn库,下面展示相关的API调用。要说明的是lm.Ridge()中的参数:第一个是可以调整正则强度; 第二个fit_intercept默认情况下为true,因为如果不训练截距只训练斜率肯定会导致模型的拟合都不够; 第三个max_iter默认为-1,意思是迭代到不能再迭代为止。当然也可以选择1000,意为迭代1000次。

import sklearn.linear_model as lm# 创建模型
model=lm.Ridge(正则强度,fit_intercept=是否训练截距,max_iter=最大迭代次数)# 训练模型
# 输入为一个二维数组表示的样本矩阵
# 输出为每个样本最终的结果
model.fit(输入,输出)#预测输出
#输入array是一个二维数组,每一行是一个样本,每一列是一个特征。
result=model.predict(array)

岭回归代码实例

以上面提到的薪资预测的例子来进行岭回归的一个示例,首先看一下如果正则项设为0,这其实就是普通的线性回归模型了

# 训练一个岭回归模型
model=lm.Ridge(0)
model.fit(train_x,train_y)# 进行预测
pred_train_y=model.predict(train_x)#可视化
plt.grid(linestyle=':')
plt.scatter(x,y,s=60,color='dodgerblue',label='Samples')
plt.plot(x,pred_train_y,color='orangered',label='Regression Line')
plt.legend()

 如果调整正则系数为100,可以看到模型的变化,对正常数据拟合效果变得好了。

model=lm.Ridge(100)

那么到底参数设置为多少比较好?

便需要利用上节课讲的,利用未被训练过的测试样本,能使得模型的一系列指标比如R^{^{2}}得到最高的分值的参数便是最好的。

 https://blog.csdn.net/danielxinhj/article/details/127632062

调整岭回归的参数 

可以写一个for循环,比如下面代码中从60-300,每隔5个选择1个作为超参数,并利用超参数训练岭回归模型,最后输出其R^{^{2}}得分

# 调整岭回归的参数
import sklearn.metrics as sm 
params=np.arange(60,300,5)
for param in params:# 训练一个岭回归模型model=lm.Ridge(param)model.fit(train_x,train_y)# 找到一组测试样本数据,输出评估指标结果# 取测试集样本,从头至尾每4个切出1个数据test_x,test_y=train_x.iloc[:30:4],train_y.iloc[:30:4] # 进行预测pred_test_y=model.predict(test_x)# 评估误差print(param,'->',sm.r2_score(test_y,pred_test_y))

输出结果为不同超参数对应的 R^{^{2}}得分,很明显发现当λ=100时,模型的性能是最好的。所以最终我们要选择的正则项参数λ=100。


http://chatgpt.dhexx.cn/article/jod5LITx.shtml

相关文章

岭回归和Lasso回归

偏差和方差 机器学习算法针对特定数据所训练出来的模型并非是十全十美的,再加上数据本身的复杂性,误差不可避免。说到误差,就必须考虑其来源:模型误差 偏差(Bias) 方差(Variance) …

基于Python的岭回归模型

本文是使用Python进行岭回归模型分析,消除多重共线性 一、岭回归原理 自变量之间存在多重共线性,当时,加上一个正的常数矩阵(K>0),岭回归估计定义公式: (k为岭参数) 的奇异程度比奇异程度小&…

用SPSS进行岭回归分析

打开SPSS将数据输入到SPSS中。 点击左上角文件->新建->语法 输入 * Encoding: UTF-8. INCLUDE D:\Program Files\IBM\SPSS\Statistics\27\Samples\Simplified Chinese\Ridge regression.sps. ridgereg enter x1 x2 x3 x4 x5 x6 x7 x8 x9 x10/depy.include内容需要自己寻找…

R语言与岭回归

岭参数的一般选择原则 选择k(或lambda)值,使得:各回归系数的岭估计基本稳定用最小二乘估计时符号不合理的回归系数,其岭回归的符号变得合理回归系数没有不合乎实际意义的绝对值残差平方和增大的不多 用R语言进行岭回归…

岭回归(Ridge Regression)及实现

岭回归(Ridge Regression)及实现 https://blog.csdn.net/google19890102/article/details/27228279 一、一般线性回归遇到的问题 在处理复杂的数据的回归问题时,普通的线性回归会遇到一些问题,主要表现在: 在处理复杂的数据的回归问题时&…

岭回归(R语言)

代码实现如下&#xff1a; data3.3<-read.csv("C:/Users/Administrator/Desktop/data3.3.csv",headTRUE) datas<-data.frame(scale(data3.3[,1:6])) # 对样本数据进行标准化处理并转换为数据框的存储格式 library(MASS) ridge3.3<-lm.ridge(y~.-1,datas,l…

多元线性回归-岭回归

目录 1.精确相关关系 2.高度相关关系 3.多重共线性与相关性 4.岭回归 5.linear_model.Ridge 5.1.案例1&#xff1a;加利福尼亚房屋价值数据 5.2.案例2:波士顿房价数据集 6.选取最佳正则化参数取值 1.精确相关关系 精确相关关系&#xff0c;即完全相关。如矩阵A并不是满…

回归——岭回归

1、作用 岭回归是一种专用于共线性数据分析的有偏估计回归方法&#xff0c;实质上是一种改良的最小二乘估计法&#xff0c;通过放弃最小二乘法的无偏性&#xff0c;以损失部分信息、降低精度为代价获得回归系数更为符合实际、更可靠的回归方法&#xff0c;对病态数据的拟合要强…

【机器学习04】岭回归

4 岭回归 4.1 简介 普通线性回归模型使用基于梯度下降的最小二乘法&#xff0c;在最小化损失函数的前提下&#xff0c;寻找最优模型参数&#xff0c;在此过程中&#xff0c;包括少数异常样本在内的全部训练数据都会对最终模型参数造成程度相等的影响&#xff0c;异常值对模型…

机器学习——岭回归

岭回归的简单介绍 什么是岭回归&#xff1f;什么时候要用到岭回归&#xff1f;岭回归是一种解决标准方程法不能求逆矩阵时的办法。我们都知道&#xff0c;用标准方程法最大的一个缺点就是当数据的特征多于数据的样本时&#xff0c;标准方程法是不能使用的&#xff0c;因为不能…

数学建模学习:岭回归和lasso回归

线性回归 在多元线性回归模型中&#xff0c;估计回归系数使用的是OLS&#xff0c;并在最后讨论异方差和多重共线性对模型的影响。事实上&#xff0c;回归中自变量的选择大有门道&#xff0c;变量过多可能会导致多重共线性问题导致回归系数不显著&#xff0c;甚至造成OLS估计失…

python机器学习| 岭回归介绍及实现

岭回归介绍及实现 1 岭回归的引入2 岭回归的原理2.1 原理介绍2.2 原理代码实现 3 API 实现 1 岭回归的引入 在线性回归-正规方程和梯度下降中&#xff0c;我们介绍了基于正规方程或者梯度下降的优化算法&#xff0c;来寻找最优解。 在正规方程解中&#xff0c;它是基于直接求导…

岭回归与lasso回归算法

模型压缩与正则化主要包含岭回归&#xff08;Ridge regression&#xff09;和Lasso两种方法&#xff0c;二者的主要原理是将系数往等于0的方向压缩。 岭回归 lasso 全称&#xff1a;Least absolute shrinkage and selection operator最小绝对缩减和选择算子 一、岭回归示…

岭回归-回归实操

python 岭回归算法之回归实操 基本概念 正则化 正则化是指对模型做显式约束&#xff0c;以避免过拟合。本文用到的岭回归就是L2正则化。&#xff08;从数学的观点来看&#xff0c;岭回归惩罚了系数的L2范数或w的欧式长度&#xff09; 正则化的具体原理就不在这里多叙述了&a…

线性回归与岭回归

目录 一、什么是线性回归 1.线性回归简述 2.数组和矩阵 3.线性回归的算法 二、权重的求解 1.正规方程 2.梯度下降 三、线性回归案例 1.案例概述 2.数据获取 3.数据分割 4.数据标准化 5.模型训练 6.回归性能评估 7.梯度下降与正规方程区别 四、岭回归Ridge 1.过拟…

什么是岭回归?

问题引出&#xff1a; 当使用最小二乘法解决一下线性回归&#xff1a; 假设:已知x1,x2与y的关系服从线性回归模型&#xff1a; y102x13x2c 当x1和x2存在线性相关性时&#xff0c;使用最小二乘法来预测回归模型&#xff0c;就变得困难起来&#xff0c;因此物品们必须使用逐步回…

岭回归总结

岭回归存在的目的&#xff1a; 解决多重共线性下&#xff0c;最小二乘估计失效的问题 岭回归的作用&#xff1a;(在引入变量太多&#xff0c;又存在多重共线性&#xff0c;难以抉择去留哪个变量时可以通过该方法筛选变量) 1.找出多重共线性的变量&#xff0c;并提剔除部分 2…

岭回归(ridge regression)

岭回归&#xff08;ridge regression&#xff09; 在处理回归问题时&#xff0c;常遇到的问题 在处理复杂的数据的回归问题时&#xff0c;普通的线性回归会遇到一些问题&#xff0c;主要表现在&#xff1a;   预测精度&#xff1a;这里要处理好这样一对为题&#xff0c;即样…

【回归分析】一文读懂岭回归,附案例教学

1、作用 岭回归是一种专用于共线性数据分析的有偏估计回归方法&#xff0c;实质上是一种改良的最小二乘估计法&#xff0c;通过放弃最小二乘法的无偏性&#xff0c;以损失部分信息、降低精度为代价获得回归系数更为符合实际、更可靠的回归方法&#xff0c;对病态数据的拟合要强…

人工智能——岭回归(Python)

目录 1 概述 1.1 线性回归 1.2 岭回归 1.3 过拟合 2 sklearn中的岭回归 3 案例 3.1 数据介绍&#xff1a; 3.2 实验目的&#xff1a; 3.3 数据特征如下&#xff1a; 4 Python实现 4.1 代码 4.2 结果 5 正则化 1 概述 1.1 线性回归 对于一般地线性回归问题&am…