You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

sklearn linear_model拟合水平线数据得到非零斜率的问题排查

问题

使用sklearn的linear_model.LinearRegression拟合一组y值全为0.17的水平线数据,模型返回的斜率却不是0,而是[-3.06072077e-32],代码如下:

import numpy as np
from sklearn import linear_model

reg = linear_model.LinearRegression()
X=[[733803], [733831], [733862], [733892], [733923], [733953], [733984], [734015], [734045], [734076], [734106], [734137], [734168], [734196]]
y=[0.17,0.17,0.17,0.17,0.17,0.17,0.17,0.17,0.17,0.17,0.17,0.17,0.17,0.17]
reg.fit(X,y)
print(reg.coef_)

预期斜率应为0,但实际返回上述极小值。绘图代码及结果如下:

plt.scatter(X, y,color='g')
plt.plot(X, reg.predict(X),color='k')
plt.show()

水平线拟合结果

解答

这是浮点数数值计算的精度误差导致的,并非代码逻辑问题:

  • 当所有y值完全相同时,理论最优拟合斜率确实是0,但sklearn线性回归底层采用矩阵运算求解,浮点数在计算机存储和计算过程中存在微小精度损耗,最终得到一个无限趋近于0的极小值(-3.06e-32属于可忽略的数值噪声量级)。
  • 可以验证模型截距reg.intercept_,其值会非常接近0.17;同时用模型预测X的结果也会与0.17几乎完全一致,说明模型已正确拟合水平线。
  • 若需要严格将这类极小值视为0,可手动添加阈值判断,例如当系数绝对值小于1e-10时,直接认定为0。

内容的提问来源于stack exchange,提问作者storeguy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 09:10:23