2017-08-03 36 views
-1

的平方残差之和我正在使用sklearn.linear_model.LinearRegression并希望计算我的系数的标准误差。据我所知,sklearn不包含这样做的函数,所以我需要手动计算它们(有关线性回归系数估计的标准误差示例,请参阅https://en.wikipedia.org/wiki/Ordinary_least_squares)。sklearn.linear_model.LinearRegression

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

residues_:array,shape(n_targets,)或(1,)或空。 总和 残差。在 期间通过的每个目标的平方欧几里德2-范数。如果线性回归问题未被确定(训练矩阵的线性无关行数 小于其线性无关列的数目 ),则这是一个空数组。如果 在拟合过程中传递的目标矢量是1维的,这是一个 (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

如果你认为这是一个错误,你可以将它发布在他们的[github问题页面](https://github.com/scikit-learn/scikit-learn/issues)上。如果你是对的,那么他们会纠正这个错误,如果你不是这样,你仍然可以获得关于为什么这样写(或执行)的信息。 –

+0

@VivekKumar感谢您的链接,我会这样做。 – Adrian

+0

发表于https://github.com/scikit-learn/scikit-learn/issues/9491 – Adrian

回答

0

将残余物直接从scipy.linalg.lstsq采取::

残基:我可以用一个简单的例子确认我的怀疑()或(1)或( K,)ndarray 残差的和,b-a x中每列的平方2-范数。如果矩阵a的秩为< N或> M,或者使用'gelsy',则这是一个空阵列。如果b是一维的,这是一个(1,)形阵列,否则形状是(K,)。

所以你似乎是对的。

也就是说,self.residues_自#5452(2015年10月合并)已被弃用,并将在v0.19(即将发布)中删除。 正如你在你的代码片段中所显示的那样,你可以轻松地计算出它们。