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

使用sklearn LinearRegression拟合多元线性回归时a0系数异常问题排查

问题原因与解决方法

你的问题出在sklearn的LinearRegression默认会自动拟合截距项(也就是你要的a0),但你手动在特征矩阵X里加入了全1的x0列,这就造成了多重共线性——模型识别到x0和默认的截距项完全线性相关,所以把x0的系数强制设为0,而真正的a0其实存在模型的intercept_属性里。

两种修正方案

方案一:移除手动添加的x0列(推荐)

让模型自动处理截距,只传入x1和x2作为特征:

import pandas
from sklearn import linear_model

df = pandas.read_csv("multi_regress.csv")
# 只取x1和x2作为特征,去掉x0
X = df[['x1', 'x2']]
y = df['y']
regr = linear_model.LinearRegression()
regr.fit(X,y)
# a0是截距项
print("a0 =", regr.intercept_)
# a1和a2是系数数组的两个元素
print("a1 =", regr.coef_[0])
print("a2 =", regr.coef_[1])

运行后会得到和你手动计算一致的结果:a0≈3.7148,a1≈1.1013,a2≈1.8517。

方案二:关闭自动拟合截距

如果你非要保留手动添加的x0列,可以初始化模型时设置fit_intercept=False,告诉模型不要自动添加截距:

import pandas
from sklearn import linear_model

df = pandas.read_csv("multi_regress.csv")
X = df[['x0', 'x1', 'x2']]
y = df['y']
# 关闭自动拟合截距
regr = linear_model.LinearRegression(fit_intercept=False)
regr.fit(X,y)
# 此时coef_的第一个元素就是a0,后面是a1、a2
print(regr.coef_)

输出会和你手动计算的结果完全匹配:[3.71481481 1.10129032 1.8516129 ]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 20:35:23