多元线性回归-岭回归

article/2025/9/13 0:46:09

目录

1.精确相关关系

2.高度相关关系

3.多重共线性与相关性

4.岭回归

5.linear_model.Ridge

5.1.案例1:加利福尼亚房屋价值数据

5.2.案例2:波士顿房价数据集

6.选取最佳正则化参数取值


1.精确相关关系

A=\begin{bmatrix} 1 & 1& 2\\ 5 & 3& 11\\ 2& 2& 4 \end{bmatrix}=\begin{bmatrix} 1 & 1& 2\\ 0 & -2& 1\\ 0& 0& 0 \end{bmatrix}

精确相关关系,即完全相关。如矩阵A并不是满秩矩阵,它有全零行,行列式等于0。A中存在着完全具有线性关系的两行(1,1,2)和(2,2,4),矩阵A中第一行和第三行的关系被称为“精确相关关系”,即完全相关。在这种精确关系下,矩阵A的行列式为0,则矩阵的逆矩阵不存在。在最小二乘法中,如果矩阵X^{T}X存在这种精确相关关系,则逆矩阵不存在,最小二乘法无法使用,线性回归无法求出结果。

X^{T}X=\frac{1}{\left | X^{T}X \right |}X^{T}X^{*}\rightarrow \frac{1}{0}X^{T}X^{*}\

2.高度相关关系

B=\begin{bmatrix} 1 & 1& 2\\ 5& 3& 11\\ 2& 2& 4.002 \end{bmatrix}=\begin{bmatrix} 1 & 1& 2\\ 0& -2& 1\\ 0& 0& 0.002 \end{bmatrix}

矩阵B中第一行和第三行的关系不太一样,他们之间非常接近于“精确相关关系”,但又不是完全相关,一行接近0,另一行接近0,这种关系被称为“高度相关关系”。在这种高度相关关系下,矩阵的行列式不为0,矩阵的逆存在,不过接近无限大。在这种情况下,最小二乘法可以使用,但得到的逆会很大,直接影响对参数w的求解:

X^{T}X=\frac{1}{X^{T}X}X^{T}X^{*}\rightarrow \frac{1}{lim0}X^{T}X^{*}\rightarrow \infty

w=(X^{T}X)^{-1}X^{T}y\rightarrow \infty

这样求解出来的参数向量w会很大,会影响建模的结果,造成模型有偏差或模型不可用。精确相关关系和高度相关关系并称为“多重共线性”。在多重共线性下,模型无法建立或不可用。

3.多重共线性与相关性

多重共线性如果存在,则线性回归就无法使用最小二乘法进行求解,或者求解结果出现偏差。但不能存在多重共线性不代表不能存在相关性——机器学习不要求特征之间必须独立,必须不相关,只要不是高度相关或精确相关就好。

多重共线性Multicollinearity与相关性Correlation


多重共线性是一种统计现象,是指线性模型中的特征(解释变量)之间由于存在精确相关关系或高度相关关系,多重共线性的村子会使模型无法建立,或者估计失真。多重共线性使用指标方差膨胀因子(variance inflation factor,VIF)来进行衡量,通常当我们提到“共线性”,都特指多重共线性。


相关性是衡量两个或多个变量一起波动的程度的指标,它可以是正的,负的或者0,当我们说变量之间具有相关性,通常是指线性相关性,线性相关一般由皮尔逊相关系数进行衡量,非线性相关可以使用斯皮尔曼相关系数或者互信息法进行衡量。

4.岭回归

岭回归,又称为吉洪诺夫正则化(Tikhonov regularization)。岭回归在多元线性回归的损失函数上加上了正则项,表达为系数w的L2范式(即系数w的平方项)乘以正则化系数\alpha。岭回归的损失函数的完整表达式写作:

min\left| | Xw-y |\right |_{2}^{2}+\alpha \left| | w |\right |_{2}^{2}

通过在损失函数上对w求导来求解极值,最终得出:

w=(X^{T}X+\alpha I)^{-1}X^{T}y

如此,正则化系数\alpha就避免了“精确相关关系”带来的影响,至少最小二乘法在\alpha存在的情况下是一定可以使用了。对于存在“高度相关关系”的矩阵,我们也可以通过调大\alpha,来让(X^{T}X+\alpha I)矩阵的行列式变大,从而让逆矩阵变小,以此控制参数向量w的偏移。当\alpha越大,模型越不容易受到共线性的影响。当然,\alpha挤占了w中由原始的特征矩阵贡献的空间,因此如果\alpha太大,也会导致w的估计出现较大的偏移,无法正确拟合数据的真实面貌。因此,我们在使用中,需要找出让模型效果变好的最佳\alpha值。

5.linear_model.Ridge

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

class 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,其他的参数是当我们希望用最小二乘法之外的求解方法求解岭回归的时候才需要,通常情况下是不会去触碰这些参数的。

5.1.案例1:加利福尼亚房屋价值数据

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 plthousevalue=fch()
x=pd.DataFrame(housevalue.data)
y=housevalue.target
x.columns=["住户收入中位数","房屋使用年代中位数","平均房间数目","平均卧室数目","街区人口","平均入住率","街区的纬度","街区的经度"]
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)
# 交叉验证下,与线性回归相比,岭回归的结果如何变化
from sklearn.model_selection import cross_val_score
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(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消除后,模型的效果提升了一点点,但是对于整个模型而言是杯水车薪。在过了控制多重性的点之后,模型的效果飞速下降,显然是正则化的程度太重,挤占了参数w本来的估计空间。从整个结果可以看出,加利福尼亚数据和核心问题不在于多重共线性,岭回归不能够提升模型表现。

另外,在正则化参数不断增大的过程中,观察模型的方差如何变化:

alpharange=np.arange(1,1001,100)
ridge,lr=[],[]
for alpha in alpharange:reg=Ridge(alpha=alpha)linear=LinearRegression()var_regs=cross_val_score(reg,x,y,cv=5,scoring="r2").var()var_linears=cross_val_score(linear,x,y,cv=5,scoring="r2").var()ridge.append(var_regs)lr.append(var_linears)
plt.plot(alpharange,ridge,color="red",label="Ridge")
plt.plot(alpharange,lr,color="orange",label="LR")
plt.title("Variance")
plt.legend()
plt.show()

 

5.2.案例2:波士顿房价数据集

from sklearn.datasets import load_boston
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()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()

 在正则化参数不断增大的过程中,观察模型的方差如何变化:

alpharange=np.arange(1,1001,100)
ridge,lr=[],[]
for alpha in alpharange:reg=Ridge(alpha=alpha)linear=LinearRegression()var_regs=cross_val_score(reg,x,y,cv=5,scoring="r2").var()var_linears=cross_val_score(linear,x,y,cv=5,scoring="r2").var()ridge.append(var_regs)lr.append(var_linears)
plt.plot(alpharange,ridge,color="red",label="Ridge")
plt.plot(alpharange,lr,color="orange",label="LR")
plt.title("Variance")
plt.legend()
plt.show()

 

可以发现,比起加利福尼亚房屋价值数据集,波士顿 房价数据集的方差降低明显,偏差也明显降低,可见使用岭回归还是起到了一定的作用,模型的泛化能力是有可能会上升的。

6.选取最佳正则化参数取值

在sklearn中,使用带交叉验证的岭回归来选择最佳的正则化系数:

class sklearn.linear_model.RidgeCV(alphas=(0.1,1.0,10.0),fit_intercept=True,normalize=False,scoring=None,cv=Nonegcv_mode=None,store_cv_values=False)

可以看出,这个类与普通的岭回归非常相似,不过在输入正则化系数的时候可以传入元组作为正则化系数的备选,非常类似于在化学习曲线前设定的for i in的列表对象。

RidgeCV的重要参数:

重要参数含义
alpha需要测试的正则化参数的取值元组
scoring用来进行交叉验证的模型评估指标,默认是R^{2},可自行调整
store_cv_values是否保存每次交叉验证的结果,默认为False
cv

交叉验证的模式,默认是None,标傲世默认进行留一交叉验证

可以输入Kfold对象和StratifiedKFold对象来进行交叉验证,注意,仅仅当store_cv_values=None时,每次交叉验证的结果才可以被保存下来。当cv有存在值时,store_cv_values无法被设定为True

 RidgeCV的重要属性:

重要属性含义
alpha_查看交叉验证选中的alpha
cv_values_调用所有交叉验证的结果,只有当store_cv_values=True时才能调用,因此返回的结构是(n_samples,n_alphas)

  RidgeCV的重要接口:

重要接口含义
score调用Ridge类不进行交叉验证的情况下返回的R平方
housevalue=fch()
x=pd.DataFrame(housevalue.data)
y=housevalue.target
x.columns=["住户收入中位数","房屋使用年代中位数","平均房间数目","平均卧室数目","街区人口","平均入住率","街区的纬度","街区的经度"]from sklearn.linear_model import RidgeCV
Ridge_=RidgeCV(alphas=np.arange(1,1001,100)
#               ,scoring="neg_mean_squared_error",store_cv_values=True
#               ,cv=5).fit(x,y)
Ridge_.score(x,y)
0.6060251767338444
# 进行平均后可以查看每个正则化系数取值下的交叉验证结果
Ridge_.cv_values_.mean(axis=0)
array([0.52823795, 0.52787439, 0.52807763, 0.52855759, 0.52917958,0.52987689, 0.53061486, 0.53137481, 0.53214638, 0.53292369])
# 查看被选择出来的最佳正则化系数
Ridge_.alpha_
101


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

相关文章

回归——岭回归

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

【机器学习04】岭回归

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

机器学习——岭回归

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

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

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

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

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

岭回归与lasso回归算法

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

岭回归-回归实操

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

线性回归与岭回归

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

什么是岭回归?

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

岭回归总结

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

岭回归(ridge regression)

岭回归(ridge regression) 在处理回归问题时,常遇到的问题 在处理复杂的数据的回归问题时,普通的线性回归会遇到一些问题,主要表现在:   预测精度:这里要处理好这样一对为题,即样…

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

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

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

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

岭回归(Ridge Regression)和Lasso回归

1、岭回归(Ridge Regression) 标准线性回归(简单线性回归)中: 如果想用这个式子得到回归系数,就要保证(X^TX)是一个可逆矩阵。 下面的情景:如果特征的数据比样本点还要多,数据特征…

岭回归详解 从零开始 从理论到实践

岭回归详解 从零开始 从理论到实践 一、岭回归的理解1.1、LinearRegression的回顾1.2、岭回归 - Ridge Regression 二、sklearn的使用2.1、方法、参数与属性2.1.1、特征标准化 - StandardScaler2.1.2、岭回归 - Ridge2.1.3、内置交叉验证岭回归 - RidgeCV 2.2、实例应用2.2、简…

分布式之Quorum NWR算法

写在前面 假设现在我们实现了AP 系统,但是公司突然要对某些业务进行实时的数据计算,并且要求按照强一致性的方式来读取数据,此时作为系统设计这的我们该怎么办呢?单独为这部分业务实时抽出最新数据?还是修改原有系统&…

glusterfs:Server-quorum和Client Quorum

overview 这两个参数在容错场景中发挥着巨大的作用。用户借助这两个参数 既可以手动控制存在多少个活着的节点表示集群健康,也可以把这个控制权交给集群。 Server-quorum 由两个参数组成 cluster.server-quorum-type: none | server 如果设置为server表示启动了s…

Quorum机制

/******************************************************** 原文链接:http://www.cnblogs.com/jzhlin/archive/2012/07/23/2605077.html ********************************************************/ 分布式系统的设计中会涉及到许多的协议、机制用来解决可靠性问…

Elasticsearch:理解 Master,Elections,Quorum 及 脑裂

集群中的每个节点都可以分配多个角色:master、data、ingest、ml(机器学习)等。 我们在当前讨论中感兴趣的角色之一是 master 角色。 在 Elasticsearch 的配置中,我们可以配置一个节点为 master 节点。master 角色的分配表明该节点…

Quorum简介部署

文章目录 简介账户/密钥管理隐私私有交易管理器 (Private transaction Manager)enclave公有/私有状态 状态验证交易和合约隐私 (Transaction and Contract Privacy)参考 简介 GoQuorum基于geth,在其基础上增加了一些联盟链需要的组件,主要包括以下几点&…