sklearn.linear_model.LinearRegression的残差平方和

时间:2017-08-03 18:04:43

标签: python scikit-learn linear-regression

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

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

  

residue_:array,shape(n_targets,)或(1,)或为空。 总和   残差即可。平方欧几里德2范数为每个目标在期间通过   适合。如果线性回归问题不确定(数字   线性独立的训练矩阵行小于其   线性独立列的数量),这是一个空数组。如果   在拟合期间传递的目标向量是1维的,这是a   (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

1 个答案:

答案 0 :(得分:1)

残留物直接取自scipy.linalg.lstsq

  

残留 :()或(1,)或(K,)ndarray   残差总和,b - a x中每列的平方2范数。如果矩阵a的等级是< N或> M,或者' gelsy'使用,这是一个空数组。如果b是1-D,则这是(1,)形状数组,否则形状为(K,)。

所以你似乎是对的。

话虽如此,self.residues_自#5452(2015年10月合并)后被弃用,并将在v0.19中删除(即将发布)。 正如您在代码段中所示,无论如何都可以轻松地计算它们。