sklearn/statsmodels 奇异协方差矩阵下普通最小二乘的结果
Posted
技术标签:
【中文标题】sklearn/statsmodels 奇异协方差矩阵下普通最小二乘的结果【英文标题】:Results of sklearn/statsmodels ordinary least squares under singular covariance matrix 【发布时间】:2021-04-26 21:22:33 【问题描述】:当使用sklearn.linear_model.LinearRegression
或statsmodels.regression.linear_model.OLS
计算普通最小二乘回归时,当协方差矩阵完全为奇异时,它们似乎不会引发任何错误。看起来他们在幕后使用 Moore-Penrose 伪逆而不是通常的逆,这在奇异协方差矩阵下是不可能的。
那么问题是双重的:
这个设计的意义何在?无论协方差矩阵是否奇异,在什么情况下计算 OLS 被认为是有用的?
那么它作为系数输出什么?据我了解,由于协方差矩阵是奇异的,因此通过伪逆将有无限个(在比例常数的意义上)解。
【问题讨论】:
【参考方案1】:确实如此。如您所见here
sklearn.linear_model.LinearRegression
基于 scipy.linalg.lstsq
或 scipy.optimize.nnls
,后者又通过 SVD 分解计算特征矩阵的伪逆(它们不利用正态方程 - 你会遇到上述问题 - 因为它的效率较低)。此外,观察每个sklearn.linear_model.LinearRegression
的实例将特征矩阵的奇异值返回到singular_
属性中,并将其秩返回到rank_
属性中。
类似的论点适用于statsmodels.regression.linear_model.OLS
,其中RegressionModel
类的fit()
方法使用以下内容:
拟合方法使用设计/外生变量的伪逆来求解最小二乘最小化。
(参考here)。
【讨论】:
【参考方案2】:两个相关的问题和答案
Differences in Linear Regression in R and Python
Statsmodels with partly identified model
To 1) 在什么情况下,不管协方差矩阵是否奇异,计算 OLS 是有用的?
即使某些参数没有被无限可能解中的“任意”唯一解识别和挑选,但一些结果统计不受非识别影响,主要是可估计的线性组合、预测和 r-平方。
即使不是所有参数都被单独识别,也会识别出一些参数的线性组合。例如,我们仍然可以测试单向分类变量中的所有均值是否相等。即使在奇点情况下,这些也是可估计的函数,这是 statsmodels 从其前身包继承pinv
行为的原因。但是,statsmodels 没有从参数估计的奇异协方差矩阵中识别estimable functions
的函数。
我们对解释变量的任何值都有一个独特的预测,如果完美的共线性仍然存在,这仍然是有用的。
诸如 Rsquared 之类的一些汇总和推理统计数据与选择唯一参数的方式无关。这有时很方便,例如,在诊断和规格测试中,LM-test 可以从 rsquared 计算出来。
至 2) 那么它作为系数输出什么?
Moore-Penrose 逆估计的参数可以解释为对称惩罚或正则化估计。当我们有岭回归并且惩罚权重变为零时,摩尔-彭罗斯解决方案也得到了。 (我不记得我在哪里读到的。)
此外,在某些采用奇异设计的情况下,不确定性仅影响某些参数。尽管我们在推断这些参数时必须小心谨慎,但其他参数仍可能被完全共线部分识别且不受影响。
一个软件包基本上有 3 个选项来处理单个案例
引发异常并拒绝计算任何内容 删除一些变量,问题是要删除哪些变量 切换到包含广义逆的惩罚解决方案statsmodels 选择 3 主要是因为变量的对称处理。 R 和 Stata 在许多模型中选择了 2(我认为很难预测哪个变量会丢失)。
对称处理的一个原因是它可以更容易地比较多个数据集的相同回归,如果在使用案例 2 时不总是删除相同的变量,这将更加困难。
【讨论】:
【参考方案3】:我注意到同样的事情,似乎 sklearn 和 statsmodel 非常健壮,有点过于健壮,让你想知道如何解释结果。猜测仍然需要建模者进行尽职调查以识别变量之间的任何共线性并消除不必要的变量。有趣的 sklearn 甚至不会给你 pvalue,这是这些回归中最重要的衡量标准。玩变量时,系数会发生变化,这就是为什么我更关注pvalues。
【讨论】:
以上是关于sklearn/statsmodels 奇异协方差矩阵下普通最小二乘的结果的主要内容,如果未能解决你的问题,请参考以下文章
通俗易懂的机器学习——维度的诅咒(深入浅出表述机器学习降维的数学概念与实践)