【问题标题】:Using the predict function from R 'caret' package使用 R 'caret' 包中的预测函数
【发布时间】:2020-06-02 22:32:49
【问题描述】:

我正在尝试运行以下命令:

predDF <- data.frame(pred.RF, pred.SVM, pred.KNN, pred.NB, pred.BGM, pred.MARS, pred.GAM, pred.SGD, satisfied = pr.out.incl.score.val.2.df.x$satisfied)

modelStack1 <- train(satisfied ~ ., predDF, method = "glm")

testPredLevelOne <- data.frame(pred.RF.3, pred.SVM.3, pred.KNN.3, pred.NB.3, pred.BGM.3, pred.MARS.3, pred.GAM.3, pred.SGD.3, satisfied = pr.out.incl.score.val.3.df.x$satisfied)

combPred1 <- predict(modelStack1, testPredLevelOne)

数据框predDF 有4888 个观测值(行),数据框testPredLevelOne 有2632 个观测值(行)。据我了解,当我执行combPred1 &lt;- predict(modelStack1, testPredLevelOne) 时,这种观察次数的差异并不重要。但是当我执行该行时,我收到以下错误:

Warning message:
'newdata' had 2632 rows but variables found have 4888 rows 

我该如何解决这个错误?

更多参考,当我做str(testPredLevelOne)时,输出如下:

 str(testPredLevelOne)
'data.frame':   2632 obs. of  9 variables:
 $ pred.RF.3  : Factor w/ 2 levels "0","1": 1 1 2 1 2 1 1 2 2 1 ...
 $ pred.SVM.3 : Factor w/ 2 levels "0","1": 1 1 2 2 2 1 1 2 2 2 ...
 $ pred.KNN.3 : Factor w/ 2 levels "0","1": 1 1 2 2 2 2 1 2 2 2 ...
 $ pred.NB.3  : Factor w/ 2 levels "0","1": 1 1 2 2 2 1 1 2 2 1 ...
 $ pred.BGM.3 : Factor w/ 2 levels "0","1": 1 1 2 2 2 1 1 2 2 1 ...
 $ pred.MARS.3: Factor w/ 2 levels "0","1": 1 1 2 2 2 1 1 2 2 2 ...
 $ pred.GAM.3 : Factor w/ 2 levels "0","1": 1 1 2 2 2 1 1 2 2 2 ...
 $ pred.SGD.3 : Factor w/ 2 levels "0","1": 1 1 2 2 2 1 1 2 2 1 ...
 $ satisfied  : Factor w/ 2 levels "0","1": 1 1 2 1 2 1 1 1 1 1 ...

谢谢,

【问题讨论】:

  • 你能显示str(testPredLevelOne)的输出吗
  • 您好,感谢您的评论,我根据您的要求更新了我的帖子
  • 您是否尝试将两个数据框的列名设置为相同?

标签: r machine-learning r-caret


【解决方案1】:

您需要为新数据提供与您的火车数据类似的列名。它不像python中的sklearn。

例如:

library(caret)
idx = sample(nrow(iris),100)
v1_train = iris$Sepal.Length[idx]
v2_train = iris$Sepal.Width[idx]
v3_train = iris$Petal.Length[idx]
y_train = iris$Petal.Width[idx]

v1_test = iris$Sepal.Length[-idx]
v2_test = iris$Sepal.Width[-idx]
v3_test = iris$Petal.Length[-idx]
y_test = iris$Petal.Width[-idx]

predDF <- data.frame(v1_train,v2_train,v3_train,y = y_train)
modelStack1 <- train(y ~ ., predDF, method = "glm")

testPredLevelOne <- data.frame(v1_test,v2_test,v3_test,y = y_test)
combPred1 <- predict(modelStack1, testPredLevelOne)

Warning message:
'newdata' had 50 rows but variables found have 100 rows

我们检查预测的长度和值,这只是来自训练:

length(combPred1)
[1] 100
table(combPred1 == modelStack1$finalModel$fitted.values)
TRUE 
 100

如果我们将测试的列名重命名为与训练数据相同,就不会报错:

colnames(testPredLevelOne) = colnames(predDF)
combPred1 <- predict(modelStack1, testPredLevelOne)
 length(combPred1)
[1] 50

【讨论】:

    猜你喜欢
    • 2016-08-14
    • 2014-06-03
    • 2018-03-16
    • 2014-04-15
    • 2018-05-11
    • 2017-01-21
    • 2013-10-19
    • 2015-10-29
    • 1970-01-01
    相关资源
    最近更新 更多