python - 为什么 sklearn 线性回归对通过 (0,0) 的直线给出非零截距?

标签 python scikit-learn linear-regression

给定一条线 y = 3x 的一些数据点:

from sklearn import datasets, linear_model
X = [[1],[2],[3],[4],[5]]
y = [[3],[6],[9],[12],[15]]
regr = linear_model.LinearRegression()
regr.fit(X,y)

然后:

regr.predict([[6], [7], [8], [9], [10]])

如预期的那样给出:

array([[ 18.],
       [ 21.],
       [ 24.],
       [ 27.],
       [ 30.]])

regr.coef_ 是 3,正如预期的那样。但为什么 regr.intercept_ 不是 0?

regr.intercept_
array([ -3.55271368e-15])

最佳答案

这是一个 float 问题——数字非常接近于 0。您可以使用 numpy 的内置测试套件来检查

>>> from numpy.testing import assert_almost_equal
>>> assert_almost_equal(regr.intercept_, 0)

要回答为什么数字不为零,您可以进入以下兔子洞:

  • sklearn 使用 scipy.linalg.lstsq 来拟合线性回归,
  • scipy.linalg.lstsq 使用 LAPACK 中的 gelss 找到 Ax = b 的最小二乘解,
  • gelss使用A的奇异值分解来求解。

我猜 gelss 是引入微小错误的地方。

关于python - 为什么 sklearn 线性回归对通过 (0,0) 的直线给出非零截距?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34005479/

相关文章:

python - Sklearn 预处理 - PolynomialFeatures - 如何保留输出数组/数据帧的列名/标题

python - python 中的分布图

python - PhantomJS 不返回页面源

python - 播放视频基本

python - 如何捕获python异常并将回溯文本保存为字符串

python - 类型错误 : KMeans() got an unexpected keyword argument 'n_clusters'

python - scikit-learn 或 statsmodels 中线性回归调整参数的限制范围

python - 在 pygame 中翻转 Sprite

python - 为什么这条线性回归线不是直线?

python - 如何从代码中删除 RunTimeWarning 错误?