使用spatialsample导出随机森林回归残差及解决行数不匹配问题
解决随机森林预测行数与原数据不一致的问题
先确认预测用的数据集
确保调用predict()时传入的是原训练数据集,别误传到包含额外样本的数据集(比如不小心混进了测试集或者临时生成的行)。正确的预测代码应该像这样:rf_preds <- predict(rf_model, newdata = original_df)检查数据索引是否混乱
很多时候行数不一致是因为索引重复或者错位,先查看原数据和预测结果的索引:head(rownames(original_df)) head(names(rf_preds))如果发现索引不对,给原数据加个行号列来强制对齐:
# 给原数据添加行号 original_df <- original_df %>% mutate(row_id = row_number()) # 重新预测 rf_preds <- predict(rf_model, newdata = original_df) # 计算残差 rf_resids <- original_df$你的响应变量列名 - rf_preds # 合并坐标和残差 resids_df <- original_df %>% select(row_id, lon, lat) %>% mutate(residuals = rf_resids)排查模型拟合参数
如果用的是randomForest包,检查拟合模型时有没有设置特殊参数导致输出异常。比如确认拟合时用的是完整的原数据,没有额外添加行,也没开启会生成额外输出的参数(比如keep.inbag这类不影响预测行数,但其他自定义设置要排查)。兜底临时处理(不推荐优先用)
如果实在找不到根源,直接取预测结果的前N行(N等于原数据行数)来强制对齐:# 假设原数据有60行 rf_resids <- original_df$你的响应变量列名 - rf_preds[1:nrow(original_df)] resids_df <- cbind(original_df[,1:2], rf_resids)
内容的提问来源于stack exchange,提问作者Nikos
相关产品推荐
相关产品推荐

