给定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])

最佳答案

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

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

要回答为什么数字不是零,可以进入以下兔子洞:
sklearn使用scipy.linalg.lstsq拟合线性回归,
scipy.linalg.lstsq使用gelssfromLAPACK找到Ax = b的最小二乘解,
gelss使用A的奇异值分解来求解。
我想gelss是引入微小错误的地方。

10-04 22:54