我试图运行下面的命令。
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 ...
谢谢你
你需要为新数据提供与你的训练数据相似的列名。它不像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