sklearn机器学习:岭回归Ridge

article/2025/9/16 21:27:06

在sklearn中,岭回归由线性模型库中的Ridge类来调用:

Ridge类的格式

sklearn.linear_model.Ridge (alpha=1.0, fit_intercept=True, normalize=False, copy_X=True, max_iter=None, tol=0.001, solver=’auto’, random_state=None)
和线性回归相比,岭回归的参数稍微多了那么一点,但是真正核心的参数就是正则项系数 α \alpha α,其他参数是希望使用最小二乘法之外的求解方法求解岭回归的时候才需要的,通常完全不会去用这些参数。所以,只需了解 α \alpha α的用法即可。
之前的博文《sklearn机器学习:线性回归LinearRegression》中,在加利佛尼亚房屋价值数据集上使用线性回归,得出的结果大概是训练集上的拟合程度是60%,测试集上的拟合程度也是60%左右,这个很低的拟合程度是不是由多重共线性造成的呢?统计学会通过VIF(方差膨胀因子)或者各种检验来判断数据是否存在共线性,而在机器器学习中,可以使用模型来判断——如果一个数据集在岭回归中使用各种正则化参数取值下,模型表现没有明显上升(比如出现持平或者下降),则说明数据没有多重共线性,顶多是特征之间有一些相关性。反之,如果一个数据集在岭回归的各种正则化参数取值下,表现出明显的上升趋势,则说明数据存在多重共线性。
接下来,用加利佛尼亚房屋价值数据集验证一下:

#岭回归验证
import numpy as np
import pandas as pd
from sklearn.linear_model import Ridge, LinearRegression, Lasso
from sklearn.model_selection import train_test_split as TTS
from sklearn.datasets import fetch_california_housing as fch
import matplotlib.pyplot as plt
housevalue = fch()
X = pd.DataFrame(housevalue.data)
y = housevalue.target
X.columns = ["住户收⼊入中位数","房屋使⽤用年年代中位数","平均房间数⽬目"
,"平均卧室数⽬目","街区⼈人⼝口","平均⼊入住率","街区的纬度","街区的经度"]
X.head(3)

在这里插入图片描述

#划分数据集
Xtrain,Xtest,Ytrain,Ytest = TTS(X,y,test_size=0.3,random_state=420)
#数据集索引恢复
for i in [Xtrain,Xtest]:i.index = range(i.shape[0])
#使用岭回归建模
reg = Ridge(alpha=1).fit(Xtrain,Ytrain)
reg.score(Xtest,Ytest)
0.6043610352312276
#交叉验证下,与线性回归相比,岭回归的结果如何变化?
alpharange = np.arange(1,1001,100)
ridge, lr = [], []
for alpha in alpharange:reg = Ridge(alpha=alpha)linear = LinearRegression()regs = cross_val_score(reg,X,y,cv=5,scoring = "r2").mean()linears = cross_val_score(linear,X,y,cv=5,scoring = "r2").mean()ridge.append(regs)lr.append(linears)
plt.plot(alpharange,ridge,color="red",label="Ridge")
plt.plot(alpharange,lr,color="orange",label="LR")
plt.title("Mean")
plt.legend()

在这里插入图片描述

#细化一下学习曲线
alpharange = np.arange(1,201,10)
ridge, lr = [], []
for alpha in alpharange:reg = Ridge(alpha=alpha)linear = LinearRegression()regs = cross_val_score(reg,X,y,cv=5,scoring = "r2").mean()linears = cross_val_score(linear,X,y,cv=5,scoring = "r2").mean()ridge.append(regs)lr.append(linears)
plt.plot(alpharange,ridge,color="red",label="Ridge")
plt.plot(alpharange,lr,color="orange",label="LR")
plt.title("Mean")
plt.legend()
plt.show()

在这里插入图片描述
可见,加利佛尼亚数据集上,岭回归的结果轻微上升,随后骤降。可以说,加利利尼亚房屋价值数据集带有很轻微的一部分共线性,这种共线性被正则化参数 α \alpha α消除后,模型的效果提升了一点点,但是对于整个模型而言是杯水⻋车薪。在过了控制多重共线性的点后,模型的效果飞速下降,显然是正则化的程度太重,挤占了参数 ω \omega ω本来的估计空间。从这个结果可以看出,加利佛尼亚数据集的核心问题不在于多重共线性,岭回归不能够提升模型表现。
另外,在正则化参数逐渐增大的过程中,可以观察一下模型的方差如何变化:

#模型方差如何变化?
alpharange = np.arange(1,1001,100)
ridge, lr = [], []
for alpha in alpharange:reg = Ridge(alpha=alpha)linear = LinearRegression()varR = cross_val_score(reg,X,y,cv=5,scoring="r2").var()varLR = cross_val_score(linear,X,y,cv=5,scoring="r2").var()ridge.append(varR)lr.append(varLR)
plt.plot(alpharange,ridge,color="red",label="Ridge")
plt.plot(alpharange,lr,color="orange",label="LR")
plt.title("Variance")
plt.legend()
plt.show()

在这里插入图片描述
可以发现,模型的方差上升快速,不过方差的值本身很小,其变化不超过R2上升部分的1/3,因此只要噪声的状况维持恒定,模型的泛化误差可能还是一定程度上降低了的。虽然岭回归和Lasso不是设计来提升模型表现,而是专注于解决多重共线性问题的,但当 α \alpha α在一定范围内变动的时候,消除多重共线性也许能够一定程度上提高模型的泛化能力。
但是泛化能力毕竟没有直接衡量的指标,因此往往只能通过观察模型的准确性指标和方差来大致评判模型的泛化能力是否提高。来看看多重共线性更为明显一些的情况:

from sklearn.datasets import load_boston
from sklearn.model_selection import cross_val_score
X = load_boston().data
y = load_boston().target
Xtrain,Xtest,Ytrain,Ytest = TTS(X,y,test_size=0.3,random_state=420)
#先查看⽅方差的变化
alpharange = np.arange(1,1001,100)
ridge, lr = [], []
for alpha in alpharange:reg = Ridge(alpha=alpha)linear = LinearRegression()varR = cross_val_score(reg,X,y,cv=5,scoring="r2").var()varLR = cross_val_score(linear,X,y,cv=5,scoring="r2").var()ridge.append(varR)lr.append(varLR)
plt.plot(alpharange,ridge,color="red",label="Ridge")
plt.plot(alpharange,lr,color="orange",label="LR")
plt.title("Variance")
plt.legend()
plt.show()

在这里插入图片描述

#查看R2的变化
alpharange = np.arange(1,1001,100)
ridge, lr = [], []
for alpha in alpharange:reg = Ridge(alpha=alpha)linear = LinearRegression()regs = cross_val_score(reg,X,y,cv=5,scoring = "r2").mean()linears = cross_val_score(linear,X,y,cv=5,scoring = "r2").mean()ridge.append(regs)lr.append(linears)
plt.plot(alpharange,ridge,color="red",label="Ridge")
plt.plot(alpharange,lr,color="orange",label="LR")
plt.title("Mean")
plt.legend()
plt.show()

在这里插入图片描述

#细化学习曲线
alpharange = np.arange(100,300,10)
ridge, lr = [], []
for alpha in alpharange:reg = Ridge(alpha=alpha)#linear = LinearRegression()regs = cross_val_score(reg,X,y,cv=5,scoring = "r2").mean()#linears = cross_val_score(linear,X,y,cv=5,scoring = "r2").mean()ridge.append(regs)lr.append(linears)
plt.plot(alpharange,ridge,color="red",label="Ridge")
#plt.plot(alpharange,lr,color="orange",label="LR")
plt.title("Mean")
plt.legend()
plt.show()

在这里插入图片描述
可以发现,比起加利佛尼亚房屋价值数据集,波士顿房价数据集的方差降低明显,偏差也降低明显,可见使用岭回归还是起到了一定的作用,模型的泛化能力是有可能会上升的。
遗憾的是,没有人会希望自己获取的数据中存在多重共线性,因此发布到scikit-learn或者kaggle上的数据基本都经过一定的多重共线性的处理,要找出绝对具有多重共线性的数据非常困难,也就无法给大家展示岭回归在实际数据中大显身手的模样。也许可以找出具有一些相关性的数据,但是如果
去尝试就会发现,基本上如果使用岭回归或者Lasso,模型的效果都是会降低,很难升高,这恐怕也是岭回归和Lasso一定程度上被机器器学习领域冷遇的原因。


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

相关文章

Python 中 Ridge 和 Lasso 回归的教程

作者:chen_h 微信号 & QQ:862251340 微信公众号:coderpai 线性回归和逻辑回归是回归技术中最受欢迎的技术,但是他们一般很难处理大规模数据问题,很难处理过拟合问题。所以,我们一般都会加上一些正则化技…

多元线性回归改进RidgeLasso

多元线性回归改进 – 潘登同学的Machine Learning笔记 文章目录 多元线性回归改进 -- 潘登同学的Machine Learning笔记(简单回顾)多元线性回归模型归一化normalization归一化的方法来个小例子试一试? 正则化regularization正则项 Lasso回归 和 Ridge岭回归L1稀疏L2平…

岭回归(Ridge)不同alpha值对归回结果的影响

对于有些矩阵,矩阵中某个元素的一个很小的变动,会引起最后计算结果误差很大,这种矩阵称为“病态矩阵”。有些时候不正确的计算方法也会使一个正常的矩阵在运算中表现出病态。对于高斯消去法来说,如果主元(即对角线上的…

r ridge回归_手把手带你画高大上的lasso回归模型图

各位芝士好友,今天我们来聊一聊lasso回归算法。与预后有关的文章,传统的做法一般会选择多变量cox回归,高级做法自然就是我们今天的lasso分析。 首先我们先来几篇文献,看一下lasso最近发的两篇文章,如下: 这…

机器学习算法系列(四)- 岭回归算法(Ridge Regression Algorithm)

阅读本文需要的背景知识点:标准线性回归算法、一丢丢编程知识 一、引言 前面一节我们学习了机器学习算法系列(三)- 标准线性回归算法(Standard Linear Regression Algorithm),最后求得标准线性回归的代价函…

手写算法-python代码实现Ridge(L2正则项)回归

手写算法-python代码实现Ridge回归 Ridge简介Ridge回归分析与python代码实现方法一:梯度下降法求解Ridge回归参数方法二:标准方程法实现Ridge回归调用sklearn对比 Ridge简介 前面2篇文章,我们介绍了过拟合与正则化,比较全面的讲了…

线性模型-Ridge-Lasso-回归

目录 1 基本库导入2 线性回归2.1 线性模型性能2.2 使用更高维的数据集 3 岭回归-Ridge3.1 Ridge原理及应用3.2 Ridge调参3.3 为什么要用Ridge 4 Lasso4.1 基本原理及应用4.2 Lasso调参4.3 为什么要用Lasso4.4 Lasso和Ridge的区别(L1,L2区别) …

利用python实现Ridge岭回归和Lasso回归

正则化 regularization 在介绍Ridge和Lasso回归之前,我们先了解一下正则化 过拟合和欠拟合 (1) under fit:还没有拟合到位,训练集和测试集的准确率都还没有到达最高。学的还不 到位。 (2) over fit:拟合过度,训练…

数学推导+纯Python实现机器学习算法14:Ridge岭回归

点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达 上一节我们讲到预防过拟合方法的Lasso回归模型,也就是基于L1正则化的线性回归。本讲我们继续来看基于L2正则化的线性回归模型。 L2正则化 相较于L0和L1&…

【机器学习】多项式回归案例五:正则惩罚解决过拟合(Ridge回归和Lasso回归)

正则惩罚解决过拟合(Ridge回归和Lasso回归) 案例五: 正则惩罚解决过拟合(Ridge回归和Lasso回归)3.2.1 模块加载与数据读入3.2.2 特征工程3.2.3 模型搭建与应用 手动反爬虫,禁止转载: 原博地址 …

07- 梯度下降优化(Lasso/Ridge/ElasticNet) (数据处理+算法)

归一化: 减少数据不同数量级对预测的影响, 主要是将数据不同属性的数据都降到一个数量级。 最大值最小值归一化:优点是可以把所有数值归一到 0~1 之间,缺点受离群值影响较大。0-均值标准化: 经过处理的数据符合标准正态分布,即均值为0,标准差…

Linear Regression:Ridge regression

Ridge regression:岭回归 与least-squares method (最小二乘法)相似,只是加了一个对输入数据权重的惩罚值, 这个惩罚参数称为regularization (正则化)。正则化降低模型的复杂度,防止模型的过度拟合。 Ridge regression 利用L2 regularizatio…

对Lasso可以做特征选择,而Ridge却不行的详细解释

为了限制模型参数的数值大小,就在模型原来的目标函数上加上一个惩罚项,这个过程叫做正则化(Regularization)。 如果惩罚项是参数的 l 2 l_2 l2​范数,就是岭回归(Ridge Regression)如果惩罚项是参数的 l 1 l_1 l1​范…

Kernel Ridge Regression 详解过程

Kernel Ridge Regression(KRR,核脊回归) 是Ridge Regression(RR,脊回归)的kernel版本,与Support Vector Regression(SVR,支持向量回归)类似。所以,在这里,我们先大致了解RR的来源,由此引入KRR&a…

sklearn-1.1.2.Ridge Regression

1.1.2 Ridge Regression Ridge回归通过对系数的惩罚值来解决最小二乘法的系数问题。岭系数的最小化惩罚残差平方和的公式: 这里,是用来控制收缩量的复杂参数:参数值越大,收缩量也越大,因此系数对共线性变得更加稳健。 …

Ridge回归

岭回归(英文名:ridge regression, Tikhonov regularization)是一种专用于共线性数据分析的有偏估计回归方法,自变量之间线性相关-correlation很高,实质上是一种改良的最小二乘估计法,通过放弃最小二乘法的无偏性,以损失…

Lasso 和 Ridge回归中的超参数调整技巧

在这篇文章中,我们将首先看看Lasso和Ridge回归中一些常见的错误,然后我将描述我通常采取的步骤来优化超参数。代码是用Python编写的,我们主要依赖scikit-learn。本文章主要关注Lasso的例子,但其基本理论与Ridge非常相似。 起初&a…

Ridge和Lasso回归

上周看了看回归方面的知识,顺便复(xue)习一下Ridge(岭回归)和Lasso回归(套索回归)。瞅到了一篇英文博客讲得不错,翻译一下 本文翻译自 Ridge and Lasso Regression 本文是一篇Josh …

Ridge回归*

线性回归稍微总结一下: 常见有普通线性回归(没有正则项,目标是最小化均方误差)、LASSO(均方误差项l-1正则项)、Ridge回归(均方误差l-2正则项) 加上正则项可以降低过拟合风险。 Ridge…

【机器学习原理实战01】Ridge回归模型

Ridge回归模型 最近做项目用到岭回归模型,特地来记录一下整个岭回归模型的原理和代码。 以后会将用到的机器学习模型算法都记录下来。1、Ridge 回归原理 多元线性回归计算回归系数的时候回归系数的计算如下: 学过线性代数的都知道,以上式子…