线性回归模型MSE、MAE数值过高且不在0-1区间的原因求解
问题解答
一、MSE与MAE的工作原理
- MSE(均方误差):取值为预测值与真实值差的平方的平均值,对应代码逻辑为
np.mean((true - pred)**2)。该指标对大误差的惩罚力度更高,数值的量纲是目标变量量纲的平方,取值和目标变量的数值规模直接挂钩。 - MAE(平均绝对误差):取值为预测值与真实值差的绝对值的平均值,对应代码逻辑为
np.mean(np.abs(true - pred))。该指标对异常值的敏感度低于MSE,量纲和目标变量一致,取值同样和目标变量规模直接相关。
二、操作是否存在错误
你的所有操作和代码逻辑都没有问题:
- 线性回归最小二乘闭式解的实现符合数学推导,权重偏置计算逻辑正确。
- MSE、MAE的指标计算代码完全正确。
- 数据集生成逻辑符合带噪声线性数据的构造规则,拟合效果图也验证了模型拟合效果符合预期。
三、MSE不在0-1区间的原因
你对MSE的取值范围认知有误:MSE和MAE本身没有固定的0-1取值区间,数值大小完全取决于目标变量的量级和数据噪声水平。
你在生成数据集时,给目标值y添加的噪声为np.random.randn(int(n_points/2)) * 10,即噪声的标准差为10,理论上MSE的期望就是噪声的方差100,和你实际得到的计算结果完全吻合,属于正常情况。
所谓“优秀模型MSE趋近于1”是目标变量提前归一化到0-1区间、且数据噪声极低的特定场景下的结论,并非通用判定标准。如果你需要让MSE落到0-1区间,可以先对目标值y做min-max归一化到0-1区间后再训练模型即可。
内容的提问来源于stack exchange,提问作者Georgii Smirnoff
相关产品推荐
相关产品推荐

