使用 predict() 时,预测变量数相同但行数不同的新数据出错

Posted

技术标签:

【中文标题】使用 predict() 时,预测变量数相同但行数不同的新数据出错【英文标题】:Error with new data with same number of predictors but different number of rows when using predict() 【发布时间】:2014-12-20 15:32:02 【问题描述】:

我正在尝试运行我在训练我的模型和交叉验证后得到的预测函数。我正在预测变量“classe”。

测试数据与训练数据具有相同名称的预测变量数,但它的行数更少(20 个观察值)。测试数据中的所有预测变量都是数字的(就像训练数据一样)。但是无论我使用什么模型,它似乎都会导致问题。

型号:

rf <- train(train$classe ~., method="rf", data=train, 
        trControl = trainControl(method = "oob"))

我试过了:

predict(rf, testing1)

我明白了

Error in predict.randomForest(modelFit, newdata) : newdata has 0 rows 

然后我尝试了

gbm <- train(train$classe ~., method="gbm", data=train, 
         trControl = trainControl(method = "cv", number=5))

predict(gbm, testing1)

我明白了

Error in aperm.default(psum, c(2, 1, 3)) : 
'perm' is of wrong length 3 (!= 2) 

我的测试数据看起来像这样,唯一的区别是最后一个变量表示“问题 id”,而在训练集中最后一个变量表示“classe”:

> str(testing1)
'data.frame':   20 obs. of  86 variables:
 $ roll_belt              : num  123 1.02 0.87 125 1.35 -5.92 1.2 0.43 0.93 114 ...
 $ pitch_belt             : num  27 4.87 1.82 -41.6 3.33 1.59 4.44 4.15 6.72 22.4 ...
 $ total_accel_belt       : num  20 4 5 17 3 4 4 4 4 18 ...
 $ kurtosis_roll_belt     : num  NA NA NA NA NA NA NA NA NA NA ...
 $ kurtosis_picth_belt    : num  NA NA NA NA NA NA NA NA NA NA ...

 ... # all numeric variables 

 $ magnet_forearm_y       : num  419 791 698 783 -787 800 284 -619 652 723 ...
 $ magnet_forearm_z       : num  617 873 783 521 91 884 585 -32 469 512 ...
 $ problem_id             : num  1 2 3 4 5 6 7 8 9 10 ...

感谢任何帮助!

【问题讨论】:

【参考方案1】:

我解决了这个问题 - 测试数据中的列中的一些值是“NA”,而在训练数据中它们是空白的。将这两个文件读入 R 的方式之间存在一些不一致。修复该问题后,predict() 现在可以工作了。

【讨论】:

【参考方案2】:

对于预测,我知道列名必须完全相同。如果连最后一个都关闭了,那么这可能会导致问题。

【讨论】:

以上是关于使用 predict() 时,预测变量数相同但行数不同的新数据出错的主要内容,如果未能解决你的问题,请参考以下文章

重复数据但行数不同的连续排序

当缺少数据时,使用 R 随机森林预测新数据

tf.model.predict() 在预测具有相同维度的数据时会产生值错误

Keras model.predict() 为测试输入中的所有值返回相同的预测输出

svm e1071 predict 创建的预测值数组比预期的要大

在 Keras 中使用 `predict` 以与给定相同的顺序预测一维数组