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

Python回归模型预测值与实际值绘图不符合预期问题求解

问题原因分析

1. OLS模型未添加截距项导致系统偏差

你使用statsmodels.OLS建模时没有给特征矩阵添加常数截距项,默认拟合的是过原点的线性模型,而你的输入特征经过MinMaxScaler归一化后取值范围在[0,1]区间,缺少截距项会直接导致模型预测结果存在系统性偏移,无法拟合标签的整体均值水平。
修正方法:

import statsmodels.api as sm
X_train = sm.add_constant(X_train)
X_test = sm.add_constant(X_test)
ols_regressor = sm.OLS(y_train, X_train).fit()

2. 坐标轴尺度设置错误误导判断

  • 残差图的纵轴范围固定为[-0.03, 0.03],但你的模型预测值范围远小于该区间:线性回归预测值区间仅为[-0.005, 0.0005],残差的绝对值和预测值本身的量级相当甚至更大,你视觉上看到残差贴合水平线,仅能说明残差和预测值没有趋势性关联,不代表残差本身的数值小、预测精度高。极端情况下如果所有样本预测值都是同一个常数,残差图也会呈现水平分布,但预测完全没有区分度。
  • 预测值与实际值对比图的x轴(预测值)和y轴(真实值)范围完全不对等,比如线性回归的x轴范围跨度仅为0.004左右,y轴范围跨度是0.06,二者刻度比例不同,此时绘制的45度线完全不具备完美预测的参考意义。你需要保证同一张图的x轴和y轴范围完全一致:
# 通用修正代码,替换原有硬编码的x0/x1/y0/y1设置
import numpy as np
all_values = np.concatenate([y_test, y_pred])
min_val, max_val = all_values.min(), all_values.max()
axes[0].set_xlim(min_val, max_val)
axes[0].set_ylim(min_val, max_val)
axes[0].plot([min_val, max_val], [min_val, max_val], ls="--", c="grey")

3. 模型整体欠拟合,输出范围受限

从图中可以看到三个模型的预测值范围都远小于真实标签的范围,说明所有模型都没有学到特征和标签之间的真实关联,仅能输出一个波动很窄的结果,自然会远离45度线。可能的原因包括:

  • 神经网络训练流程有问题:比如标签未做归一化、输出层激活函数选择错误、训练轮次不足等,你当前的神经网络预测值全部落在[-0.018, -0.009]的极小区间,明显没有拟合到标签的波动。
  • 特征和标签之间本身的相关性很低,可解释性差,模型上限本身就很低。
  • 随机森林的参数设置不合理:比如max_features=3如果你的特征总数很少也会限制模型拟合能力。

4. 误区纠正

残差图呈水平分布仅能说明模型的误差不存在随预测值变化的趋势,不存在异方差问题,是模型拟合良好的必要非充分条件,不能单独用来证明模型预测精度高。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:09:02