R语言逻辑回归模型训练与测试数据不兼容问题排查
测试集预测赋值行数不匹配问题排查
核心问题分析
错误提示中「现有数据(291行)与赋值数据(74行)不兼容」,结合你的数据集拆分比例(8:2,365条数据对应训练集≈291行、测试集≈74行),说明你将测试集的预测结果(74行)错误赋值给了训练集对象(291行),或存在数据集对象混淆的情况。以下是具体排查和解决步骤:
1. 检查目标赋值对象的身份
- 直接运行
nrow(pred_model_01),确认其行数:- 如果返回291:说明
pred_model_01是训练集,而非测试集。你需要将预测结果赋值给测试集对象。 - 正确操作示例:
# 先确保正确提取测试集(基于rsample的split对象) test_data <- testing(your_split_object) # 赋值预测结果到测试集 test_data$pred_prob <- predict(lr_model_01, newdata = test_data, type = "response")
- 如果返回291:说明
2. 验证测试集的提取逻辑
- 确认你是通过rsample的
testing()函数提取测试集,而非直接使用split对象或错误复制训练集:- 错误示例:
test_data <- your_split_object(直接用split对象而非提取后的数据集) - 正确拆分代码:
library(rsample) set.seed(123) # 保证拆分结果可重复 your_split_object <- initial_split(raw_data, prop = 0.8, strata = die_in_72) train_data <- training(your_split_object) test_data <- testing(your_split_object)
- 错误示例:
3. 确保测试集与训练集的变量匹配
- 你用mice对训练集做了插补,需确认测试集的变量结构、缺失值处理逻辑与训练集一致:
- 不能直接用原始测试集喂给基于插补后训练集训练的模型,需用训练集的插补模型处理测试集:
# 假设imp是mice返回的训练集插补对象 test_imputed <- predict(imp, newdata = test_data) # 用处理后的测试集做预测并赋值 test_imputed$pred_prob <- predict(lr_model_01, newdata = test_imputed, type = "response")
- 不能直接用原始测试集喂给基于插补后训练集训练的模型,需用训练集的插补模型处理测试集:
4. 检查predict函数的参数
- 确认
predict()的newdata参数明确传入测试集,避免因参数歧义导致的错误:- 强制指定
newdata和type参数,确保预测逻辑清晰:predict(lr_model_01, newdata = test_data, type = "response")
- 强制指定
内容的提问来源于stack exchange,提问作者for_the_love_of_cod
相关产品推荐
相关产品推荐

