自定义Python RMSE计算函数持续返回NaN问题排查求助
问题根因
- 核心原因是Pandas的索引自动对齐机制:你使用的测试值序列
t = test['X']的索引为年份值(20002019),而模型输出的预测值序列`forecast`的索引为100119的整数,两者索引完全不匹配。Pandas在执行两个序列的四则运算时,会优先按索引匹配进行对应位置计算,没有匹配到索引的位置会自动填充NaN,最终(t-y)的所有计算结果都是NaN,求均值后自然返回空值。 - 你可以在函数内计算误差前加入
print((t-y).isna().all())验证,输出为True即可确认是该问题。
解决方案
你可以任选以下任意一种方法修复:
方法1:强制重置索引对齐
将两个序列的索引重置为默认的从0开始的连续整数,消除索引不匹配的影响:
def rmse(result): forecast = result.forecast(point) t = test['X'].reset_index(drop=True) y = forecast.reset_index(drop=True) mse = np.mean((t - y)**2) return np.sqrt(mse)
方法2:直接取Numpy数组计算
跳过Pandas的索引对齐逻辑,直接获取序列底层的数组进行计算:
def rmse(result): forecast = result.forecast(point) t = test['X'].values y = forecast.values mse = np.mean((t - y)**2) return np.sqrt(mse)
方法3:从数据切分侧统一索引
如果是时序预测场景,你可以在切分训练集、测试集时就保证后续预测输出的索引和测试集索引完全对应,避免后续运算出现索引错位问题。
内容的提问来源于stack exchange,提问作者logrammer
相关产品推荐
相关产品推荐

