有没有一种方法可以强制Python进行截距为0的线性回归?

3

我有一个数据集,其中包括两列变量ageflexibility。下面的图显示了人们年龄和他们的身体柔韧性之间的相关性:

enter image description here

我正在尝试制作一个立方模型,其中柔韧性取决于年龄的立方。因此,我已经完成了以下步骤:

from sklearn.linear_model import LinearRegression

df["Age_cubed"] = df["Age"].pow(3)
X = df[["Age_cubed"]]
Y = df["Flexibility"]

model = linear_model.LinearRegression()
model.fit(X, Y)
r_sq = model.score(X, Y)

model.coef_  # 10.02
model.score(X, Y) # 0.93

现在对应的图表如下: enter image description here 该模型具有截距为0.034:
print(model.intercept_) # 0.034

有没有办法强制 Python 形成截距为 0 的上述线性回归模型?

这是scikit-learn吗? - ahiijny
@ahiijny 是的,from sklearn.linear_model import LinearRegression - plpm
2个回答

5

是的,如果您将fit_intercept的值设为False,则有一种方法:

model = linear_model.LinearRegression(fit_intercept=False)

然后当你打印出截距:

print(model.intercept_)

输出结果为:
0.0

-3

除非这条线是垂直的,否则必须存在一个截距。


这是不正确的。截距是在0处的值。没有截距意味着该直线必须通过(0,0)。 - xdurch0
如果该直线经过(0,0),则截距将为0,这与没有截距是不同的。 - Cadell
一个线性模型是 wx + b。没有截距意味着我们只有 wx。这与 b = 0 相同。 - xdurch0
错误的,截距是0,而不是无。类似于Null != 0,"没有截距" != "截距为0"。 - Cadell
1
这只是一个无意义的技术细节。很明显问题是在询问如何强制截距为0。 - xdurch0
2
在口语中,人们倾向于混用“0”和“none”/“nothing”。这或许是稍有些粗糙的术语表达,但我认为这就是OP的意思。也许从另一个角度来看,具有0截距的线性模型将在线性模型方程中没有“截距项”。另外无关的一点,我想起了一个笑话:“听说过一个数学家害怕负数吗?他们会不惜一切地避免碰到它们!” :-) - ahiijny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接