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

使用LinearRegression时RMSE接近零的原因排查求助

问题分析与解决方案

核心原因推测

你的线性模型RMSE异常极低,仅在标准化后出现且只影响线性模型,大概率是特征中存在与目标变量(总CO₂排放量)几乎完全线性相关的变量。标准化后,线性模型会无限制依赖这个特征进行预测,看似得到完美结果,实则是数据冗余或标签泄露导致的假阳性。

排查与解决步骤

1. 检查特征与目标的相关性

先定位和目标变量线性相关度最高的特征,确认是否存在“作弊”特征:

import pandas as pd
import numpy as np

# 合并训练特征与目标变量,计算相关系数
train_data = pd.concat([X_train, y_train], axis=1)
corr_values = train_data.corr()[y_train.name].sort_values(ascending=False)
print("特征与目标的相关性排序:")
print(corr_values)

如果某个特征的相关系数接近1(比如>0.99),那它就是问题根源——比如数据集里的Total Energy Use这类变量,CO₂排放量通常直接由能耗乘以固定系数计算而来,属于完全线性相关的冗余特征,必须移除。

2. 查看线性模型的系数权重

线性模型的系数能直接反映哪个特征被过度依赖:

# 给转换后的特征加上列名,方便识别
feature_names = transform.get_feature_names_out()
X_train_transformed = pd.DataFrame(X_train_transformed, columns=feature_names)

# 输出系数绝对值排序
lr_coef = pd.DataFrame(lr.coef_, index=feature_names, columns=['系数'])
print("模型系数绝对值排序:")
print(lr_coef.sort_values(by='系数', key=abs, ascending=False))

若某特征的系数绝对值远大于其他特征,说明模型完全依赖它进行预测,可进一步验证该特征与目标的强关联。

3. 验证TargetEncoder的编码结果

TargetEncoder用目标均值编码类别变量,若某个类别下的所有样本目标值完全一致,编码后的特征会和目标高度相关:

# 检查每个类别变量的编码结果与目标的关系
encoder = TargetEncoder()
encoded_train = encoder.fit_transform(X_train[var_str_tmp], y_train)
for col in encoded_train.columns:
    corr = np.corrcoef(encoded_train[col], y_train)[0,1]
    print(f"类别变量 {col} 编码后与目标的相关性:{corr:.4f}")

若相关性接近1,考虑更换编码方式(如OneHotEncoder)或移除该类别变量。

4. 排除数据泄露

确认特征中没有包含直接推导目标的变量:比如是否不小心加入了CO₂排放量的衍生变量(如人均CO₂排放,计算时用到了总排放),这类变量属于标签泄露,必须删除。

总结

线性模型对完全线性相关的特征极度敏感,标准化后会放大这种依赖,导致RMSE异常偏低。通过以上步骤定位到问题特征后,移除该特征或调整编码方式,就能得到合理的模型结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 09:55:23