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

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")
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 10:40:50