精华内容
下载资源
问答
  • 多重共线性

    千次阅读 2019-10-22 15:11:10
    不完全共线性:λ1X1+λ2X2+⋯⋯λkXk+νi=0 多重共线性的巴伦坦表示: Q:为什么在经典回归模型中要假定无多重共线性? A:如果解释变量之间存在完全多重共线性,那么,解释变量之间的回归系数将是确定的,...

    多重共线性定义

    一个回归模型中的一些或全部解释变量之间存在一种完全或准确的线性关系。

    完全共线性:λ1X1+λ2X2+⋯⋯λkXk=0

    不完全共线性:λ1X1+λ2X2+⋯⋯λkXk+νi=0

    多重共线性的巴伦坦表示:

     

    Q: 为什么在经典回归模型中要假定无多重共线性?

    A: 如果解释变量之间存在完全多重共线性,那么,解释变量之间的回归系数将是不确定的,并且他们的标准差为无限大。如果解释变量之间的的多重共线性是不完全的,那么虽然回归系数可以确定,但却有较大的标准误差,即系数不能以很高的精度或准确度加以估计。

     

    多重共线性的产生原因

    1. 数据采集所用的方法;

    例如,抽样局限于总体中诸回归元所取值的一个有限的范围内

    2. 模型或从中取样的总体受到约束;

    3. 模型设定;

    4. 一个过度决定的模型;

    5. 回归元具有相同的时间趋势,即同时随着时间增减。

     

    如何识别多重共线性

    a. 多重共线性最明显的信号是R2 异常高而回归系数在通常 t 检验的基础上却没有一个是统计上显著的。

    b. 在仅有两个解释变量的模型中,检查两个变量之间的零阶或简单相关系数,会得到对共线性一个相当好的认识。如果此相关值高,则通常可归咎于多重共线性。

    c. 然而,当模型设计多于两个X解释变量时,低的零阶相关却可能给出高的多重共线性。对于这种情形,也许有必要检查偏相关系数。

    d. 如果 R2 高而偏相关低,则多重共线性是可能的。这时一个或多个的变量可能是多于的。但若 R2 高且偏相关也高,则多重共线性也许不易识破。

    e. 因此,不妨拿模型中的每一 Xi 变量对所有其余 X 变量做一个回归,并求出相应的判定系数R2i。一个高的R2i 将表明Xi 和其余的X 高度相关,从而可考虑把 Xi 从模型中清除出去。

     

    如何解决多重共线性问题

    1. 先验信息;

    2. 横截面和时间序列数据并用;

    3. 剔除变量和设定错误;

    4. 变量代换;

    5. 补充新数据;

    6. 在多项式回归中降低共线性;

    7. 一些其他方法例如-----因子分析,主元法或脊回归。

    ----------------------------------------------------------

    拓展阅读:

    1.一个量化策略师的自白(好文强烈推荐)

    2.市面上经典的量化交易策略都在这里了!(源码)

    3.量化交易领域最重要的10本参考书推荐!

    4.期货/股票数据大全查询(历史/实时/Tick/财务等)

    5.如何设计量化交易策略?

    6.量化交易干货汇总,很干!

    展开全文
  • 线性方程组预条件解法修正不完全lu分解
  • 共线性那些事儿

    千次阅读 多人点赞 2019-07-06 18:24:42
    我们经常听说,建模时应当尽量避免共线性(collinearity),共线性会导致参数估计稳定、模型可靠等等。那么共线性究竟有多可怕?共线性具体会带来什么问题?共线性得到的模型是否真的不行?笔者通过自己的一些...

    我们经常听说,建模时应当尽量避免共线性(collinearity),共线性会导致参数估计不稳定、模型不可靠等等。那么共线性究竟有多可怕?共线性具体会带来什么问题?共线性得到的模型是否真的不行?笔者通过自己的一些思考,结合模拟数据的测试,对共线性的问题进行了些探讨。笔者拙见,如有纰漏,烦请指教。

    其实很多变量都存在少量的共线性关系,但是对建模基本没有造成影响。本文主要探讨的是共线性较严重的情况。

    转载请注明出处:https://blog.csdn.net/fjsd155/article/details/94852770

    问题引入

    现在模拟一个情景:现在需要建立一个关于消费水平的预测模型,对于每个消费者收集了3个变量:月收入 x_1,存款 x_2,所在地区的经济水平 x_3 ,假设月收入与存款之间存在线性关系,这里为了简化问题,假设是2倍的关系(当然实际情况不是2倍,而且不是严格线性关系),即 x_2=2x_1,并且假定消费水平与这3个变量之间的关系为:y=8x_1+8x_2+6x_3。当然这些是假定的理想情况,实际关系要复杂很多。因果关系是存在的,月收入、存款或当地经济水平,任意一个因素都确实可能影响消费者的消费水平。

    很明显,如果直接建模,变量之间存在严重的共线性关系。我们来看看具体会产生哪些现象。

    代码测试

    为了解答这个问题,我用 R 和 Python 做了些测试,下面以R 代码为例:

    # Test the influence of collinearity
    
    # add random effect for the variable
    add_random<-function(x, sd){
      # generate random effect on the full data, using sd=sd
      len<-length(x)
      y=x+rnorm(len, mean = 0, sd = sd*1)
      # generate random effect on the random 20% of data, using sd=sd*1.6
      len1<-round(len*0.2)
      index<-sample(1:len,len1,replace = FALSE)
      y[index]<-y[index]+rnorm(len1,mean = 0, sd = sd*1.6)
      # generate random effect on the random 16% of data, using sd=sd*1.8
      len2<-round(len*0.16)
      index<-sample(1:len,len2,replace = FALSE)
      y[index]<-y[index]+rnorm(len2,mean = 0, sd = sd*1.8)
      return(y)
    }
    
    # x1, x2, x3 are the true factor that generate the event (result varaiable, Y)
    x1<-rnorm(100, mean = 16, sd = 1)
    x2<-2*x1
    x3<-rnorm(100, mean = 18, sd = 3)
    
    # add random effect for x1, x2, x3, using sd=0.001.
    # to guarantee the collinearity, the random effect should be small.
    x1<-add_random(x1, sd=0.001)
    x2<-add_random(x2, sd=0.001)
    x3<-add_random(x3, sd=0.001)
    
    # validate the relationship between x1 and x2.
    cor(x1, x2)
    # [1] 0.9999981
    
    # if the cause-effect relationship is: y=8*x1+8*x2+6*x3
    y<-8*x1 + 8*x2 + 6*x3
    y<-add_random(y, sd=1)
    
    # validate the relationship between y and (8*x1 + 8*x2 + 6*x3).
    cor(y, 8*x1 + 8*x2 + 6*x3)
    # [1] 0.9990227
    
    # x4 is the combination of x1 and x2 with the same weight.
    x4<-x1+x2
    
    # fit the model using x1 and x3
    model_A<-lm(y~x1+x3)
    summary(model_A)
    # Coefficients:
    #             Estimate  Std.Error   t value  Pr(>|t|)    
    # (Intercept)  0.14680    2.42208   0.061    0.952    
    # x1          24.03943    0.15005 160.207   <2e-16 ***
    # x3           5.94959    0.04482 132.745   <2e-16 ***
    # Multiple R-squared:  0.9981,	Adjusted R-squared:  0.998 
    
    # fit the model using x2 and x3
    model_B<-lm(y~x2+x3)
    summary(model_B)
    # Coefficients:
    #             Estimate   Std.Error  t value  Pr(>|t|)    
    # (Intercept)  0.16278    2.42378   0.067    0.947    
    # x2          12.01916    0.07508 160.088   <2e-16 ***
    # x3           5.94944    0.04485 132.643   <2e-16 ***
    # Multiple R-squared:  0.9981,	Adjusted R-squared:  0.998
    
    # fit the model using x4 and x3
    model_C<-lm(y~x4+x3)
    summary(model_C)
    # Coefficients:
    #             Estimate   Std.Error  t value  Pr(>|t|)    
    # (Intercept)  0.15712    2.42293   0.065    0.948    
    # x4           8.01290    0.05003 160.146   <2e-16 ***
    # x3           5.94949    0.04484 132.692   <2e-16 ***
    # Multiple R-squared:  0.9981,	Adjusted R-squared:  0.998 
    
    # fit the model using x1, x2 and x3. This is the case which existing the collinearity.
    model_D<-lm(y~x1+x2+x3)
    summary(model_D)
    # Coefficients:
    #             Estimate   Std.Error  t value  Pr(>|t|)    
    # (Intercept)  0.14387    2.43502   0.059    0.953    
    # x1          28.98087   75.73214   0.383    0.703    
    # x2          -2.47062   37.86443  -0.065    0.948    
    # x3           5.94962    0.04505 132.055   <2e-16 ***
    # Multiple R-squared:  0.9981,	Adjusted R-squared:  0.998 

    下面,我们对这些结果进行解读。

    共线性对非共线性变量的影响

    共线性对非共线性变量的影响。这句话有点拗口,具体来说,我想探讨的第一个问题是:如果保留共线性的变量,那么建模时,那些非共线性的变量的系数估计会不会受到影响?

    由上述 model_D 可知,x_3 的系数的估计没有受到任何影响。并且,在增加变量数目或改变样本量后重新进行测试,都显示:非共线性的变量的系数估计都没有受到任何影响。

    因此得出结论1:共线性对非共线性的变量的系数估计不产生影响。

     

    共线性对模型拟合优度的影响

    共线性对模型拟合优度的影响。这句话有点学术化,具体来说,我想探讨的第二个问题是:如果保留共线性的变量,那么建立的模型的预测能力是否受到影响?

    由上述 model_D 可知,模型的 R^2 没有下降。并且,在增加变量数目或改变样本量后重新进行测试,都验证了这个现象。

    因此得出结论2:共线性不会影响模型的拟合优度。

     

    共线性对模型产生的具体影响

    由 model_D 可知,共线性变量  x_1 和 x_2 的系数估计变得不确定,方差很大,这在系数是否为 0 的检验( t 检验或 Wald 检验)中是会被认为没有统计学意义的(有可能该系数为 0 )。实际上,这是因为 x_1 和 x_2 的系数解空间是全体实数,只需要保证二者系数保持一定的关系即可。我们所看到的方差并不是无穷大,是因为在估计参数的时候,迭代次数有限制(当迭代次数达到某个值时,如果仍然没有确定系数的最佳选择,则程序认为该参数的估计无法收敛converge ] )。

    但是注意到, x_1 的系数 w_1 和 x_2 的系数 w_2 ,总是会近似保持一种关系:(w_1+2w_2)/3=8 。这是因为:

          w_1x_1+w_2x_2=w_4x_4 \\\Rightarrow w_1x_1+w_2(2x_1)=w_4(x_1+x_2)=w_4(x_1+2x_1) \\\Rightarrow w_1+2w_2=3w_4

    并且,在增加变量数目或改变样本量后重新进行测试,都验证了这个系数间的类似关联。当然,笔者在测试时还发现了几种情况(随噪声扰动大小不同而出现):第一种是各个系数的估计有显著意义且系数估计偏差很小(尽管变量间相关系数在0.99左右),第二种是各个系数的估计有显著意义但系数估计偏差较大,第三种是其中一个变量准确估计而另一个变量显示结果为NA(当完全没有噪声时)。由此可见,共线性存在的情况下,有时候也能准确估计系数,不过总体来说,系数的很难保证可靠(即使事后的参数检验有显著差异)。

    建模后的参数检验,常常用来评估某些参数是否可能为 0 (系数为 0 的变量常被认为没有意义),而共线性变量的系数由于是可以取得 0 作为解的(无穷组解),因此参数检验认为这些系数可能为 0,但是其实这并不代表这些变量没有意义。为了避免这两种情况混淆,我们事先消除共线性也是不错的选择。另外,我们经常把参数估计不准的模型定性为不可靠的模型,但实际上,共线性并不导致模型不可靠,而是参数有无穷种选择,每种选择都是可以的。

    因此得出结论3:共线性会使得共线性的变量的系数估计变得不可靠,但共线性变量的系数之间维持一种近似的特殊关系。

     

    原理解析

    以上分析了共线性造成的影响,得出了3个结论,那么这些结论背后的原理是什么呢?

    首先我们看一下 x_1 、 x_2 与 y 之间的关系图(本应该是三维坐标图,这里就放几张截图吧):

          

          

    从这3张图可以看出,所有的点都分布在同一个平面上,可能你觉得没什么,这主要是因为还有 x_3 的存在,其实如果把 x_3 事先拟合进来(将 x_3 的方差部分消除,留下残差),那么所有的点将会近似分布在一条直线上。如果不信,我们假设一个模型:

          y=8x_1+8x_2, x_2=2x_1

    我再次构建三维散点图,如下所示:

          

          

    我们知道,1个自变量的回归模型是1条线(线性模型为直线、非线性模型为曲线或折线),2个自变量的回归模型是一个平面(线性模型为平面、非线性模型为曲面或折面),3个及以上自变量的回归模型为超面。那么对于如上这个两个自变量的线性回归模型来说,其解有无数个平面(这些平面有一个共同特点:都穿过这些散点所在的直线)。这也就解释了为什么共线性模型的系数有无数种可能(取值为全体实数,只需保证系数之间存在特殊的线性关系即可)。

    而从损失函数的角度来讲,这种情况其实是损失函数的最小值处是一条水平的很细的沟、并且沟是可以无限延长的,沟的两侧会平滑地上升,这条沟所在的直线为: (w_1+2w_2)/3=8 

    损失函数的图像不太好画,只能请读者自行脑补啦。

    根据这些,之前得到的那3个结论,也就顺理成章了。

    这些结论,在Logistic 模型中仍然适用(笔者也进行了一些测试)。但注意,Logistic 的参数解其实不是唯一的,因为线性回归部分的拟合,其实是为了拟合成一个均值为 0 的变量 z ,使得这个拟合的构造变量 z 取得正数值的部分样品尽可能多的是分类为1的样品,取得负数值的部分样品尽可能多的是分类为 0 的样品。各个参数成比例变大或缩小时,不影响这个构造变量 z 的分类能力,模型是不变的(详细解释可以类比笔者的另一篇博客:模型求解 中的“当 Logistic 回归遇到线性可分数据”部分的解释)。因此在得到测试结果时,需注意查看系数之间的比例关系是否保持稳定。

     

    人为避开共线性

    平时建模时,我们一般会事先把共线性的变量进行选择性保留,从而避免共线性。避免共线性有很多好处。上文中提到的,避开共线性可以让参数的估计变得稳定可靠,让模型更有说服力。

    避开共线性,也就意味着共线性的变量中,只能保留其中一个。保留下来的变量,其数据将被纳入分析建模,但是该变量的系数的估计值其实不再是真实值了。从上述代码中的 model_A 和 model_B 的结果可以看出, x_1 的系数 w_1 或 x_2 的系数 w_2 和事先给定的系数不一致。因此所得系数的意义的解读需要谨慎。

    另外注意到,如果我们用先验知识知道  x_1 与 x_2 应当如何组合(即 x_4=x_1+x_2 ),那么根据 model_C,我们是可以估计出所有变量的真实系数的。另外,随着噪声扰动的增大(使共线性关系稍微变弱),将共线性的变量直接建模,也仍然是可以估计出真实系数的(参数检验时可以得到有统计学差异,并且系数估计值是偏差都很小。但是根据结论3,又不太敢相信这个估计值)。

    当我们只能获取少量信息时,我们很少遇到共线性的情况;后来我们能收集的信息增多,共线性出现了,这时我们又故意无视产生共线性的那些变量(只保留其中一个)。随着我们科技进步和数据收集能力增加,并且抛开“因果关系”建模的现象日益普遍,共线性的情况将会越来越常见。而随着我们经验的增加,或许有一天我们可以更有信心地保留共线性变量,从而利用更完备的信息来建立所有相关因素的“网络关联模型”。

    避开共线性的技巧有很多,变量较少时,可以采用逐步回归的策略,逐个挑选变量;变量很多时可以用 LASSO 挑选变量进行建模。注意:主成分分析(PCA及相应的PCR主成分回归)、偏最小二乘法(PLS 及 OPLS)等方法并没有对变量进行选择,建模后仍然可以追溯相应的原始变量,是巧妙地避开了共线性造成的问题。具体方法此处不展开阐述,可以参考:

    高维数据中特征筛选方法的思考总结——多变量分析筛选法

    偏最小二乘法 Partial Least Squares

    LASSO回归

    但是,这些方法都只是从变量的选择上避开了共线性,所得到的系数估计仍然是不准确的,需谨慎解读系数的意义。还有一种方法可以更准确地评估共线性变量的真实系数——分层匹配法。下文“解释变量的意义解读”中将进一步介绍这个方法。

     

    共线性影响模型泛化的一种情况

    其实,有一种情况下,共线性建模会影响模型的泛化能力。当共线性的情况是由数据偶然所造成时,换一批数据后,共线性关系如果消失了,那么使用原先数据训练的模型,在新的数据中预测准确性会很差。

    这种情况是存在的,仍然以刚刚的模拟情景为例。当我们用之前包含共线性变量的模型去测试这样一群消费者:刚刚毕业进入IT大厂的高收入程序员。高收入程序员,由于刚刚毕业,存款极少,那么存款与收入之间的共线性关系就消失了,那么之前保留共线性所训练的模型就有可能出现问题(因为系数的估计是不准的)。

    更一般的情况是,当前选定的样本中,某些变量确实存在共线性,但是当扩大样本量后,共线性的关系消失了,那么原先保留共线性建模所得到的规律,在扩大样本量后就不再适用了。这种现象,笔者称之为“数据偶然造成的共线性”。这种共线性会导致模型变得不准确,此时需要对变量进行取舍。比如在某个小样本中,变量A和B存在共线性,且这种共线性时偶然造成的,那么我们需要考虑仅保留A或B(在当前数据上看,保留A或B似乎是差不多的),假定我们保留了A,并且系数有统计学意义。当换一批数据,AB的共线性关系消失时,AB中有一个和结局变量的关系有可能变得不显著。如果此时A变得不显著了,说明我们保留变量时没选对,人为造成了假阳性和假阴性。因此,在共线性时,挑选变量这一过程又变得没那么轻而易举,不是一个LASSO或者逐步回归能简单处理的。似乎,更明智的做法是,将所有变量保留下来,等待其他数据进行验证,经得起考验的变量就可以考虑纳入模型了。

     

    解释变量的意义解读

    相比非线性模型,线性模型有一个好处,就是得到的模型参数(也就是变量的系数;非线性模型中的模型参数就不一定是系数了)是有实际意义的,模型本身也是基于概率和正态分布而推导的。因此,笔者习惯于优先使用广义线性模型拟合数据,如果效果不好,再使用非线性模型(如SVM、XGBoost、神经网络等)。

    那么对于线性模型的解释变量的系数,究竟有怎样的意义呢?在没有共线性存在时,变量的系数的意义是确定的。在线性回归模型中,系数 w 的意义是:该变量每增加一个单位数值都会使结局变量增加 w。而在 Logistic 回归中,系数的意义可以从OR的角度来解释(此处不赘述,Logistic 回归中十分重要的基本知识)。在理想状态下(完全不存在任何共线性时),单变量建模所得的系数与多变量建模所得的系数是一致的(可以程序模拟验证这一结论),因此其解释意义是不变的。

    然而,当存在共线性时,情况就不一样了。若直接包含共线性建模,则所得系数无法收敛(系数取值有无数种可能),无法解释。若只保留共线性变量中的一个变量进行建模,则得到的系数的解释意义,就不再应该是该系数原本的解释意义了,严格来说应该是共线性变量群体的综合意义。或者说,保留的变量是一群变量的“代表”。因此在选择性保留变量时,我们实际上已经赋予这个变量新的含义了,这一点值得注意。这一点有点像主成分分析(PCA)的哲学,保留的变量其实是一个复合含义的变量(虽然表明上没有做成分映射、就只是单纯保留了这个变量)。比如,上述 model_A。仅保留了月收入和当地经济水平这两个变量,但是此时对于月收入的系数(w1=24)的解读,应该是:由月收入和存款构成新的变量(我们称之为“个人经济能力”),该变量采用的数据暂时仍然是月收入的数据,该变量带来的效应可以用 w1来衡量的。

    我们常说,变量的系数代表着变量的重要性或者贡献。但其实这个说法是有问题的。第一,变量的系数会受到数据方差和尺度的影响,不同方差和尺度的变量,比较其系数大小是不公平的。第二,变量的系数并非就反应了这个变量的真实意义(存在共线性时,其代表的是共线性变量群体的综合意义)。

    基于此,我们需要更好的办法去评估各个变量的重要性。在线性回归中,我们可以评估各个变量的R^2 贡献,在 Logistic 回归中我们可以使用似然比检验中的卡方值(或Wald检验近似替代的卡方值,Wald检验的卡方值就等于“系数/系数标准差”。Frank Harrell 教授很推荐使用Wald检验的卡方值来表示变量的重要性。不过个人对Wald检验的卡方值仍然持保守态度)。

    进行多变量建模,我们一般会先对变量进行标准化处理(normalization,先中心化再尺度化),这样应该也是可以让各个变量在比较系数时变得公平。此外,标准化处理还有个好处,就是可以加快梯度下降的效率(当各个变量方差差别较大时,各个变量对应的系数的收敛速度差别很大,在CNN训练时也有这个问题,可以采用不同的学习率对各个参数更新迭代,也可以采用标准化的策略)。大概,BatchNormalization有助于训练深度模型,是有这个原因在里面的吧。

    既然存在共线性(无论逻辑上还是数据集中都存在相关性),那么共线性变量的真实系数无法估计,是不是就真的没办法求解了呢?其实还有一个办法——分层匹配法。分层匹配法的目的是,针对共线性的变量,人为选择一个数据子集,使得共线性变量在这个数据子集中的相关性变弱,然后在这个数据子集中评估共线性变量的真实系数。比如,我们选择“刚毕业的高收入程序员”这个数据子集,则存款与收入之间的共线性关系就消失了,在这个数据子集中可以估计消费水平这个模型中各个变量的真实系数。这种思想就是“控制混杂因素”,当然在这里我们将“协变量”当作混杂因素来处理了。其缺陷在于,分层匹配法得到的数据子集的样本量往往严重缩水(匹配较为严格时),此时可以放宽匹配标准或采用倾向性评分匹配法来构建这个数据子集(可参考:辩证看待倾向性评分法)。

     

    更广泛的场景

    实际建模中,情况要比刚刚的讨论复杂很多,我们甚至不考虑“因果关系”,甚至试图建立“表型与表型之间关系”的模型,这将很可能引入更多的共线性变量!典型的案例是代谢组学研究,比如探索代谢物与疾病疗效之间的关系(代谢物是表型、疗效也是表型)的问题中,因变量(各个代谢物)之间存在高度的共线性。

    因此,我们甚至会发现,共线性的情况变得更加普遍了。我们可以找到很多存在线性关系的特征,这就使得建模更加费劲了。当然,如果没有“因果关系”,建模时也就不那么关注系数的解释意义了(机器学习的黑箱也是如此,各个变量的解释意义被忽视)。那么,既然如此,参数是否收敛也就变得不那么重要,只要预测能力强且泛化能力强(外推性好),那就行啦。具体参数是啥不重要了,当作“黑箱模型”啦。

     

    规律的简单性与复杂性

    规律(模型)是简单的。我们可以利用少量关键的信息建立模型,能保证模型相对稳定。因为使用的特征是极其关键的特征,甚至是整个研究群体的普遍特征(比如模拟情景中的“当地经济水平与消费水平存在普遍的相关规律”),所以模型能保证稳定性、广泛适用性。

    规律(模型)是复杂的。我们常常对简单的模型表示不满足(总是希望追求完美),因为预测结果相对粗糙,不够精准,我们希望能更精准地实现预测。那么就需要找出更多有用的信息,加入更多的特征进行建模。理想状态下,当我们找到所有有用的信息,建立因果作用网络模型,那么预测能力可以接近完美。但是我们找到的规律总是不全面的,由于规律的不全面,导致某些规律只适用于部分亚群体。尤其是存在共线性关系时,这将使得建立的模型变得不可靠(我们很难反推出各个共线性变量的真实系数);这时大家往往宁愿舍弃共线性的变量,来谋得模型的稳定。但是,如果我们能够挖掘到更多有用的信息(比如建立更复杂的理论或者加入更多的先验知识,推导出各个共线性变量的真实系数,甚至建立各种非线性关系、网络关系等),有可能可以模拟出真实的规律。

    不同的规律,复杂性是不同的。有的规律本身就很简单,那么就很容易模拟得很接近真实(比如根据身高体重来预测合适的衣服尺寸)。而有的规律本身就很复杂(比如预测任意一个人得癌症的风险),则模型是复杂的(当然我们常常会根据少数关键信息建立简单的模型)。

     

    展开全文
  • 多重共线性问题

    2018-11-25 15:43:29
    多重共线性是指线性回归模型中的解释变量之间由于存在精确相关关系或高度相关关系而使模型估计失真或难以估计准确。...完全共线性的情况并多见,一般出现的是在一定程度上的共线性,即近似共线性
  • 特征选择和共线性问题

    千次阅读 2019-03-31 18:36:37
    1. 特征选择的原因 提高模型稳定性的需要 提高模型预测能力的需要 提高运算速度运算效率的需要 ...2.2 用线性相关性指标进行初步筛选 常用:皮尔逊相关系数r=∑(x−xˉ)(y−yˉ)∑(x−xˉ)2∑(y−yˉ)2r=\fr...

    1. 特征选择的原因

    • 提高模型稳定性的需要
    • 提高模型预测能力的需要
    • 提高运算速度和运算效率的需要

    2. 特征选择的过程

    2.1 结合业务经验先行筛选

    很多时间业务专家一针见血的商业敏感性可以有效缩小自变量的考察范围,准确圈定最有价值的预测变量,提高判断和筛选效率。

    2.2 用线性相关性指标进行初步筛选

    2.2.1 皮尔逊Pearson相关系数

    r = ∑ ( x − x ˉ ) ( y − y ˉ ) ∑ ( x − x ˉ ) 2 ∑ ( y − y ˉ ) 2 r=\frac{\sum(x-\bar x)(y-\bar y)}{\sqrt{\sum(x-\bar x)^2\sum (y-\bar y)^2}} r=(xxˉ)2(yyˉ)2 (xxˉ)(yyˉ) r ∈ [ − 1 , + 1 ] , ∣ r ∣ r\in [-1,+1],|r| r[1,+1],r越大,线性相关性越强。

    • ∣ r ∣ ∈ [ 0.7 , 1 ] |r|\in [0.7,1] r[0.7,1]强相关关系
    • ∣ r ∣ ∈ [ 0.4 , 0.7 ) |r|\in [0.4,0.7) r[0.4,0.7) 较强相关关系
    • ∣ r ∣ ∈ [ 0.2 , 0.4 ) |r|\in [0.2,0.4) r[0.2,0.4) 弱相关关系
    • ∣ r ∣ ∈ [ 0 , 0.3 ) |r|\in [0,0.3) r[0,0.3) 极弱相关关系或无相关

    适用范围:当两个变量的标准差都不为零时,相关系数才有定义,皮尔逊相关系数适用于:

    • 两个变量之间是线性关系,都是连续数据。
    • 两个变量的总体是正态分布,或接近正态的单峰分布。
    • 两个变量的观测值是成对的,每对观测值之间相互独立。

    2.2.2 斯皮尔曼Spearman相关系数

    斯皮尔曼相关系数被定义成等级变量之间的皮尔逊相关系数。斯皮尔曼相关系数与两个相关变量的具体值无关,而仅仅与其值之间的大小关系有关。
    ρ = 1 − 6 ∑ d i 2 n ( n 2 − 1 ) \rho=1-\frac{6\sum{d_i^2}}{n(n^2-1)} ρ=1n(n21)6di2其中,di表示两个变量分别排序后成对的变量位置差,n表示样本总数,减少异常值的影响。

    适用范围:连续型数值变量、等级数据(举例:两次考试的排名数据)

    2.2.3 小结

    Spearman
    备注:python实战

    from scipy.stats import pearsonr, spearmanr
    pearsonr(x,y) # 返回皮尔逊相关系数和检验P值, 样本要求>20。
    spearmanr(x,y) # 返回斯皮尔曼相关系数和检验P值, 样本要求>20。
    

    2.3 多元线性回归的显著性检验

    2.3.1 线性回归模型的显著性检验

    检验方法用F检验,或者直接用多元相关系数R R = S R 2 S T 2 = ∑ i ( y ^ i − y ˉ ) 2 ∑ i ( y i − y ˉ ) 2 R=\sqrt {\frac{S_R^2}{S_T^2}}=\sqrt{\frac{\sum_i(\hat y_i-\bar y)^2}{\sum_i (y_i-\bar y)^2}} R=ST2SR2 =i(yiyˉ)2i(y^iyˉ)2 r ∈ [ 0 , 1 ] r\in [0,1] r[0,1],r越大,线性相关性越强。当R的样本值 r > r a ( n − k − 1 ) r>r_a(n-k-1) r>ra(nk1)(相关系数临界值)时,认为Y与 X 1 , X 2 , . . . , X k X_1,X_2,...,X_k X1,X2,...,Xk之间的线性关系显著,否则不显著。

    2.3.2 回归系数的显著性检验

    对每个变量 X i X_i Xi做偏回归显著性检验,公式为: F i = S R − S R − i S R F_i=\frac{S_R-S_{R_{-i}}}{S_R} Fi=SRSRSRi其中, S R − i S_{R_{-i}} SRi为剔除变量 X i X_i Xi之后的回归平方和, S R − S R − i S_R-S_{R_{-i}} SRSRi反映了引入 X i X_i Xi之后,其对回归平方和 S R 2 S_R^2 SR2的贡献。

    分别检验各个自变量的 F i F_i Fi是否都大于相应的 F α F_\alpha Fα

    • 如果全都大于 F α F_{\alpha} Fα,则结束;
    • 如果发现有几个自变量不满足,则每次只能删除其中一个 X i X_i Xi(其 F i F_i Fi最小),然后重新用剩下的自变量进行回归的构建,如此反复,直到所有有显著性意义的自变量都进入回归方程,而没有显著性意义的自变量都被剔除。

    2.3.3 卡方检验:度量类别型目标变量和类别型自变量的关联性

    卡方检验属于非参数检验,主要用来度量判别型变量之间的关联性以及比较2个或2个以上的样本率(比例)。其基本思想是比较理论频数和实际频数的吻合程度 χ 2 = ∑ i = 1 m ( v i − n p i ) 2 n p i \chi^2=\sum_{i=1}^m\frac{(v_i-np_i)^2}{np_i} χ2=i=1mnpi(vinpi)2
    其中m是互不相容的事件个数, v i v_i vi是实例频数, n p i np_i npi是理论频数。拒绝域为 { χ 2 > χ 1 − α 2 ( m − 1 ) } \{\chi^2>\chi^2_{1-\alpha}(m-1)\} {χ2>χ1α2(m1)}

    2.3.4 IV和WOE:处理区间型自变量

    当目标变量是二元变量,自变量是区间型变量时,可以通过信息值IV (information value)和迹象权数WOE(weight of evidence)进行自变量的判断和舍取。

    2.3.4.1. WOE离散化

    一种有监督的编码方式,将预测类别的集中度的属性作为编码的数值
    在这里插入图片描述
    WOE可以理解为:当前这个组中坏客户和好客户的比值,和所有样本中这个比值的差异。这个差异为这两个比值的比值,再取对数来表示的。

    WOE越大,这种差异越大,这个分组里的样本坏样本可能性就越大,WOE越小,差异越小,这个分组里的坏样本可能性就越小。

    当我们算完WOE的时候,我们关注的点一般会有这几个:

    • woe是否单调
    • woe是否呈线性
    • IV值的大小。
    优势
    • 将特征的值规范到相近的尺度上。
    • 具有业务含义。
    缺点
    • 需要每箱中同时包含好、坏两个类别。

    2.3.4.2 IV值衡量自变量的预测能力

    IV就是用来衡量自变量的预测能力。类似的指标还有信息增益、基尼系数等等。

    计算每个区间的WOE值后,再通过IV值,筛选出有较高预测价值的自变量,投入模型的训练中。

    IV的计算基于WOE,可以看成对WOE的加权求和,权重为 P y 1 − P y 0 P_{y1}-P_{y0} Py1Py0,这个系数很好的考虑了这个分组中样本占整体样本的比例,比例越低,这个分组对变量整体预测能力的贡献越低。
    I V = ∑ ( P y 1 − P y 0 ) ∗ W O E IV=\sum(P_{y1}-P_{y0})*WOE IV=(Py1Py0)WOE

    缺点

    使用IV不能自动处理变量的分组中出现响应比例为0或100%的情况。

    参考教程

    • Weight of Evidence (WOE) and Information Value Explained
      https://www.listendata.com/2015/03/weight-of-evidence-woe-and-information.html
    • 【详解】银行信用评分卡中的WOE在干什么? - 知乎
      https://zhuanlan.zhihu.com/p/30026040
    • 手把手教你用R语言建立信用评分模型(二)—单变量分析 - R语言-炼数成金-Dataguru专业数据分析社区
      http://www.dataguru.cn/article-10479-1.html

    2.4 部分建模算法自身的筛选功能

    可供“借力”的模型:决策树、线性回归、逻辑回归等。

    多元线性回归的显著性检验/stepwise算法

    比如线性回归和逻辑回归中,算法通过不断增加或者删除变量,来检验各输入变量对于预测的价值

    区别
    Enter:所有X一次性全部进入
    Forward:X一个一个进,每次进入P-value最小的X,直到未进入的X都不significant
    Backward:所有的X先一次性进入,然后一个一个剔除,每次剔除P-value最大的X,直到保留的X全都significant
    Stepwise:X一个一个进,但是进入新的X以后,会重新审查所有已进入X的P-value,如果进入新的X导致原来的X的P-value从significant变成不significant,则把原来的X剔除。

    随机逻辑回归算法

    对训练数据进行多次采样拟合回归模型,即在不同的数据子集和特征子集上运行特征算法,不断重复,最终选择得分高的重要特征。这是稳定性选择方法。

    from sklearn.linear_model
    import RandomizedLogisticRegression ,LogisticRegression
    

    参数:

    惩罚因子C:默认1

    缩放参数s:用于随机缩放不同特征的惩罚。默认0.5

    子集划分比:默认75%

    得分阈值:默认0.25

    容忍误差:默认1e-3

    2.5 降维方法

    主成分分析、变量聚类等

    通过降维方法,可以有效精简输入变量的数目,在一定程度上有效筛选模型输入变量。

    3. 共线性问题

    所谓共线性,指的是自变量之间存在较强甚至完全的线性相关关系。这会导致模型预测能力下降,增加对于模型结果的解释成本。

    3.1 识别方法

    • 相关系数法:皮尔逊相关系数
    • 通过模型结论的观测:如回归模型中如果回归系数的标准差过大,则有可能出现共线性问题
    • 主成分分析:主成分载荷能力大小从一定程度上反映各个变量的相关性
    • 变量聚类:对区间型变量进行聚类,同类的变量之间可能存在共线性问题

    3.2 解决方法

    • 对相关变量进行取舍
    • 对相关变量进行组合,生成一个新的综合性变量
    • 尝试对相关变量进行一些形式的转换:生成衍生变量、改善变量分布的转换(取对数、开方等)、分箱、标准化
    展开全文
  • 基于模糊结构元方法, 定义了模糊数模糊值函数的乘法运算, 研究了由对称模糊结构元线性生成的完全模糊线性微分系统的求解问题, 给出了系统解存在的充要条件, 得到了结构...
  • 多重共线性详解

    千次阅读 多人点赞 2020-12-26 23:04:23
    目录 1、多重共线性的现象 2、出现的原因 3、判别标准 4、检验方法 5、多重共线性有什么影响 6、多重共线性处理方法 7、其他说明 8、多重共线性识别-python代码8.1、vif检验8.2 相关系数8.3 聚类 9、宏观把握共线性...

    解释变量与自变量,被解释变量与因变量

    Y=aX+b
    解释变量被解释变量看,Y是被X解释的变量。因此,X是解释变量,Y是被解释变量。
    自变量因变量看,X是自身变量的量,Y是随着X变化而变化的量。因此,X是自变量,Y是因变量。

    1、多重共线性的现象

    在进行线性回归分析时,容易出现自变量(解释变量)之间彼此相关的现象,我们称这种现象为多重共线性

    适度的多重共线性不成问题,但当出现严重共线性问题时,会导致分析结果不稳定,出现回归系数的符号与实际情况完全相反的情况。
    本应该显著的自变量不显著,本不显著的自变量却呈现出显著性,这种情况下就需要消除多重共线性的影响。

    2、出现的原因

    多重共线性问题就是指一个解释变量的变化引起另一个解释变量的变化。

    原本自变量应该是各自独立的,根据回归分析结果能得知哪些因素对因变量Y有显著影响,哪些没有影响。

    如果各个自变量x之间有很强的线性关系,就无法固定其他变量,也就找不到x和y之间真实的关系了。

    除此以外,多重共线性的原因还可能包括:

    • 数据不足。 (在某些情况下,收集更多数据可以解决共线性问题)
    • 错误地使用虚拟变量。(比如,同时将男、女两个虚拟变量都放入模型,此时必定出现共线性,称为完全共线性)
    • 自变量都享有共同的时间趋势
    • 一个自变量是另一个的滞后,二者往往遵循一个趋势
    • 由于数据收集的基础不够宽,某些自变量可能会一起变动

    3、判别标准

    有多种方法可以检测多重共线性,较常使用的是回归分析中的VIF——方差扩大因子(variance inflation factor)值,VIF值越大,多重共线性越严重。一般认为VIF大于10时(严格是5),代表模型存在严重的共线性问题。

    有时候也会以容差值作为标准,容差值=1/VIF,所以容差值大于0.1则说明没有共线性(严格是大于0.2),VIF和容差值有逻辑对应关系,两个指标任选其一即可。

    除此之外,

    • 直接对自变量进行相关分析,查看相关系数和显著性也是一种判断方法。如果一个自变量和其他自变量之间的相关系数显著,则代表可能存在多重共线性问题。
    • 发现系数估计值的符号不对
    • 某些重要的解释变量 t 值(SPSS中T的数值对回归参数的显著性检验值)低,而不低
    • 当一不太重要的解释变量被删除后回归结果显著变化;

    4、检验方法

    1. 相关性分析,相关系数高于0.8,表明存在多重共线性;但相关系数低,并不能表示不存在多重共线性;(摘抄《计量经济学中级教程》潘省初主编)
    2. vif检验
    3. 条件系数检验

    5、多重共线性有什么影响

    共线性会导致回归参数不稳定,即增加或删除一个样本点或特征,回归系数的估计值会发生很大变化。

    这是因为某些解释变量之间存在高度相关的线性关系,XTX会接近于奇异矩阵,即使可以计算出其逆矩阵,逆矩阵对角线上的元素也会很大,这就意味着参数估计的标准误差较大,参数估计值的精度较低,这样,数据中的一个微小的变动都会导致回归系数的估计值发生很大变化。

    总结共线性对线性模型影响:

    • 回归模型缺乏稳定性。样本的微小扰动都可能带来参数很大的变化;
    • 难以区分每个解释变量的单独影响;
    • 参数的方差增大;
    • 变量的显著性检验失去意义;
    • 影响模型的泛化误差。

    6、多重共线性处理方法

    多重共线性是普遍存在的,通常情况下,如果共线性情况不严重(VIF<5),不需要做特别的处理。如存在严重的多重共线性问题,可以考虑使用以下几种方法处理

    1. 手动移除出共线性的变量
      先做下相关分析,如果发现某两个自变量X(解释变量)的相关系数值大于0.7,则移除掉一个自变量(解释变量),然后再做回归分析。此方法是最直接的方法,但有的时候我们不希望把某个自变量从模型中剔除,这样就要考虑使用其他方法。
    2. 逐步回归法
      让系统自动进行自变量的选择剔除,使用逐步回归分析将共线性的自变量自动剔除出去。此种解决办法有个问题是,可能算法会剔除掉本不想剔除的自变量,如果有此类情况产生,此时最好是使用岭回归进行分析。
    3. 增加样本容量
      增加样本容量是解释共线性问题的一种办法,但在实际操作中可能并不太适合,原因是样本量的收集需要成本时间等。
    4. 岭回归
      上述第1和第2种解决办法在实际研究中使用较多,但问题在于,如果实际研究中并不想剔除掉某些自变量,某些自变量很重要,不能剔除。此时可能只有岭回归最为适合了。岭回归可以减小参数估计量的方差,是当前解决共线性问题最有效的解释办法。

    岭回归是一种改良的最小二乘法,其通过放弃最小二乘法的无偏性,以损失部分信息为代价来寻找效果稍差但回归系数更符合实际情况的模型方程。针对共线性的病态数据,岭回归的耐受性远强于普通线性最小二乘法回归。

    其他方法:

    • 对模型施加某些约束条件

    • 将模型适当变形

    • 差分法
      时间序列数据、线性模型:将原模型变换为差分模型。

    • 主成分分析(PCA)

    • 简单相关系数检验法

    • 变量聚类、方差膨胀因子vif、相关系数、L1 L2正则化:在特征比较多的时候,先变量聚类,每类中选择单特征比较强的,也可以根据1-r²小的选择有代表性的特征(r²表示的是其他变量能否线性解释的部分,1-r²表示的是容忍度,也就是其他变量不能解释的部分;变量聚类是多选一,因此需要选择一个具有代表性的变量,选择容忍度小的变量;另vif就是容忍度的倒数); 在变量聚类的步骤中也可以结合 方差膨胀因子、相关系数以及业务理解来筛选特征; vif选择多少合适(一般样本集在10w以上VIF>10就有严重的共线性问题了,样本集在10w以下,VIF>5也是严重的共线性问题。在小样本时,一般保证在2以下。当然,这也不能保证一定排除了,最后在检验下模型参数,判断是否仍旧存在共线性)

      检验模型参数

      • 看模型系数,和实际业务是否相符合。(注:在进行完证据权重转化后,系数正负,不在具有实际的业务意义。当woe是好客户占比/坏客户占比时,系数都为负,反之系数都为正。(相关原因可以公式推导))
      • 模型R^2较高,通过F检验,系数不能通过t检验

    7、其他说明

    1. 多重共线性是普遍存在的,轻微的多重共线性问题可不采取措施,如果VIF值大于10说明共线性很严重,这种情况需要处理,如果VIF值在5以下不需要处理,如果VIF介于5~10之间视情况而定
    2. 如果模型仅用于预测,则只要拟合程度好,可不处理多重共线性问题,存在多重共线性的模型用于预测时,往往不影响预测结果。(这个“往往不影响预测结果”结论小编自己觉得前提条件“拟合程度好”很重要,小编觉得可能还是有些许影响的,有查到一些论文《多重共线性的检验及对预测目标影响程度的定量分析
      在这里插入图片描述 3. 解释变量理论上的高度相关与观测值高度相关没有必然关系,有可能两个解释变量理论上高度相关,但观测值未必高度相关,反之亦然。所以多重共线性本质上是数据问题
    3. 严重的多重共线性问题,一般可根据经验或通过分析回归结果发现。如影响系数符号,重要的解释变量t值(对回归参数的显著性检验值)很低。要根据不同情况采取必要措施。

    8、多重共线性识别-python代码

    8.1、vif检验

    目前业界检验共线性最常用的方法是VIF检验。VIF越高,多重共线性的影响越严重。

    两种方式,一种方式是直接掉包(https://zhuanlan.zhihu.com/p/56793236?utm_source=qq),另一种方式是自己写的函数,两个结果一致。

    import pandas as pd
    import numpy as np
    #数据
    df = pd.DataFrame([[15.9,16.4,19,19.1,18.8,20.4,22.7,26.5,28.1,27.6,26.3]
                         ,[149.3,161.2,171.5,175.5,180.8,190.7,202.1,212.1,226.1,231.9,239]
                         ,[4.2,4.1,3.1,3.1,1.1,2.2,2.1,5.6,5,5.1,0.7]
                         ,[108.1,114.8,123.2,126.9,132.1,137.7,146,154.1,162.3,164.3,167.6]]).T
    columns = ["var1","var2","var3","var4"]
    df.columns=columns
    
    
    #方式1:直接调包
    #def_function
    def calulate_vif(X):
        from statsmodels.stats.outliers_influence import variance_inflation_factor
        #✨✨✨务必注意✨✨✨,一定要加上常数项,#如果没有常数项列,计算结果天差地别,可能VIF等于好几千
        X[X.shape[1]]=1
        #vif
        vif=[]
        for i in range(X.shape[1]-1):
            #计算第i+1个变量的(第i+1列)的方差膨胀因子
            vif.append(variance_inflation_factor(X.values,i))
        #result_out
        yy=pd.DataFrame(X.columns[:-1,])
        yy.rename(columns={0:"var_name"},inplace=True) 
        yy["vif"]=vif
        print(yy)
    
    #call
    calulate_vif(df[["var1","var2","var3","var4"]])
    
    
    #函数2:自定义函数,结果与调包的结果一致
    #def_function
    def calulate_vif2(x_data):
        var_name=pd.DataFrame(x_data.columns)
        var_name.rename(columns={0:"var_name"},inplace=True)
        vif=[]
        for i in range(x_data.shape[1]):
            y=x_data.loc[:,x_data.columns[i]] 
            y.values.reshape(-1,1)    
            x=x_data.drop([x_data.columns[i]],axis=1)   
            x.values.reshape(-1,1)
    
            model=linear.fit(x,y)
            R_2=linear.score(x,y)
            vif_re=1/(1-R_2)
            vif.append(vif_re)
        var_name["vif"]=vif
        print(var_name)
    
    #call
    calulate_vif2(df[["var1","var2","var3","var4"]])
    

    8.2 相关系数

    #生成数据集
    df = pd.DataFrame([[15.9,16.4,19,19.1,18.8,20.4,22.7,26.5,28.1,27.6,26.3]
                         ,[149.3,161.2,171.5,175.5,180.8,190.7,202.1,212.1,226.1,231.9,239]
                         ,[4.2,4.1,3.1,3.1,1.1,2.2,2.1,5.6,5,5.1,0.7]
                         ,[108.1,114.8,123.2,126.9,132.1,137.7,146,154.1,162.3,164.3,167.6]]).T
    columns = ["var1","var2","var3","var4"]
    df.columns=columns
    
    
    def calulate_cor(cor_data):
        # calculate pearson cor
        coefficient1 =cor_data.corr(method = 'pearson')
        print(coefficient1)
        # Plot
        plt.figure(figsize=(12,10), dpi= 80)
        sns.heatmap(cor_data.corr(), xticklabels=cor_data.corr().columns, yticklabels=cor_data.corr().columns, cmap='RdYlGn', center=0, annot=True)
        # Decorations
        plt.title('Correlogram of mtcars', fontsize=22)
        plt.xticks(fontsize=12)
        plt.yticks(fontsize=12)
        plt.show()
        
    calulate_cor(df[["var1","var2","var3","var4"]])
    

    输出结果为:在这里插入图片描述

    8.3 聚类

    可能不是很好用

    #生成数据集
    df = pd.DataFrame([[15.9,16.4,19,19.1,18.8,20.4,22.7,26.5,28.1,27.6,26.3]
                         ,[149.3,161.2,171.5,175.5,180.8,190.7,202.1,212.1,226.1,231.9,239]
                         ,[4.2,4.1,3.1,3.1,1.1,2.2,2.1,5.6,5,5.1,0.7]
                         ,[108.1,114.8,123.2,126.9,132.1,137.7,146,154.1,162.3,164.3,167.6]]).T
    columns = ["var1","var2","var3","var4"]
    df.columns=columns
    
    #方式一:
    def var_cluster(clusterNum,cluster_data):
        from scipy.cluster.vq import vq,kmeans,whiten
        transed=whiten(np.array(cluster_data.T))  #归一化
        transed
        #cluster
        model = kmeans(transed,clusterNum)
        #cluster_result
        result = vq(transed,model[0])[0]
        result
        #result_out
        aa=pd.DataFrame(cluster_data.columns)
        aa.rename(columns={0:"var_name"},inplace=True)  
        bb=pd.DataFrame(result)
        bb.rename(columns={0:"cluster"},inplace=True)
        var_cluster=pd.concat([aa,bb],axis=1)
        var_cluster.sort_values(by=["cluster"],ascending=(True),inplace=True)
        print(var_cluster)
    
    #call   
    var_cluster(2,df[["var1","var2","var3","var4"]])
    
    
    #方式二:
    def var_cluster2(clusterNum,cluster_data):
        import numpy as np
        from sklearn.cluster import KMeans
    
        #array
        transed=np.array(cluster_data.T)
        #model_fit
        kmeans=KMeans(n_clusters=clusterNum).fit(transed)
        pred=kmeans.predict(transed)
        print(pred)
    
        #result_out
        aa=pd.DataFrame(cluster_data.columns)
        aa.rename(columns={0:"var_name"},inplace=True)  
        bb=pd.DataFrame(pred)
        bb.rename(columns={0:"cluster"},inplace=True)
    
        var_cluster=pd.concat([aa,bb],axis=1)
        var_cluster.sort_values(by=["cluster"],ascending=(True),inplace=True)
        print(var_cluster)
    
    #call 
    var_cluster2(2,df[["var1","var2","var3","var4"]])
    

    参考:

    • https://zhuanlan.zhihu.com/p/72722146
    • https://zhuanlan.zhihu.com/p/96793075
    • https://zhuanlan.zhihu.com/p/146298015

    9、宏观把握共线性问题

    参考:https://zhuanlan.zhihu.com/p/88025370

    9.1、共线性的一般性的影响

    太多相关度很高的特征并没有提供太多的信息量,并没有提高数据可以达到的上限,相反,数据集拥有更多的特征意味着更容易收到噪声的影响,更容易收到特征偏移的影响等等。

    简单举个例子

    N个特征全都不受到到内在或者外在因素干扰的概率为k,则2N个特征全部不受到内在或外在因素干扰的概率必然远小于k。这个问题实际上对于各类算法都存在着一定的不良影响。

    9.2、共线性对线性回归、逻辑回归的影响

    逻辑回归的梯度更新公式用代码表示为:

    weights = weights - alpha * dataMatrix.transpose()* error
    

    其中alpha为学习率,dataMatrix.transpose()为原始数据的矩阵,error=y_pred-y_true

    从这里可以看出,共线性问题对于逻辑回归损失函数的最优化没影响,参数都是一样更新,一样更新到收敛为止。所以对于预测来说没什么影响。

    那共线性会引发的问题

    1. 模型参数估计不准确,有时甚至会出现回归系数的符号与实际情况完全相反的情况,比如逻辑上应该系数为正的特征系数 算出来为负;
    2. 本应该显著的自变量不显著,本不显著的自变量却呈现出显著性(也就是说,无法从p-值的大小判断出变量是否显著——下面会给一个例子);
    3. 多重共线性使参数估计值的方差增大,模型参数不稳定,也就是每次训练得到的权重系数差异都比较大

    其实多重共线性这样理解会简单很多:

    > 假设原始的线性回归公式为:y=w1*x1+w2*x2+w3*x3
    > 训练完毕的线性回归公式为:y=5x1+7x2+10x3
    > 此时加入一个新特征x4,假设x4和x3高度相关,x4=2x3,则:
    > y=w1*x1+w2*x2+w3*x3+w4*x4=w1*x1+w2*x2+(w3+2w4)*x3
    > 因为我们之前拟合出来的最优的回归方程为:y=5x1+7x2+10x3
    > 显然w3+2w4可以合并成一个新的权重稀疏 w5,则:y=w1*x1+w2*x2+w5*x3
    > 显然:y=w1*x1+w2*x2+w3*x3和y=w1*x1+w2*x2+w5*x3是等价的。
    > 那么最终最优的模型应该也是 y=5x1+7x2+10x3
    > 但是考虑到引入了x4,所以w4和w3的权重是分开计算出来的,这就导致了w5=10=w3+2w4,
    > 显然这个方程有无穷多的解,比如w3=4,w4=3,或者w4=-1,w3=12等,
    > 因此导致了模型系数估计的不稳定并且可能会出现负系数的问题。
    

    10、statsmodel库

    statsmodels(http://www.statsmodels.org)是一个Python库,用于拟合多种统计模型,执行统计测试以及数据探索和可视化。statsmodels包含更多的“经典”频率学派统计方法。

    总结:https://blog.csdn.net/zm147451753/article/details/83107535

    statsmodel的检验项目比较全面,实际上逻辑回归与线性回归比我们想象的要复杂。

    DF Residuals:残差的自由度

    等于 观测数也就是样本数(No. Observations)-参数数目(Df Model+1(常量参数,权重加上偏置的数量))

    Df Model:模型参数个数(不包含常量参数)

    R-squared:可决系数

    R 2 = 1 − ∑ i ( y ^ i − y i ) 2 ∑ i ( y ^ i − y i ) 2 R^{2}=1-\frac{\sum_{i}\left(\hat{y}_{i}-y_{i}\right)^{2}}{\sum_{i}\left(\hat{y}_{i}-y_{i}\right)^{2}} R2=1i(y^iyi)2i(y^iyi)2

    上面分子就是我们训练出的模型预测的所有误差。
    下面分母就是不管什么我们猜的结果就是y的平均数。(瞎猜的误差)

    adj-R-squared:修正可决系数

    R a d j 2 = 1 − ( n − 1 ) ( 1 − R 2 ) n − p − 1 R_{a d j}^{2}=1-\frac{(n-1)\left(1-R^{2}\right)}{n-p-1} Radj2=1np1(n1)(1R2)

    右边式子的R就是原始的R-sqaure,n是样本数量,p是特征的数量。

    在这里插入图片描述

    展开全文
  • 特征共线性

    千次阅读 2018-07-31 21:29:00
    多重共线性是指自变量之间存在一定程度的线性相关,会给变量对模型的贡献性带来影响。即若有两个变量存在共线性,在相互作用计算后,其一的变量的影响会相对减弱,而另一个变量的作用却会相对增强。 2.产生原因: ...
  • 给出了一般有限域上广义Bent函数一个较弱的定义,并考虑了它和完全线性函数的关系。证明了n元q值逻辑函数f是GF(q)上的完全线性函数当且仅当对任意的β∈GF(q)*,βf是GF(q)上的广义Bent函数,同时说明了已...
  • 多重线性(Multicollinearity)是指线性回归模型中的解释变量之间由于存在精确...(完全的线性表示,此方法能作为判别是否有线性的标准,因为有可能存在线性但不是完全线性相关) 2.也可以计算条件数kapp
  • 多元线性回归中多重共线性Linear Regression is one of the simplest and most widely used algorithms for Supervised machine learning problems where the output is a numerical quantitative variable and the ...
  • 为了研究系数矩阵是m×n模糊矩阵、右端向量是任意一个模糊向量的完全模糊线性系统(FFLS)的求解问题,利用结构元生成模糊数的限定运算方法,把对m×n的完全模糊线性系统的求解问题转换成求两个分明的线性系统解的问题,...
  • 回归分析中的多重共线性问题

    万次阅读 2016-12-10 10:52:22
    最近做回归分析,出现了相关系数与回归方程系数符号相反的问题,经过研究,确认是多重共线性问题并探索了解决方法。在此将多重共线性的相关知识整理如下。解释变量理论上的高度相关与观测值高度相关没有必然关系,有...
  • 基于二阶完全线性Boussinesq方程的波生流模拟,唐军,高超,首次将Kennedy的紊动模型引入一组色散性达到Padé(4,4)的二阶完全线性Boussinesq方程中,建立了基于完全线性Boussinesq方程的波生流数学�
  • 多重共线性诊断及处理

    千次阅读 2018-11-26 11:34:00
    完全共线性的情况并多见,一般出现的是在一定程度上的共线性,即近似共线性。 二. 目前常用的多重共线性诊断方法  1.自变量的相关系数矩阵R诊断法:研究变量的两两相关分析,如果自变量间的二元相关系数值很大...
  • 线性电路是指完全线性元件、独立源或线性受控源构成的电路。线性就是指输入输出之间关系可以用线性函数表示。
  • 特征共线性对模型的影响

    千次阅读 2020-07-16 09:24:24
    影响:当自变量之间存在共线性时,模型的参数会变得极其稳定,模型得预测能力会下降。很难确切区分每个自变量对因变量得影响,因此增加了对于模型结果得解释成本。 因此,在建模前期得变量得筛选环节,就需要采取...
  • 多重共线性与虚拟变量

    千次阅读 2016-12-20 08:35:04
    什么是多重共线性直接解答:2个或2个以上变量存在相关性。数学语言:存在 c1x1i+c2x2i+⋯+ckxki=0,i=1,2⋯,n c_1 x_{1i} + c_2 x_{2i} + \cdots + c_k x_{ki} = 0, i=1,2 \cdots, n 即其中一个变量可以由其他
  • 决策树随机森林的预测能力受多重共线性影响。 但是数据的解释性会被多重共线性影响。随机森林可以返回特征的重要性(importantce),当有多重共线性时,importance会被影响。一些具体多重共线性的特征的重要性会...
  • 完全模糊线性系统-A×-x=-b,...扩充了LR-模糊数的定义,讨论了完全模糊线性系统的模糊近似解非负模糊近似解,并应用矩阵的广义逆阵A-,讨论了广义完全模糊线性系统的模糊近似解非负模糊近似解。最后给出了具体算例。
  • 具有不完全转移概率的马尔可夫跳跃线性系统的量化反馈控制
  • 线性可分和线性不可分     首先大家不要直观理解线性可分就一定要是一条直线,线性可分指的是可以用一个线性函数将两类样本分开(注意这里是线性函数),比如在二维空间中的直线,三位空间中的...
  • 若存在多重共线性,计算自变量的偏回归系数β时,矩阵可逆,导致β存在无穷多个解或无解。 而在使用多元线性回归构建模型过程中,变量之间存在多重共线性问题也是比较常见的。那么当发现多重线性回归模型中存在...
  • 当回归模型中两个或两个以上的自变量彼此相关时,则称回归模型中存在多重共线性,也就是说共线性的自变量提供了重复的信息。 那么这种多重共线性会有什么不好的影响吗?答案是会的,而且影响非常不好。总结一下就是...
  • 多重共线性处理方法

    千次阅读 2020-01-06 15:36:10
    1.多重共线性 自变量(解释变量)之间彼此相关的现象,我们称这种现象为多重共线性。 2.解决方法 手动移除出共线性的变量 先做下相关分析,如果发现某两个自变量X(解释变量)的相关系数值大于0.7,则移除掉一个自...
  • 多重共线性:一个变量可以由其他变量求出,例如,学生的总成绩可以由各科成绩求出。 ① 度量多重共线性严重程度的一个重要指标是矩阵的条件数,可以由函数kappa()求出。在R中,函数kappa()计算矩阵的条件数。 注意...
  • 基于二阶完全线性Boussinesq水波方程的波浪破碎数学模型,房克照,邹志利,建立了基于高阶Boussinesq水波方程的一维波浪破碎数值模型。将文献[1]中具有弱非线性特征的Boussinesq水波方程扩展到具有完全线性特征...
  • 特征共线性问题分析

    千次阅读 2017-07-31 13:51:36
    多重共线性是指自变量之间存在一定程度的线性相关,会给变量对模型的贡献性带来影响。即若有两个变量存在共线性,在相互作用计算后,其一的变量的影响会相对减弱,而另一个变量的作用却会相对增强。 2.产生原因: ...
  • 为了研究系数矩阵是m ×n模糊矩阵、右端向量是任意一个模糊向量的完全模糊线性系统( FFLS)的求解问题,利用结构元生成模糊数的限定运算方法,把对m×n的完全模糊线性系统的求解问题转换成求两个分明的线性系统解的问题...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 254,183
精华内容 101,673
关键字:

完全共线性和不完全共线性