使用R'caret'包中的预测函数。

问题描述 投票:0回答:1

我试图运行下面的命令。

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 <- 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 ...

谢谢你

r machine-learning r-caret
1个回答
0
投票

你需要为新数据提供与你的训练数据相似的列名。它不像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
© www.soinside.com 2019 - 2024. All rights reserved.