解决多元线性回归的多重共线性问题

article/2025/9/19 23:56:39

        在上一章我们提到多重共线性的影响以及产生的原因,因为在解释变量存在多重共线性的情况下,使用普通最小二乘法估计参数会导致参数估计方差太大,使普通最小二乘法的效果很不理想。在这篇文章中我们将讨论如何解决多元线性回归中的多重共线性问题。

一、岭回归(Ridge Regression)

        岭回归是一种专门用于共线性数据分析的有偏估计回归方法,是一种改良的最小二乘法。通过放弃最小二乘的无偏性,以损失部分信息、降低精度为代价获得回归系数更为符合实际的回归方法。它可以缓解多重共线问题,以及过拟合问题。

        当解释变量x_1,x_2,\cdots,x_n之间存在多重共线性时,矩阵X^TX是一个非满秩矩阵,也即矩阵\left | X^TX \right |\approx 0(为什么非满秩方阵的行列式等于 0 呢?)。而由公式{\hat\beta}=(X^TX)^{-1}X^Ty可知,参数{\hat\beta}_i无意义。为了解决这个问题,我们很自然地想到给矩阵X^TX加上一个正数矩阵kI,(k>0),我们一般称该正数矩阵为扰动项。那么(X^TX+kI)接近奇异解的可能性较以前要小得多,于是参数{\hat\beta}_i可以用{\hat\beta}(k)=(X^TX+kI)^{-1}X^TY来进行估计。

        在线性回归中,我们选用\mathop{argmin}\limits_{\beta}SSR=\sum_{i=1}^{n}(y_i-{\hat y_i})^2=\sum_{i=1}^{n}(y_i-\beta_0-\beta_1x_1-\cdots-\beta_nx_n)^2来选择训练模型。对于岭回归而言,我们采用在SSR的基础上加上对系数的惩罚,即

 

1.1 岭回归的定义

        设0\leqslant k < + \infty,满足式子{\hat\beta}(k)=(X^TX+kI)^{-1}X^TY{\hat\beta}(k)称为\beta的岭估计。由\beta的岭估计建立的回归方程称为岭回归方程。其中k称为岭参数。对于回归系数{\hat\beta}(k)=[b_0(k),b_1(k),\cdots,b_m(k)]^T的分量b_j(k)(j\geqslant1)来说,在直角坐标系(k,b_j(k))的图像是m条曲线,称为岭迹。当k=0时,{\hat\beta}(0)即为原来的最小二乘估计。

1.2 岭估计的一些性质

  • 岭估计不再是无偏估计,即E({\hat\beta}(k))\neq\beta
  • 岭估计是压缩估计,即\left \| {\hat\beta}(k) \right \|{\leqslant} \left \| {\hat\beta} \right \|,即有偏估计回归系数向量长度<无偏估计回归系数向量长度

1.3 岭参数k的选择 

  • 岭迹法:观察岭迹曲线,原则上取使得{\hat\beta}(k)稳定的最小的k值,同时残差平方和也比增加太多。
  • 均方误差法:岭估计的均方误差mse({\hat\beta}(k))=E\left\|{\hat\beta}(k)-\beta\right\|^2k的函数,可以证明它能在某处取得最小值。计算观察mse({\hat\beta}(k)),开始它下降,达到最小值后它开始上升,取它最小处的k作为岭参数。

1.4 岭迹图

         岭迹图的横轴是岭参数\lambda,纵坐标是岭估计\beta(\lambda)。在\lambda很小时,通常各\beta系数取值较大;而如果\lambda=0,则跟普通意义的多元线性回归的最小二乘解完全一样;当\lambda略有增大,则各\beta系数取值迅速减小,即从不稳定趋于稳定。 上图类似喇叭形状的岭迹图,一般都存在多重共线性。

        根据岭迹图选择岭参数\beta选取喇叭口附近的值,此时各\beta值已趋于稳定,但总的SSR又不是很大。

 

        根据岭迹图选择变量,删除那些β取值一直趋于0的变量。

但是根据岭迹图筛选变量不是十分靠谱。

二、岭回归的代码实现(Python)

咱们依旧以上篇学生计量经济学成绩分析的例子。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression as LM
import statsmodels.api as sm
from sklearn.linear_model import Ridge,RidgeCV
from scipy.stats import zscore
import sklearn.preprocessing as pp
data=pd.read_csv("eg2.1.csv")
data.head()
data=pp.scale(data) #对数据进行0-1标准化
data
X=data[:,1:]
Y=data[:,0]
K=np.arange(2,50) #设置岭参数
coefs=[]
for k in K:ridge = Ridge(alpha=k, fit_intercept=False)ridge.fit(X, Y)coefs.append(ridge.coef_)
fig,axes=plt.subplots(figsize=(12,5))
axes.grid(True,linestyle='-.')
axes.plot(K,coefs)
plt.savefig("RidgeRegression.jpg")
plt.show()
mdcv=RidgeCV(alphas=np.logspace(-4,0,100)).fit(X,Y)
print("最优的alpha:\n",mdcv.alpha_)
md0=Ridge(mdcv.alpha_).fit(X,Y)
md0=Ridge(20).fit(X,Y)
cs0=md0.coef_
print("标准化数据的所有回归系数为:",cs0)
print("拟合优度:\n",md0.score(X,Y))


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

相关文章

如何消除多重共线性

介绍 机器学习是一种解决不能明确编码的问题的方法&#xff0c;例如&#xff0c;分类问题。机器学习模型将从数据中学习一种模式&#xff0c;因此我们可以使用它来确定数据属于哪个类。 但有个问题。这个模型是如何工作的?一些人不能接受一个性能良好的模型&#xff0c;因为…

去除多重共线性的5种方法,你学废了嘛?

什么是多重共线性呢? 就是回归模型多个特征之间具有很强的相关性。 多重共线性&#xff0c;听起来很就很严重&#xff0c;其实没有很大的危害&#xff0c;只是容易过拟合&#xff0c;或者导致模型无法解释。尤其是在实际项目中&#xff0c;我们需要解释模型的特征对目标变量…

特征共线性问题

多重共线性是使用线性回归算法时经常要面对的一个问题。在其他算法中&#xff0c;例如决策树或者朴素贝叶斯&#xff0c;前者的建模过程时逐渐递进&#xff0c;每次都只有一个变量参与&#xff0c;这种机制含有抗多重共线性干扰的功能&#xff1b;后者假设变量之间是相互独立的…

多重共线性问题的几种解决方法

在多元线性回归模型经典假设中&#xff0c;其重要假定之一是回归模型的解释变量之间不存在线性关系&#xff0c;也就是说&#xff0c;解释变量X1&#xff0c;X2&#xff0c;……&#xff0c;Xk中的任何一个都不能是其他解释变量的线性组合。如果违背这一假定&#xff0c;即线性…

多重共线性问题如何解决?

​ 一、多重共线性说明 多重共线性一般是指&#xff1a;如果有两个或者多个自变量高度相关&#xff08;相关系数大于0.8&#xff09;&#xff0c;难以区分一个自变量对因变量的影响和作用&#xff0c;将自变量相关性产生的后果定义为多重共线性&#xff0c;一般提出多重共线性…

多重共线性如何分析?

判断标准 常见的直观判断方法共有四个&#xff0c;如下&#xff1a; &#xff08;1&#xff09;某些自变量的相关系数值较大&#xff08;比如大于0.8&#xff09;等&#xff0c;可以利用pearson相关系数检验法一般是利用解释变量之间的线性相关程度判断&#xff0c;一般标准是…

多元回归自变量存在共线性

多重线性回归要求各个自变量之间相互独立&#xff0c;不存在多重共线性。所谓多重共线性&#xff0c;是指自变量之间存在某种相关或者高度相关的关系&#xff0c;其中某个自变量可以被其他自变量组成的线性组合来解释。 医学研究中常见的生理资料&#xff0c;如收缩压和舒张压…

多重共线性

1.回归模型自变量彼此相关称为多重共线性&#xff0c;它给模型提供重复信息 2.多重共线性会造成模型不稳定&#xff0c;可能会得到无法解释的现象 3.检测共线性的方法通常有相关性分析&#xff0c;显著性检验和方差膨胀因子分析 4.处理共线性的方法通常有提前筛选变量&#xff…

多重共线性的影响、判定及消除的方法

目录 1 什么是多重共线性&#xff1f; 2 多重共线性的影响 3 共线性的判别指标&#xff08;方差膨胀因子&#xff09; 3.1 拟合优度 3.2 方差膨胀因子VIF 4 多重共线性处理方法 4.1 手动移除出共线性的变量 4.2 逐步回归法 4.2.1 向前法 4.2.2 后退法 4.2.3 逐步选…

如何处理多重共线性问题

一、说明 当回归模型中两个或者两个以上的自变量高度相关&#xff08;比如相关系数大于0.7&#xff09;时&#xff0c;则称为多重共线性。虽然在实际分析中&#xff0c;自变量高度相关是很常见的&#xff0c;但是在回归分析中存在多重共线性可能会导致一些问题&#xff0c;比如…

谈多重共线性

谈多重共线性 本文主要讨论古典假定中无多重共线性被违反的情况&#xff0c;主要情况包括多重共线性的实质和产生的原因、后果、检验方法及无多重共线性假定违反后的处置方法。 第一节 什么是多重共线性 一、多重共线性的含义 讨论多元线性回归模型的估计时&#xff0c;强调…

多重共线性详解

目录 解释变量与自变量&#xff0c;被解释变量与因变量 1、多重共线性的现象 2、出现的原因 3、判别标准 4、检验方法 5、多重共线性有什么影响 6、多重共线性处理方法 7、其他说明 8、多重共线性识别-python代码8.1、vif检验8.2 相关系数8.3 聚类 9、宏观把握共线性问题9.1、共…

浅谈共线性的产生以及解决方法(中篇——今生)

浅谈共线性的产生以及解决方法(中篇——今生) 上篇我们讲到共线性概念以及共线性问题存在时对模型的影响。那么如何对样本数据中存在的共线性问题进行诊断呢&#xff1f; 3 多重共线性的诊断方法 3.1 相关系数法 对于一个样本数据集&#xff0c;我们要了解解释变量&#xf…

共线性那些事儿

我们经常听说&#xff0c;建模时应当尽量避免共线性&#xff08;collinearity&#xff09;&#xff0c;共线性会导致参数估计不稳定、模型不可靠等等。那么共线性究竟有多可怕&#xff1f;共线性具体会带来什么问题&#xff1f;共线性得到的模型是否真的不行&#xff1f;笔者通…

多元线性模型中共线性产生的原因解析

在很多书籍中谈到了共线性问题&#xff0c;作为多元统计中基本假设之一&#xff0c;却经常被违背&#xff0c;影响模型稳定性和统计power。在不少的论文中谈到了&#xff0c;国内的很多书籍往往一笔带过。因为&#xff0c;属于统计计算领域内容&#xff0c;非专业人士&#xff…

好好谈谈共线性问题

好好谈谈共线性问题 马东什么 算法工程师 8 人 赞同了该文章 共线性&#xff0c;即 同线性或同线型。统计学中&#xff0c;共线性即 多重共线性。 多重共线性&#xff08;Multicollinearity&#xff09;是指线性回归模型中的解释变量之间由于存在精确 相关关系或高度相关关系而…

树莓派中SIM7600G-H 4G DONGLE模块使用记录(一)PPP拨号上网/4G上网

项目场景&#xff1a; 如何使用SIM7600系列的4G通信模块进行PPP网上拨号以实现4G通信&#xff0c;在讲解前&#xff0c;未搭建好树莓派远程连接桌面的读者可以先转向树莓派4B环境搭建电脑远程连接打开文件管理闪退(上)。 模块简介&#xff1a; SIM7600X 4G DONGLE是一款工业级…

Linux系统下使用4G模块EC20实现拨号上网

驱动的实现过程 实现4G功能分为两步,第一步内核能成功识别出该设备,第二步实现拨号上网.最后提一下自带的定位功能 一.添加内核USB驱动 这里直接使用内核已经存在的USB驱动,只需要让内核能识别出该USB设备,并自动加载驱动生成对应的/devUSB*设备节点 获取EC20的PID和VID 把模块…

4G模块适配与调试

笔记目录 RK平台4G模块适配1、识别VID、PID2、添加VID\PID到android的option驱动中3、插上sim卡&#xff0c;4G模块一定要接上天线4、根据安卓系统和安卓版本发给模块厂要求其提供ril库5、预置ril库6、在framework中添加根据pid和vid关联ril库的代码7、可以通过一下命令查看ril…

Linux 4G模块pppd拨号上网脚本解析

在编写脚本之前&#xff0c;要先安装好ppp相关驱动&#xff0c;pppd 已知pppd位于 /usr/sbin , chat 位于 /usr/sbin , options 位于 /etc/ppp 。 要编写脚本&#xff0c;就要切换目录到 /etc/ppp/peers&#xff0c;若没有peers目录则自行创建。因为是在/etc目录之下&#xf…