精华内容
下载资源
问答
  • 第十二讲 多重共线性案例分析 多重共线性的侦查与处理 o研究美国每人的子鸡消费量 Y=每人的子鸡消费量,磅 X,=每人实际可支配收入,美元 ,=每磅子鸡实际零售价格,美元 3=每磅猪肉实际零售价格,美元 ,=每磅牛肉实际零售...
  • 多重共线性一般是在(1)时间序列数据和(2)横截面数据中会发生。 产生的影响 (1)OLS得到的回归参数估计值很不稳定 (2)回归系数的方差随共线性强度增加而增长 (3)系数的正负号得不到合理的解释 多重共线性的...

    1、多重共线性

    多重共线性一般是在(1)时间序列数据和(2)横截面数据中会发生。

    产生的影响

    (1)OLS得到的回归参数估计值很不稳定
    (2)回归系数的方差随共线性强度增加而增长
    (3)系数的正负号得不到合理的解释

    多重共线性的判定方法

    1、方差膨胀因子vif
    2、特征根判定法

    3、直观判定法:更加直观
    1.当增加或剔除一个自变量,或者改变一个观测值时,回归系数的估计值发生较大变化。
    2.从定性分析认为,一些重要的自变量在回归方程中没有通过显著性检验。
    3.有些自变量的回归系数所带正负号与定性分析结果违背。
    4.自变量的相关矩阵中,自变量间的相关系数较大。
    5.一些重要的自变量的回归系数的标准误差较大。

    消除多重共线性

    1、剔除一些不重要的解释变量
    2、增大样本容量
    3、回归系数的有偏估计
    统计学家还致力于改进古典的最小二乘法,提出以采用有偏估计为代价来提高估计量稳定性的方法,如:
    逐步回归
    岭回归法
    主成分回归法
    偏最小二乘法
    lasso回归
    适应性lasso回归

    2、糖尿病数据+逐步回归法

    先看一下数据:
    在这里插入图片描述
    原模型的方差膨胀因子:几乎都非常大
    在这里插入图片描述
    这是逐步回归法的:
    在这里插入图片描述
    去除了大部分变量,保留了部分变量,方差膨胀因子相对小很多。
    这是逐步回归法的残差与y的散点图:
    在这里插入图片描述
    以及模型:
    在这里插入图片描述
    大部分自变量通过了检验。
    代码:
    数据需要可以评论~

    library("lars")
    library("car")
    #file.choose()
    da<-read.csv("F:\\learning_kecheng\\huigui\\67章—多重共线性和lasso\\diabetes.csv")[,11:75]
    head(da)
    
    lm1<-lm(y~.,data = da)
    lm_step = step(lm1,trace = F)
    vif(lm1)
    vif = vif(lm_step)
    sort(vif(lm1),de=T)[1:5]
    sort(vif)
    summary(lm_step)
    
    xx = cor(da[,-1])
    kappa(xx,exact = TRUE)
    kappa(da[,-1],exact = TRUE)
    
    shapiro.test(lm_step$res)
    Anova(lm_step,type="III")	
    plot(da$y,lm_step$res)
    abline(h=0,lty=2)
    
    展开全文
  • 多重共线性问题的几种解决方法在多元线性回归模型经典假设中,其重要假定之一是回归模型的解释变量之间不存在线性关系,也就是说,解释变量X1,X2,……,Xk中的任何一个都不能是其他解释变量的线性组合。...

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

    在多元线性回归模型经典假设中,其重要假定之一是回归模型的解释变量之间不存在线性关系,也就是说,解释变量X1,X2,……,Xk中的任何一个都不能是其他解释变量的线性组合。如果违背这一假定,即线性回归模型中某一个解释变量与其他解释变量间存在线性关系,就称线性回归模型中存在多重共线性。多重共线性违背了解释变量间不相关的古典假设,将给普通最小二乘法带来严重后果。

    所谓多重共线性是指线性回归模型的解释变量之间由于存在精确相关关系或者高度相关关系而使模型评估失真或者不准确。这里,我们总结了8个处理多重共线性问题的可用方法,大家在遇到多重共线性问题时可作参考:

    1、保留重要解释变量,去掉次要或可替代解释变量

    自变量之间存在共线性,说明自变量所提供的信息是重叠的,可以删除不重要的自变量减少重复信息。但从模型中删去自变量时应该注意:从实际经济分析确定为相对不重要并从偏相关系数检验证实为共线性原因的那些变量中删除。如果删除不当,会产生模型设定误差,造成参数估计严重有偏的后果。

    2、改变解释变量的形式

    改变解释变量的形式是解决多重共线性的一种简易方法,例如对于横截面数据采用相对数变量,对于时间序列数据采用增量型变量。

    3、差分法

    4、逐步回归分析

    逐步回归(Stepwise Regression)是一种常用的消除多重共线性、选取“最优”回归方程的方法。其做法是将逐个引入自变量,引入的条件是该自变量经F检验是显著的,每引入一个自变量后,对已选入的变量进行逐个检验,如果原来引入的变量由于后面变量的引入而变得不再显著,那么就将其剔除。引入一个变量或从回归方程中剔除一个变量,为逐步回归的一步,每一步都要进行F 检验,以确保每次引入新变量之前回归方程中只包含显著的变量。这个过程反复进行,直到既没有不显著的自变量选入回归方程,也没有显著自变量从回归方程中剔除为止。

    5、主成份分析

    主成分分析作为多元统计分析的一种常用方法在处理多变量问题时具有其一定的优越性,其降维的优势是明显的,主成分回归方法对于一般的多重共线性问题还是适用的,尤其是对共线性较强的变量之间。

    6、偏最小二乘回归

    7、岭回归

    岭回归估计是通过最小二乘法的改进允许回归系数的有偏估计量存在而补救多重共线性的方法,采用它可以通过允许小的误差而换取高于无偏估计量的精度, 因此它接近真实值的可能性较大。灵活运用岭回归法, 可以对分析各变量之间的作用和关系带来独特而有效的帮助。

    8、增加样本容量

    多重共线性问题的实质是样本信息的不充分而导致模型参数的不能精确估计,因此追加样本信息是解决该问题的一条有效途径。但是,由于资料收集及调查的困难,要追加样本信息在实践中有时并不容易。

    这次我们主要研究逐步回归分析方法是如何处理多重共线性问题的。

    逐步回归分析方法的基本思想是通过相关系数r、拟合优度R2和标准误差三个方面综合判断一系列回归方程的优劣,从而得到最优回归方程。具体方法分为两步:

    第一步,先将被解释变量y对每个解释变量作简单回归:

    对每一个回归方程进行统计检验分析(相关系数r、拟合优度R2和标准误差),并结合经济理论分析选出最优回归方程,也称为基本回归方程。

    第二步,将其他解释变量逐一引入到基本回归方程中,建立一系列回归方程,根据每个新加的解释变量的标准差和复相关系数来考察其对每个回归系数的影响,一般根据如下标准进行分类判别:

    1.如果新引进的解释变量使R2得到提高,而其他参数回归系数在统计上和经济理论上仍然合理,则认为这个新引入的变量对回归模型是有利的,可以作为解释变量予以保留。

    2.如果新引进的解释变量对R2改进不明显,对其他回归系数也没有多大影响,则不必保留在回归模型中。

    3.如果新引进的解释变量不仅改变了R2,而且对其他回归系数的数值或符号具有明显影响,则认为该解释变量为不利变量,引进后会使回归模型出现多重共线性问题。不利变量未必是多余的,如果它可能对被解释变量是不可缺少的,则不能简单舍弃,而是应研究改善模型的形式,寻找更符合实际的模型,重新进行估计。如果通过检验证明回归模型存在明显线性相关的两个解释变量中的其中一个可以被另一个很好地解释,则可略去其中对被解释变量影响较小的那个变量,模型中保留影响较大的那个变量。

    下边我们通过实例来说明逐步回归分析方法在解决多重共线性问题上的具体应用过程。

    具体实例

    例1设某地10年间有关服装消费、可支配收入、流动资产、服装类物价指数、总物价指数的调查数据如表1,请建立需求函数模型。

    表1  服装消费及相关变量调查数据

    e22d8bfdde543d867f66a2609b481071.png

    (1)设对服装的需求函数为

    用最小二乘法估计得估计模型:

    模型的检验量得分,R2=0.998,D·W=3.383,F=626.4634

    R2接近1,说明该回归模型与原始数据拟合得很好。由得出拒绝零假设,认为服装支出与解释变量间存在显著关系。

    (2)求各解释变量的基本相关系数

    上述基本相关系数表明解释变量间高度相关,也就是存在较严重的多重共线性。

    (3)为检验多重共线性的影响,作如下简单回归:

    各方程下边括号内的数字分别表示的是对应解释变量系数的t检验值。

    观察以上四个方程,根据经济理论和统计检验(t检验值=41.937最大,拟合优度也最高),收入Y是最重要的解释变量,从而得出最优简单回归方程。

    (4)将其余变量逐个引入,计算结果如下表2:

    表2 服装消费模型的估计

    3eae77f5df4ea0f16c8fc4761c57f79b.png

    结果分析:

    ①在最优简单回归方程中引入变量Pc,使R2由0.9955提高到0.9957;根据经济理论分析,正号,负号是合理的。然而t检验不显著(),而从经济理论分析,Pc应该是重要因素。虽然Y与Pc高度相关,但并不影响收入Y回归系数的显著性和稳定性。依照第1条判别标准,Pc可能是“有利变量”,暂时给予保留。

    ②模型中引入变量L,R2由0.9957提高到0.9959,值略有提高。一方面,虽然Y与L,Pc与L均高度相关,但是L的引入对回归系数、的影响不大(其中的值由0.1257变为0.1387,值由-0.0361变为-0.0345,变化很小);另一方面,根据经济理论的分析,L与服装支出C之间应该是正相关关系,即的符号应该为正号而非负号,依照第2条判别标准,解释变量L不必保留在模型中。

    ③舍去变量L,加入变量P0,使R2由0.9957提高到0.9980,R2值改进较大。、、均显著(这三个回归系数的t检验值绝对值均大于),从经济意义上看也是合理的(服装支出C与Y,P0之间呈正相关,而与服装价格Pc之间呈负相关关系)。根据判别标准第1条,可以认为Pc、P0皆为“有利变量”,给予保留。

    ④最后再引入变量L,此时R2=0.9980没有增加(或几乎没有增加),新引入变量对其他三个解释变量的参数系数也没有产生多大影响,可以确定L是多余变量,根据判别标准第2条,解释变量L不必保留在模型中。

    因此我们得到如下结论:回归模型为最优模型。

    通过以上案例的分析,我们从理论和实际问题两方面具体了解了逐步回归分析是如何对多重共线性问题进行处理的。事实上,一般统计软件如SPSS,在回归模型的窗口中都会提供变量逐步进入的选项,勾选后实际上就是选择了运用逐步回归的思想来构建回归模型。运用SPSS软件不需要我们懂得其背后的运行规律,然而作为分析师,了解并理解模型背后的理论知识,将更有助于我们理解模型、解释结论背后的内在含义,从而达到更好地分析问题的目的。

    喜欢 (2)or分享 (0)

    展开全文
  • 如果违背这一假定,即线性回归模型中某一个解释变量与其他解释变量间存在线性关系,就称线性回归模型中存在多重共线性多重共线性违背了解释变量间不相关的古典假设,将给普通最小二乘法带来严重后果。这里,我们...

    在多元线性回归模型经典假设中,其重要假定之一是回归模型的解释变量之间不存在线性关系,也就是说,解释变量X1,X2,……,Xk中的任何一个都不能是其他解释变量的线性组合。如果违背这一假定,即线性回归模型中某一个解释变量与其他解释变量间存在线性关系,就称线性回归模型中存在多重共线性。多重共线性违背了解释变量间不相关的古典假设,将给普通最小二乘法带来严重后果。

    这里,我们总结了8个处理多重共线性问题的可用方法,大家在遇到多重共线性问题时可作参考:

    1、保留重要解释变量,去掉次要或可替代解释变量

    2、用相对数变量替代绝对数变量

    3、差分法

    4、逐步回归分析

    5、主成份分析

    6、偏最小二乘回归

    7、岭回归

    8、增加样本容量

    这次我们主要研究逐步回归分析方法是如何处理多重共线性问题的。

    逐步回归分析方法的基本思想是通过相关系数r 、拟合优度R2 和标准误差三个方面综合判断一系列回归方程的优劣,从而得到最优回归方程。具体方法分为两步:

    第一步,先将被解释变量y对每个解释变量多重共线性问题的几种解决方法作简单回归:

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

    对每一个回归方程进行统计检验分析(相关系数r 、拟合优度R2 和标准误差),并结合经济理论分析选出最优回归方程,也称为基本回归方程。

    第二步,将其他解释变量逐一引入到基本回归方程中,建立一系列回归方程,根据每个新加的解释变量的标准差和复相关系数来考察其对每个回归系数的影响,一般根据如下标准进行分类判别:

    1.如果新引进的解释变量使R2 得到提高,而其他参数回归系数在统计上和经济理论上仍然合理,则认为这个新引入的变量对回归模型是有利的,可以作为解释变量予以保留。

    2.如果新引进的解释变量对R2 改进不明显,对其他回归系数也没有多大影响,则不必保留在回归模型中。

    3.如果新引进的解释变量不仅改变了R2 ,而且对其他回归系数的数值或符号具有明显影响,则认为该解释变量为不利变量,引进后会使回归模型出现多重共线性问题。不利变量未必是多余的,如果它可能对被解释变量是不可缺少的,则不能简单舍弃,而是应研究改善模型的形式,寻找更符合实际的模型,重新进行估计。如果通过检验证明回归模型存在明显线性相关的两个解释变量中的其中一个可以被另一个很好地解释,则可略去其中对被解释变量影响较小的那个变量,模型中保留影响较大的那个变量。

    下边我们通过实例来说明逐步回归分析方法在解决多重共线性问题上的具体应用过程。

    具体实例

    例1 设某地10年间有关服装消费、可支配收入、流动资产、服装类物价指数、总物价指数的调查数据如表1,请建立需求函数模型。

    表1  服装消费及相关变量调查数据

    年份

    服装开支

    (百万元)

    可支配收入

    Y

    (百万元)

    流动资产

    (百万元)

    服装类物价指数Pc

    1992年=100

    总物价指数

    P0

    1992年=100

    1988

    8.4

    82.9

    17.1

    92

    94

    1989

    9.6

    88.0

    21.3

    93

    96

    1990

    10.4

    99.9

    25.1

    96

    97

    1991

    11.4

    105.3

    29.0

    94

    97

    1992

    12.2

    117.7

    34.0

    100

    100

    1993

    14.2

    131.0

    40.0

    101

    101

    1994

    15.8

    148.2

    44.0

    105

    104

    1995

    17.9

    161.8

    49.0

    112

    109

    1996

    19.3

    174.2

    51.0

    112

    111

    1997

    20.8

    184.7

    53.0

    112

    111

    (1)设对服装的需求函数为

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

    用最小二乘法估计得估计模型:

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

    模型的检验量得分,R2=0.998,D·W=3.383,F=626.4634

    R2接近1,说明该回归模型与原始数据拟合得很好。由多重共线性问题的几种解决方法得出拒绝零假设,认为服装支出与解释变量间存在显著关系。

    (2)求各解释变量的基本相关系数

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

    上述基本相关系数表明解释变量间高度相关,也就是存在较严重的多重共线性。

    (3)为检验多重共线性的影响,作如下简单回归:

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

    各方程下边括号内的数字分别表示的是对应解释变量系数的t检验值。

    观察以上四个方程,根据经济理论和统计检验(t检验值=41.937最大,拟合优度也最高),收入Y是最重要的解释变量,从而得出最优简单回归方程多重共线性问题的几种解决方法。

    (4)将其余变量逐个引入多重共线性问题的几种解决方法,计算结果如下表2:

    表2 服装消费模型的估计

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

    结果分析:

    ①在最优简单回归方程多重共线性问题的几种解决方法中引入变量Pc,使R2由0.9955提高到0.9957;根据经济理论分析,多重共线性问题的几种解决方法正号,多重共线性问题的几种解决方法负号是合理的。然而t检验多重共线性问题的几种解决方法不显著(多重共线性问题的几种解决方法),而从经济理论分析,Pc应该是重要因素。虽然Y与Pc高度相关,但并不影响收入Y回归系数多重共线性问题的几种解决方法的显著性和稳定性。依照第1条判别标准,Pc可能是“有利变量”,暂时给予保留。

    ②模型中引入变量L ,R2 由0.9957提高到0.9959, 值略有提高。一方面,虽然Y 与L ,Pc与L 均高度相关,但是L 的引入对回归系数多重共线性问题的几种解决方法、多重共线性问题的几种解决方法的影响不大(其中多重共线性问题的几种解决方法的值由0.1257变为0.1387,多重共线性问题的几种解决方法值由-0.0361变为-0.0345,变化很小);另一方面,根据经济理论的分析,L与服装支出C之间应该是正相关关系,即多重共线性问题的几种解决方法的符号应该为正号而非负号,依照第2条判别标准,解释变量L不必保留在模型中。

    ③舍去变量L ,加入变量P0 ,使R2 由0.9957提高到0.9980,R2 值改进较大。多重共线性问题的几种解决方法、多重共线性问题的几种解决方法、多重共线性问题的几种解决方法均显著(这三个回归系数的t检验值绝对值均大于多重共线性问题的几种解决方法),从经济意义上看也是合理的(服装支出C与Y,P0之间呈正相关,而与服装价格Pc之间呈负相关关系)。根据判别标准第1条,可以认为Pc、P0皆为“有利变量”,给予保留。

    ④最后再引入变量L ,此时R2 =0.9980没有增加(或几乎没有增加),新引入变量对其他三个解释变量的参数系数也没有产生多大影响,可以确定L 是多余变量,根据判别标准第2条,解释变量L 不必保留在模型中。

    因此我们得到如下结论:多重共线性问题的几种解决方法回归模型为最优模型。

    通过以上案例的分析,我们从理论和实际问题两方面具体了解了逐步回归分析是如何对多重共线性问题进行处理的。事实上,一般统计软件如SPSS,在回归模型的窗口中都会提供变量逐步进入的选项,勾选后实际上就是选择了运用逐步回归的思想来构建回归模型。运用SPSS软件不需要我们懂得其背后的运行规律,然而作为分析师,了解并理解模型背后的理论知识,将更有助于我们理解模型、解释结论背后的内在含义,从而达到更好地分析问题的目的。

    展开全文
  • 前言:本文主要介绍多重共线性、岭回归和Lasso的概念、公式推导及sklearn应用,使用的数据集为波士顿房价数据集、加利福尼亚房价数据集。 目录 如何从行列式理解多重共线性? 如何理解使用岭回归解决多重共线性...

    前言:本文主要介绍多重共线性、岭回归和Lasso的概念、公式推导及sklearn应用,使用的数据集为波士顿房价数据集、加利福尼亚房价数据集。

    目录

    如何从行列式理解多重共线性?

    如何理解使用岭回归解决多重共线性?

    如何在sklearn中使用linear_model.Ridge岭回归?(案例:波士顿房价数据集)

    如何使用岭迹图选择最佳正则化参数?(案例:希尔伯特矩阵)

    如何在sklearn中使用linear_model.RidgeCV,带交叉验证的岭回归?(案例:波士顿房价数据集)

    如何理解Lasso,以及用Lasso进行特征选择?(案例:加利福尼亚房价数据集)

    如何在sklearn中使用linear_model.LassoCV,带交叉验证的Lasso?(案例:加利福尼亚房价数据集)


    如何从行列式理解多重共线性?

    之前提及使用最小二乘法求解多元线性回归的损失函数,公式推导中需要左乘(X^TX)^{-1},但是没有讨论(X^TX)^{-1}是否存在。

    (X^TX)^{-1}=\frac{1}{|X^TX|}X^TX^*|X^TX|为行列式,作为分母,那么等式成立的条件自然是|X^TX|不能等于0。

    如何计算矩阵的行列式?

    3条↘对角线元素相乘,然后相加,依次减去3条↙对角线元素相乘。

    任何矩阵都有行列式,行列式通过初等行/列变换后大小不变,所以可以将行列式转换成梯形行列式,从而直接计算对角线元素之积即可求得行列式。


    行列式不为0的条件为:当行列式通过变幻,变为对角矩阵时,对角线上的元素不为0。这种满足行列式变换后对角线元素不为0的矩阵,称为“满秩矩阵”。

    可以通过numpy计算矩阵是否满秩

    np.trace(array) # 计算矩阵对角线元素之和
    np.linalg.det(array) # 计算矩阵的行列式,为0说明不满秩

    如果|X^TX|=0,分母出现“除0错误”,称为特征存在精确相关关系;如果|X^TX|趋近于0,\frac{1}{|X^TX|}趋近于+\infty,称为特征存在高度相关关系。以上两种情况下,w都无法计算得出结果,统称为存在多重共线性。 

    多重共线性属于相关性的一种,当特征存在高度相关、精确相关时,则称特征存在多重共线性。


    多重共线性的解决方案有如下思路:

    1. 使用统计学的先验思路,对特征进行相关性检验或降维;计算量增加;
    2. 使用前向逐步回归法,筛选对模型高度相关的特征;计算量增大;
    3. 对线性回归进行改进,使用岭回归、Lasso、弹性网等方式改进。

    如何理解使用岭回归解决多重共线性?

    岭回归解决多重共线性的办法为:在多元线性回归的损失函数上加上正则项:w的L2范式乘以正则化系数α,公式为:

    \min_w||\boldsymbol{Xw}-\boldsymbol{y}||_2^2+\alpha||\boldsymbol{w}||_2^2

    岭回归解决多重共线性的原理:通过对|X^TX|对角线加上一个α,使|X^TX|变成满秩矩阵,从而消除多重共线性。其公式推导情况如下:

    ?没懂的地方:为什么上面是Xw-y,下面是y-Xw?

    \begin{aligned} \frac{\partial(||\boldsymbol{y}-\boldsymbol{Xw}||_2^2+\alpha||\boldsymbol{w}||_2^2)}{\partial\boldsymbol{w}}&=\frac{\partial(\boldsymbol{y}-\boldsymbol{Xw})^T(\boldsymbol{y}-\boldsymbol{Xw})}{\partial\boldsymbol{w}}+\frac{\partial\alpha||\boldsymbol{w}||_2^2}{\partial\boldsymbol{w}}\\ &=0-2\boldsymbol{X^Ty}+2\boldsymbol{X^TXw}+2\alpha \boldsymbol{w}\\ &=(\boldsymbol{X^TX}+\alpha \boldsymbol{I})\boldsymbol{w}-\boldsymbol{X^Ty}\\ (\boldsymbol{X^TX}+\alpha \boldsymbol{I})\boldsymbol{w}&=\boldsymbol{X^Ty}\\ \boldsymbol{w}&=(\boldsymbol{X^TX}+\alpha \boldsymbol{I})^{-1}\boldsymbol{X^Ty} \end{aligned}

    (中间左边变换,是因为令求导为0)


    因为α可以人为设置,所以(\boldsymbol{X^TX}+\alpha \boldsymbol{I})永远满秩,则不为0,所以(\boldsymbol{X^TX}+\alpha \boldsymbol{I})^{-1}存在,可以同时左乘(\boldsymbol{X^TX}+\alpha \boldsymbol{I})^{-1},从而求解w。 


    既然α可以人为设置,那么应该如何设置才能取得比较好的结果呢?首先,不能为0,否则(\boldsymbol{X^TX}+\alpha \boldsymbol{I})永无效;其次不能太小,否则(\boldsymbol{X^TX}+\alpha \boldsymbol{I})趋近于0,会产生高度精确相关,同样无法有效求解;并且也不能将α设置得太大,超过特征对模型的影响。


    如何在sklearn中使用linear_model.Ridge岭回归?(案例:波士顿房价数据集)

    为了选择合适的α,可以使用绘制学习曲线的方式,得出不同α对模型的影响。以下案例通过选取不同的正则化系数α,观察模型R^2和MSE下不同的线性回归模型结果,数据集为波士顿房价数据集。


    # 系数说明
    Ridge(alpha=1.0 # 设定正则化系数
          , fit_intercept=True # 是否有截距项
          , normalize=False # 是否归一化
          , copy_X=True # 是否copyX
          , max_iter=None # 最大迭代次数
          ,tol=0.001 # 结果的精度
          , solver='auto' # 计算方式
          , random_state=None # 设定随机模式
         )
    # 案例:线性回归模型_波士顿房价数据集
    from sklearn.datasets import load_boston
    from sklearn.model_selection import cross_val_score
    from sklearn.linear_model import LinearRegression
    X,y=load_boston(return_X_y=True)
    
    from sklearn.model_selection import train_test_split
    X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=9)
    
    from sklearn.linear_model import Ridge
    model_log=LinearRegression().fit(X_train,y_train)
    print(model_log.score(X_train,y_train))
    
    model_ridge=Ridge().fit(X_train,y_train)
    print(model_ridge.score(X_train,y_train))
    
    # 0.7176202687340321
    # 0.7154454888738826
    
    # 正则化系数选择的学习曲线_R2
    alpha_range=np.linspace(1,500,50)
    score_linear=[]
    score_ridge=[]
    for i in alpha_range:
        model_log=LinearRegression().fit(X_train,y_train)
        score_linear.append(model_log.score(X_test,y_test))
        model_ridge=Ridge(alpha=i).fit(X_train,y_train)
        score_ridge.append(model_ridge.score(X_test,y_test))
    
    plt.plot(range(50),score_linear,label='score_linear')
    plt.plot(range(50),score_ridge,label='score_ridge')
    plt.legend()
    plt.show()

    # 正则化系数选择的学习曲线_MSE
    alpha_range=np.linspace(1,100,100)
    score_linear=[]
    score_ridge=[]
    for i in alpha_range:
        model_log=LinearRegression().fit(X_train,y_train)
        score_linear.append(cross_val_score(model_log,X_test,y_test,cv=5,scoring='neg_mean_squared_error').mean()*-1)
        model_ridge=Ridge(alpha=i).fit(X_train,y_train)
        score_ridge.append(cross_val_score(model_ridge,X_test,y_test,cv=5,scoring='neg_mean_squared_error').mean()*-1)
    
    plt.plot(alpha_range,score_linear,label='score_linear')
    plt.plot(alpha_range,score_ridge,label='score_ridge')
    plt.legend()
    plt.show()

    结论:岭回归正则化下,正则化系数越大,MSE越大,R^2越低,模型表现越差,说明模型几乎不存在多重共线性。

    sklearn中自带的数据集基本不存在多重共线性。且通常情况下我们获取的数据集都不会有太大的多重共线性,所以岭回归实际的使用场景有限,且因为岭回归会进行特征过滤,模型也可能会因此效果变差。


    如何使用岭迹图选择最佳正则化参数?(案例:希尔伯特矩阵)

    什么是岭迹图:通过绘制不同的正则化系数α下,w的表现。选择较平稳的“喇叭口”时对应的正则化系数α,为最佳正则化系数。

    但是岭迹图并没有对“平稳”定义,判断标准模糊,并不属于最佳正则化系数选择方案,所以了解即可。


    代码案例:

    from sklearn.linear_model import Ridge
    X=1./(np.arange(1,11)+np.arange(0,10)[:,np.newaxis]) # 希尔伯特矩阵,如下图
    # [:,np.newaxis]将一维数组变成n行1列的二维数组
    y=np.ones(10)
    
    n_alphas=200
    alphas=np.logspace(-10,-2,n_alphas)
    coefs=[]
    for a in alphas:
        ridge=Ridge(alpha=a,fit_intercept=False).fit(X,y)
        coefs.append(ridge.coef_)
    
    ax=plt.gca() # 没办法使用plt.figure()
    ax.plot(alphas,coefs)
    ax.set_xscale('log') # 横坐标显示为log
    ax.set_xlim(ax.get_xlim()[::-1]) # 左右反转横坐标
    # ax.axis('tight') #好像没有区别
    plt.show()


    如何在sklearn中使用linear_model.RidgeCV,带交叉验证的岭回归?(案例:波士顿房价数据集)

    岭回归下,选择正则化系数最好的方式为交叉验证,所以sklearn提供了带交叉验证的岭回归RidgeCV,下面对RidgeCV的参数和使用方式进行案例演示,使用的数据集为波士顿房价数据集。

    # 系数说明
    RidgeCV (alphas=(0.1, 1.0, 10.0) # 正则化系数的取值
             , fit_intercept=True # 是否有截距项
             , normalize=False # 是否归一化
             , scoring=None # 评分方式,默认留一验证时使用R^2,否则返回均方误差(不论填什么都返回均方误差)
             , cv=None # 交叉验证次数,默认进行留一交叉验证
             , gcv_mode='auto' # 进行留一验证时,使用什么计算方法
             , store_cv_values=False # 是否保留交叉验证结果,cv=None时才保留
            )
    
    # 属性
    model.score(X,y) # 返回无交叉验证后的结果
    model.cv_values_ # 返回所有交叉验证的结果,r^2或者MSE
    model.alpha_ # 返回交叉验证结果最好时的alpha值

    留一交叉验证是什么?

    在交叉验证时,只留1条数据作为测试集,所以每条数据都会作为测试集。
    留一交叉验证是岭回归交叉验证时最好的交叉验证方式。

    ?没懂的地方:scoring=None # 评分方式,默认留一验证时使用R^2,否则返回均方误差

    但是在操作过程中好像不论填什么都返回均方误差? 为什么会这样,这个指标到底怎么用? 

    # 案例:带交叉验证的岭回归模型_波士顿房价数据集
    from sklearn.linear_model import RidgeCV
    from sklearn.datasets import fetch_california_housing as fch
    
    X,y=fch(return_X_y=True)
    ridge_cv=RidgeCV(alphas=np.linspace(1,1001,10)
    #                  ,cv=5 # 如果不注这一行,则需要注掉store_cv_values
                     ,store_cv_values=True
                     ,scoring=None
                    ).fit(X,y)
    
    ridge_cv.score(X,y) # 返回无交叉验证后的结果
    
    ridge_cv.cv_values_.mean(axis=0) # 返回所有交叉验证的结果
    
    ridge_cv.alpha_ # 返回交叉验证结果最好的alpha值

    如何理解Lasso,以及用Lasso进行特征选择?(案例:加利福尼亚房价数据集)

    Lasso解决多重共线性的方法:通过在损失函数上添加w的1-范数乘以正则化系数α,其表达式为:

    \min_w||\boldsymbol{Xw-y}||_2^2+\alpha||\boldsymbol{w}||_1

    和岭回归一样,经过变化可得:

    \boldsymbol{X^TXw}=\boldsymbol{X^Ty}-\frac{\alpha\boldsymbol{I}}{2}

    通过和岭回归对比可知,Lasso并不能通过调整|X^TX|保证(X^TX)^{-1}存在,所以Lasso不能避免精确相关关系,只能限制高度相关关系。所以在使用时,如果线性回归无法求解,可以使用Lasso和岭回归调整;如果线性回归无解或者“除0错误”,只能使用岭回归调整。


    在Lasso下,w求解的表达式为:

    \boldsymbol{w}=(\boldsymbol{X^TX})^{-1}(\boldsymbol{X^Ty}-\frac{\alpha \boldsymbol{I}}{2})

    因为α可以人为设置,所以可以通过调整α,使得w为0。可以通过这种方法做特征选择,将w求解下系数为0的特征舍弃掉。


    以下演示Lasso及特征选择:

    # Lasso系数说明
    Lasso(alpha=1.0 # 设定正则化系数
          ,fit_intercept=True # 是否有截距项,默认有
          ,copy_X=True # 是否复制X
          ,scoring=None # 设定评估指标
          ,normalize='deprecated' # 设定归一化方法
          ,max_iter=1000 # 设定最大迭代次数
          ,tol=0.001 # 设定精度
          ,random_state=None # 设定随机模式
          ,precompute=False # 是否加速计算,False则保持稀疏性
          ,warm_start=False # 重置fit
          ,positive=True # 为True时,求得的参数必须为正,把不为正的信息量放到截距项上。
          ,seleciton='cyclic' # 'random'时,每次迭代都随机,能加速迭代次数;cyclic为顺序迭代
         )
    # Lasso特征选择(案例:对比ridge,加利福尼亚房价数据集)
    from sklearn.linear_model import Lasso
    X,y=fch(return_X_y=True)
    alpha_range=np.linspace(0,2,20)
    feature_lasso=[]
    feature_ridge=[]
    for a in alpha_range:
        model_lasso=Lasso(alpha=a).fit(X,y)
        feature_lasso.append((model_lasso.coef_!=0).sum())
        model_ridge=Ridge(alpha=a).fit(X,y)
        feature_ridge.append((model_ridge.coef_!=0).sum())
    plt.plot(alpha_range,feature_lasso,label='feature_lasso')
    plt.plot(alpha_range,feature_ridge,label='feature_ridge')
    plt.legend()
    plt.show()

    model_ridge=Ridge(alpha=2).fit(X,y)
    model_ridge.coef_
    
    # array([ 4.36495800e-01,  9.43901106e-03, -1.06944092e-01,  6.43062429e-01,
    #       -3.96430115e-06, -3.78617577e-03, -4.21284056e-01, -4.34455530e-01])

    结论:随着正则化系数α的增大,系数为0的特征越来越多,当α>1.75时,只剩下1个特征;而Ridge特征系数只会趋近于0,不会等于0。


    如何在sklearn中使用linear_model.LassoCV,带交叉验证的Lasso?(案例:加利福尼亚房价数据集)

    如果不希望alpha过大导致特征系数为0,应该如何设置alpha呢?

    这时可以使用LassoCV中的eps和n_alphas参数调节正则化路径,从而使alpha以较小的路径变动,从而在调整alpha的时候,不使特征系数为0。

    # 系数说明
    from sklearn.linear_model import LassoCV
    
    LassoCV(eps=0.001 # 正则化路径的长度
            ,n_alphas=100 # 正则化路径中的个数
            ,alphas=None # 设定alphas取值范围,如果输入了alphas,就不用输入eps和n_alpha
            ,cv=None # 交叉验证的折数
            ,fit_intercept=True # 是否有截距项
            ,normalize='deprecated' # 归一化方式
            ,copy_X=True # copyX
            ,max_iter=1000 # 最大迭代次数
            ,tol=0.0001 # 精度/阈值
            ,random_state=None # 随机模式
            ,precompute='auto' 
            ,positive=False
            ,selection='cyclic'
            ,verbose=False
            ,n_jobs=None
    )
    model.alpha_ # 返回交叉验证中最佳的alpha
    model.alphas_ # 返回交叉验证中所有使用的alpha
    model.coef_ # 返回模型的系数解
    model.mse_path_ # 返回所有alpha及交叉验证的均方误差结果
    # 使用正则化路径调整alpha的取值,以至于不让特征系数为0
    from sklearn.datasets import fetch_california_housing
    X,y=fetch_california_housing(return_X_y=True)
    model=LassoCV(eps=0.0001
                  ,n_alphas=200
                  ,cv=9).fit(X,y)
    
    model.alpha_
    # 0.003221092661065102
    
    model.alphas_
    
    model.coef_
    # array([ 4.24825188e-01,  9.65575964e-03, -8.44550706e-02,  5.25631726e-01,-3.09667549e-06, -3.73804407e-03, -4.17417323e-01, -4.28786474e-01])
    
    model.mse_path_.mean()
    # 0.90667071394857

    展开全文
  • 上篇文章《简单而强大的线性回归详解》(点击跳转)详细介绍了线性回归分析方程、损失方程及求解、模型评估指标等内容,其中在推导多元...本文将详细介绍线性回归中多重共线性问题,以及一种线性回归的缩减(shrinkage...
  • 5、Python多重线性回归(代码案例

    千次阅读 2018-12-11 10:01:40
    多重线性回归:研究一个因变量与多个自变量间线性关系的方法 1、回归分析的步骤: 01 根据预测目标,确定自变量和因变量 02 绘制散点图,确定回归模型类型 03 估计模型参数,建立回归模型 04 对回归模型进行...
  • 多重共线性问题的几种解决方法

    万次阅读 多人点赞 2018-01-28 16:45:51
    如果违背这一假定,即线性回归模型中某一个解释变量与其他解释变量间存在线性关系,就称线性回归模型中存在多重共线性多重共线性违背了解释变量间不相关的古典假设,将给普通最小二乘法带来严重后果。  所谓...
  • 如果违背这一假定,即线性回归模型中某一个解释变量与其他解释变量间存在线性关系,就称线性回归模型中存在多重共线性多重共线性违背了解释变量间不相关的古典假设,将给普通最小二乘法带来严重后果。 所谓多重...
  • 运用随机模拟的方法构造数据比较广义逆和一般逆在求解最小二乘估计时的结果,并进行残差分析,比较两种方法在完全多重共线性和半完全多重共线性性中的优缺点,最后对进一步研究复多重共线性提出相应建议:在接下来的...
  • 原标题:SPSS技术:多重线性回归模型;极端值与多重线性欢迎关注天善智能微信公众号,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区。 对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感...
  • 多重共线性(Multicollinearity)是指线性回归模型中的解释变量之间由于存在精确相关关系或高度相关关系而使模型估计失真或难以估计准确。 1.可以计算X矩阵的秩qr(X)$rank,如果不是满秩的,说明其中有Xi可以用...
  • 如果存在较强的共线性,即 中各列向量之间存在较强的相关性,会导致的从而引起对角线上的 值很大 并且不一样的样本也会导致参数估计值变化非常大。即参数估计量的方差也增大,对参数的估计会不准确。 因此,是否...
  • 解决问题:变量过多时可能会导致多重共线性问题造成回归系数的不显著,甚至造成OLS估计的失效 岭回归和lasso回归在OLS回归模型的损失函数上加上了不同的惩罚项,该惩罚项由回归系数的函数构成,一方面,加入的惩罚项...
  • 一、案例介绍 1、目的:利用上市公司当年的公开财务指标预测来年盈利情况最重要的投资人决策依据。 2、数据来源:随机抽取深市和沪市2002和2003年的500个上市公司样本预测来年的净资产收益率。 3、解释变量包括:...
  • 线性回归模型属于经典的统计学模型,该模型的应用场景是根据已知的变量(自变量)来预测某个连续的数值变量(因变量)。例如,餐厅根据每天的营业数据(包括菜谱价格、就餐人数、预定人数、特价菜折扣等)预测就餐规模或...
  • 案例背景介绍这是mei国50个州关于犯罪率的一组数据,包括人口、面积、收入、文盲率、高中毕业率、霜冻天数、犯罪率7个指标,现在我们想考察一下州犯罪率和其他因素间的关系。SPSS变量视图如下:研究目标是各州的...
  • 上篇文章,我们介绍了几种处理共线性的方法。比如逐步回归法、手动剔除变量法是最常使用的方法,但是往往使用这类方法会剔除掉我们想要研究的自变量,导致自己希望研究的变量无法得到研究。因而,此时就需要使用更为...
  • 我将介绍线性回归的概念,但主要讨论Python的实现。线性回归是一种统计模型,用于检查两个(简单线性回归)或更多(多线性回归)变量(一个因变量和一个或多个自变量)之间的线性关系。线性关系基本上意味着当一个...
  • 在前面的两次R笔记中,我们已经介绍了多重线性回归的 《模型拟合》和《适用条件的考察》,但回归模型对数据的拟合性怎么样,有没有异常点,各自变量间存不存在多重线,需要我们做进一步的评估与诊断。 本次笔记是...
  • 利用Python进行VIF检验

    千次阅读 2020-12-18 23:45:58
    在统计学中,多重共线性(共线性)是指多元线性回归模型中的某个预测变量(自变量/解释变量)可以以相当大的准确度通过其他预测变量线性预估。 在这种情况下,模型或数据的微小变化就可能导致多元回归模型的系数估计值...
  • 多重线性回归(Multiple Linear Regression): 研究一个因变量与多个自变量之间的线性关系的方法。 一元线性回归是特殊的多重线性回归,多重线性回归分析步骤和一元线性回归一样: 回归分析的步骤: 根据预测目标...
  • 一、多元线性回归1.多元线性回归的基本表达式在多元线性回归中会有多个解释变量:预测解释变量的估计方程如下:注:额外的假设条件①解释变量之间不能存在太强的线性相关关系(一般ρ<0.7)②其他条件与一元线性...
  • 文章目录回归定义最常用回归方法一、线性回归(Linear Regression)二、逻辑回归(Logistic Regression) 回归定义 回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系。这种技术通常...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,367
精华内容 1,346
热门标签
关键字:

多重共线性数据案例