【问题标题】:Sum of squared residuals for sklearn.linear_model.LinearRegressionsklearn.linear_model.LinearRegression 的残差平方和
【发布时间】:2018-01-11 11:48:23
【问题描述】:

我正在使用 sklearn.linear_model.LinearRegression 并想计算我的系数的标准误差。据我所知,sklearn 不包含执行此操作的函数,因此我需要手动计算它们(参见https://en.wikipedia.org/wiki/Ordinary_least_squares,了解线性回归系数估计的标准误差示例)。

我正在使用我的线性回归的残差属性来获得残差平方和。我的问题是关于http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html 的文档,它将_residues 定义为:

residues_ : 数组、形状 (n_targets,) 或 (1,) 或空。 总和 残差。每个目标通过的欧几里得 2 范数平方 合身。如果线性回归问题是欠定的(数 训练矩阵的线性独立行数小于其 线性独立列的数量),这是一个空数组。如果 在拟合期间传递的目标向量是一维的,这是一个 (1,) 形状数组。

“残差总和”是文档中的错误吗?我认为它应该说“残差平方和”。 (对于线性回归,训练数据上的残差总和始终为零,如果它包含一个常数:请参阅https://stats.stackexchange.com/questions/194523/why-does-the-sum-of-residuals-equal-0-from-a-graphical-perspective。此外,文档中的以下句子说“平方欧几里得 2 范数”,它是方格。)如果文档确实有误,我该如何更正?

编辑:我可以用一个简单的例子来证实我的怀疑:

import numpy as np
from sklearn import linear_model

n_obs = 5
X = np.ones((n_obs, 1), dtype=float)
X[3] = 7.0
y = np.ones((n_obs, ))
y[1] = 10.0
y[3] = 9.0
model = linear_model.LinearRegression(fit_intercept=True, normalize=False, copy_X=True, n_jobs=1)

np.isclose(np.sum(np.power(y - model.predict(X=X), 2)), model.residues_)  # True

【问题讨论】:

  • 如果您认为这是一个错误,您可以将其发布到他们的github issues page。如果你是正确的,那么他们会更正错误,如果你不是,你仍然可以获得关于为什么这样编写(或实现)的信息。
  • @VivekKumar 谢谢你的链接,我会这样做的。

标签: python scikit-learn linear-regression


【解决方案1】:

残基直接取自scipy.linalg.lstsq:

残基 : () or (1,) or (K,) ndarray b - a x 中每列的残差总和,平方 2 范数。如果矩阵 a 的秩为 M,或者使用了“gelsy”,则这是一个空数组。如果 b 是一维的,这是一个 (1,) 形状数组,否则形状是 (K,)。

看来你是对的。

话虽如此,self.residues_ 自 #5452(2015 年 10 月合并)以来已被弃用,并将在 v0.19(即将发布)中删除。 正如您在 sn-p 中显示的那样,无论如何您都可以轻松计算它们。

【讨论】:

    猜你喜欢
    • 2016-05-04
    • 1970-01-01
    • 2018-04-30
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多