多变量线性回归预测结果差异异常问题求助
问题分析与解决方案
一、先排查代码中的明显错误
看第二组数据的代码,存在几个低级错误,这大概率是差异巨大的直接原因:
- 变量名不匹配:
model = sm.OLS(sst_n, X_n)里的sst_n根本没定义,你实际赋值的是sst = skin_temp_array,这里应该改成model = sm.OLS(sst, X_n) - 预测用错了特征矩阵:
predicted_sst_same_data = results.predict(X)用的是第一组的X,而不是当前第二组的X_n,等于用第二组训练的模型去预测第一组的特征,完全驴唇不对马嘴 - 差异计算逻辑错误:用第二组的真实值
sst减去第一组特征的预测值,结果肯定全是偏差
二、修正后的第二组数据代码
# 使用另一组数据 X_n = np.column_stack((tir1, tir1_z, bt_diff, bt_diff_z, bt_diff_sst, s_theta, np.ones_like(tir1))) sst = skin_temp_array # 拟合OLS模型 model = sm.OLS(sst, X_n) # 修正sst_n为sst results = model.fit() # 打印回归结果摘要 print(results.summary()) # 用当前组的特征矩阵做预测 predicted_sst = results.predict(X_n) # 计算实际值与预测值的差异 difference = sst - predicted_sst
三、如果修正代码后仍然差异大,需要进一步排查这些方向
1. 数据分布一致性检查
- 对比两组数据的特征(tir1、tir1_z等)和目标变量的统计分布:包括均值、方差、极值、分布形态,用直方图、箱线图可视化。如果两组数据分布差异极大,线性模型的泛化能力会直接崩盘
- 检查第二组数据是否存在异常值,极端值会严重拉偏回归系数,导致预测偏差
2. 特征共线性与相关性问题
- 计算特征的方差膨胀因子(VIF),如果VIF>10说明存在严重共线性,会导致系数不稳定,预测误差陡增。可以用statsmodels的
variance_inflation_factor工具计算 - 检查特征与目标变量的相关性,如果第二组中某些特征和SST的相关性和第一组完全相反,线性模型就不再适用
3. 线性回归假设验证
线性回归要求数据满足:线性关系、同方差性、残差正态分布、无自相关。针对第二组数据验证这些假设:
- 画残差的QQ图,看是否近似正态分布
- 画残差与预测值的散点图,看是否存在异方差(比如残差随预测值增大而明显波动)
- 用Durbin-Watson检验检查自相关
如果假设不成立,要么对特征做变换(对数、标准化),要么换非线性模型(比如树模型、多项式回归)
4. 数据预处理一致性
确保两组数据的预处理步骤完全一致:比如是否都做了标准化/归一化、缺失值填充、特征筛选。如果第一组做了标准化而第二组没做,预测结果肯定偏差巨大
四、基于你提供的数据文件的快速分析建议
可以先加载两组数据做初步统计对比:
import numpy as np import pandas as pd # 加载数据 X1 = np.load('x.npy') y1 = np.load('y.npy') X2 = np.load('x1.npy') y2 = np.load('y1.npy') # 查看数据形状 print(f"第一组数据:X={X1.shape}, y={y1.shape}") print(f"第二组数据:X={X2.shape}, y={y2.shape}") # 查看特征统计描述 print("\n第一组特征统计:") print(pd.DataFrame(X1).describe()) print("\n第二组特征统计:") print(pd.DataFrame(X2).describe())
通过这些统计量能快速判断两组数据的分布差异。
内容的提问来源于stack exchange,提问作者The Emerging Star
相关产品推荐
相关产品推荐

