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

为何Linear Regression模型的y-intercept与图表显示值不一致?

线性回归截距计算值与图表显示值不符的原因

我用scikit-learn构建线性回归模型,输出的y截距为152.91886182616167,但matplotlib绘制的回归直线图表中,视觉上的“截距”仅约80,二者不匹配。相关代码、输出及图表如下:

代码

# Adapted from https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py

# Code source: Jaques Grobler
# License: BSD 3 clause

import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model
from sklearn.metrics import mean_squared_error, r2_score

diabetes_X, diabetes_y = datasets.load_diabetes(return_X_y = True)

diabetes_X = diabetes_X[:, np.newaxis, 2]   

diabetes_X_train = diabetes_X[:-20]
diabetes_X_test = diabetes_X[-20:]


diabetes_y_train = diabetes_y[:-20]
diabetes_y_test = diabetes_y[-20:]


regr = linear_model.LinearRegression()
regr.fit(diabetes_X_train, diabetes_y_train)

diabetes_y_pred = regr.predict(diabetes_X_test)

# The y-intercept
print("y-intercept: \n", regr.intercept_)

plt.scatter(diabetes_X_test, diabetes_y_test, color="black")
plt.plot(diabetes_X_test, diabetes_y_pred, color="blue", linewidth=3)
plt.xlabel('x')
plt.ylabel('y')

plt.show()

脚本输出

y-intercept: 
 152.91886182616167

图表

图表显示直线左端y值约为80


原因分析

  • 图表仅绘制了回归直线的局部片段:当前代码只绘制了测试集diabetes_X_test对应的回归预测值,而测试集的x取值范围不包含0(diabetes数据集的特征已做标准化处理,测试集x的最小值约为-0.08)。你看到的“视觉截距”其实是直线在测试集x最小值处的y值,而非回归方程定义的x=0时的y截距。
  • 回归方程的真实截距验证:回归方程为 y = coef * x + intercept,打印回归系数regr.coef_会得到约949的结果。代入测试集的最小x值(如-0.08),计算得 y = 949*(-0.08) + 152.9 ≈ 77,和图表显示的数值一致,说明模型计算的截距是正确的,只是图表没有展示x=0处的直线部分。
  • 解决方法:若要在图表中显示真实的y截距,可修改绘图代码,让x轴范围包含0,例如:
    # 生成包含0的x范围
    x_full = np.linspace(diabetes_X.min(), diabetes_X.max(), 100)
    y_full_pred = regr.predict(x_full[:, np.newaxis])
    plt.plot(x_full, y_full_pred, color="blue", linewidth=3)
    
    这样绘制的完整直线会穿过x=0、y≈153的位置,和模型输出的截距完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 21:01:36