写在前面
线性回归详解mp.weixin.qq.com上篇文章详细介绍了线性回归分析方程、损失方程及求解、模型评估指标等内容,其中在推导多元线性回归使用最小二乘法的求解原理时,对损失函数求导得到参数向量
上式中有解,即能够得到最后一步的前提条件是
本文将详细介绍线性回归中多重共线性问题及解决。 主要详细介绍两种线性回归的缩减
(shrinkage)方法的基础知识:岭回归
(Ridge Regression)和 LASSO
(Least Absolute Shrinkage and Selection Operator) 并对其进行了Python实现。
本文将详细介绍线性回归中多重共线性问题,以及一种线性回归的缩减
(shrinkage)方法 ----岭回归
(Ridge Regression),并对其进行了Python实现。
多重共线性
多重共线性是指线性回归模型中的解释变量之间由于存在精确相关关系或高度相关关系而使模型估计失真或难以估计准确。
从线性等式理解,对于
那么通常称这
处理多重共线性方法有多种,其中最直接的方法是手动移除共线性的变量。具体做法是先对数据进行相关分析,若两个特征的相关系数大于某特定值(一般为0.7),则手动移除其中一个特征,再继续做回归分析。这种做法会导致估计结果产生偏差,会引起遗漏变量问题。而且有时数据特征本来就很少,或并不想直接删除特征,此时可考虑其他更加有效的方法。
改进线性回归即是当前解决多重共线性问题的最有效的方法,下面从矩阵的角度介绍多重共线性将究竟如何影响对损失函数求解,以便更加深刻理解改进原理。
逆矩阵存在的充要条件
逆矩阵计算公式
其中
即存在逆矩阵的充要条件为不能为0。这是使用最小二乘法来求解线性回归的核心条件之一。行列式与矩阵矩阵
(matrix)是一组数按照一定方式排列的数表,它不能从整体上被看成一个数(只有一个数的1阶矩阵除外),记为
在线性代数中,行列式
(determinant)是一个函数,它将每个矩阵对应到一个纯量(scalar),简单讲即是行列式是这一组数按照某种运算法则计算出的一个数,记为或
行列式不为零的充要条件
假设特征矩阵
一般行列式计算不会通过展开的方式,而是通过行列初等行变换/列变换将其整合成一个梯形的行列式
由于梯形行列式下半部分为0,整个矩阵的行列式其实就是梯形行列式对角线上的元素相乘。
由此可见,如果对角线上的任一个元素为0,则行列式结果即为0。反之,如果对角线上的任一元素均不为0,则行列式不为0。
矩阵满秩是矩阵的行列式不为0的充分必要条件。 满秩矩阵
一个结构为的矩阵,若转换为梯形矩阵后,没有任何全为0的行或者全为0的列,则称为满秩矩阵。简单来说,只要对角线上没有一个元素为0,则这个矩阵中绝对不可能存在全为0的行或列。
矩阵满秩的充要条件
精确相关关系
即完全相关,矩阵两行之间或两列之间存在完全线性关系,这种精确相关关系会使得矩阵的行列式为0,则矩阵的逆矩阵不存在。在最小二乘法中,如果矩阵
即
高度相关关系
即不完全相关,这种高度相关关系下,矩阵的行列式不为0,但是一个非常接近0的数,矩阵的逆是存在的,但接近无限大,直接影响参数向量求解。
这种情况下,结果参数向量
精确相关关系和高度相关关系并称"多重共线性"。
矩阵行与行或列于列之间相互独立,其矩阵的行列式经初等变换后的对角线上没有任何元素特别接近于0,因此矩阵求得的参数向量不会对模型产生影响,对拟合结果也是较理想的。
由此可见,一个矩阵如果要满秩,则要求矩阵中每个向量之间不能存在多重共线性,这也构成了线性回归算法对于特征矩阵的要求。
多重共线性与相关性
多重共线性(Multicollinearity)是一种统计现象,是指线性模型中的特征(解释变量)之间由于存在精确相关关系或高度相关关系, 多重共线性的存在会使模型无法建立,或者估计失真。多重共线性使用指标 方差膨胀因子(variance inflation factor,VIF)来进行衡量(from statsmodels.stats.outliers_influence import variance_inflation_factor
), 通常当我们提到"共线性",都特指多重共线性。
相关性(Correlation)是衡量两个或多个变量一起波动的程度的指标,它可以是正的,负的或者0。一般而言,变量之间具有相关性,通常是指线性相关性,线性相关一般由 皮尔逊相关系数进行衡量,非线性相关可以使用 斯皮尔曼相关系数或者 互信息法进行衡量。此部分可参见数据探索分析。
多重共线性对回归模型的影响
回归系数的估计值方差变大,回归系数的置信度变宽,估计的精确性大幅度降低,使得估计值稳定性变差。
会使得一些回归系数通不过显著性检验,回归系数的正负号也可能出现倒置,使得回归方程无法得到合理的解释,直接影响最小二乘法的计算结果。
多重共线性如果存在,则线性回归就无法使用最小二乘法来进行求解,或者求解就会出现偏差。不能存在多重共线性,不代表不能存在相关性——机器学习不要求特征之间必须独立,必须不相关,只要不是高度相关或者精确相关就好。
改进线性回归处理多重共线性
岭回归
岭回归分析(Ridge Regression)是一种改良的最小二乘法,其通过放弃最小二乘法的无偏性,以损失部分信息为代价来寻找效果稍差但回归系数更符合实际情况的模型方程。该模型求解的回归模型的损失函数为线性最小二乘函数,正则化采用l2-范数
。也称为岭回归(Ridge Regression)或吉洪诺夫正则化(Tikhonov regularization)。岭回归与套索回归(Lasso Regression)两个算法不是为了提升模型表现,而是为了修复漏洞而设计的。
岭回归原理和逻辑是将求解
L2-范式
(即系数
最小化目标函数:
假设我们的特征矩阵结构为(m,n)
,系数
(1,n)
,
(n,n)
单位矩阵则
最终得到
从而转化为只需
假设原本的特征矩阵存在共线性,即非满秩矩阵
最后得到的这个行列式还是一个梯形行列式,但已经不存在全0行或者全0列了,除非以下两种情况,否则矩阵
(1)
(2) 原本的矩阵存在对角线上元素为,且其他元素都为0的行或者列
以上两种情况,在sklearn
中都可以轻松应对:自由控制
其中
通过调整正则化系数
语法:
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 : {float, ndarray of shape (n_targets,)}, default=1.0
正则化参数,必须是正浮点数。正则化改善了问题的条件,降低了估计的方差。值越大表示正则化惩罚越强。对应于其它线性模型中的,如LogisticRegression或LinearSVC。如果传递了数组,则惩罚特定目标。
例:
>>> from sklearn.linear_model import Ridge
>>> import numpy as np
>>> n_samples, n_features = 10, 5
>>> rng = np.random.RandomState(0)
>>> y = rng.randn(n_samples)
>>> X = rng.randn(n_samples, n_features)
>>> clf = Ridge(alpha=1.0)
>>> clf.fit(X, y)
Ridge()
虽然岭回归和Lasso不是设计来提升模型表现,而是专注于解决多重共线性问题的,但当
案例
波士顿房价数据集中看岭回归处理多重共线性。
详细代码请参见文末原文。
输出结果
可以发现,比起加利佛尼亚房屋价值数据集,波士顿房价数据集的方差降低明显,偏差也降低明显,可见使用岭回归还是起到了一定的作用,模型的泛化能力是有可能会上升的。
选择最佳正则化系数
使用交叉验证类 RidgeCV
来选择最佳的正则化系数。
sklearn.linear_model.RidgeCV(alphas=(0.1, 1.0, 10.0), fit_intercept=True, normalize=False, scoring=None, cv=None, gcv_mode=None, store_cv_values=False)
重要参数即属性请参见文末原文
岭回归分析是一种用于存在多重共线性(自变量高度相关)数据的技术。在线性回归基础上增加L2
正则化项 。
除常数项以外,这种回归的假设与最小二乘回归类似;它收缩了相关系数的值,但没有达到零,这表明它没有特征选择功能,这是一个正则化方法,并且使用的是L2
正则化。
原文链接
线性回归中的多重共线性与岭回归mp.weixin.qq.com推荐阅读
机器学习 | 简单而强大的线性回归详解mp.weixin.qq.com 机器学习 | 深度理解Lasso回归分析mp.weixin.qq.com扫码关注《数据STUDIO》,更多干货知识分享等你来撩!