python – 为什么sklearn线性回归对通过(0,0)的直线给出非零截距?
作者:互联网
给定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使用来自LAPACK的gelss来找到Ax = b的最小二乘解,
> gelss使用A的奇异值分解来解决.
我猜想gelss是引入一点点错误的地方.
标签:python,scikit-learn,linear-regression 来源: https://codeday.me/bug/20190829/1761720.html