单个输入 data.frame 而不是 testset.csv 在 R 中的随机森林代码中失败

Single input data.frame instead of testset.csv fails in randomForest code in R

我编写了一个 R 脚本,该脚本成功运行并预测了输出,但仅当具有多个条目的 csv 作为输入传递给分类器时。

training_set = read.csv('finaldata.csv')
library(randomForest)
set.seed(123)
classifier = randomForest(x = training_set[-5],
                      y = training_set$Song,
                      ntree = 50)

test_set = read.csv('testSet.csv')
y_pred = predict(classifier, newdata = test_set)

以上代码运行成功,但我不想向分类器提供 10 多个输入,而是想将 data.frame 作为单个输入传递给该分类器。这在其他分类器中有效,除了这个,为什么? 所以下面的代码不起作用并抛出错误 -

y_pred = predict(classifier, data.frame(Emot="happy",Pact="Walking",Mact="nothing",Session="morning"))

Error in predict.randomForest(classifier, data.frame(Emot = "happy", : Type of predictors in new data do not match that of the training data.

我什至尝试在 testinput.csv 中保留单个条目,仍然抛出相同的错误!如何解决?此代码是我的另一个代码的后端,我只希望单个条目作为测试通过以预测结果。在训练和测试集中也都是 'factors'。帮助表示赞赏。

PS: 之前针对相同错误的解决方案对我没有帮助。

str(test_set)

'data.frame':   1 obs. of  5 variables:
 $ Emot   : Factor w/ 1 level "fear": 1
 $ Pact   : Factor w/ 1 level "Bicycling": 1
 $ Mact   : Factor w/ 1 level "browsing": 1
 $ Session: Factor w/ 1 level "morning": 1
 $ Song   : Factor w/ 1 level "Dusk Till Dawn.mp3": 1

str(training_set)

'data.frame':   1052 obs. of  5 variables:
 $ Emot   : Factor w/ 8 levels "anger","contempt",..: 4 7 6 6 4 3 4 6 4 6 ...
 $ Pact   : Factor w/ 5 levels "Bicycling","Driving",..: 1 2 2 2 4 3 1 1 3 4 ...
 $ Mact   : Factor w/ 6 levels "browsing","chatting",..: 1 6 1 4 5 1 5 6 6 6 ...
 $ Session: Factor w/ 4 levels "afternoon","evening",..: 3 4 3 2 1 3 1 1 2 1 ...
 $ Song   : Factor w/ 101 levels "Aaj Ibaadat.mp3",..: 29 83 47 72 29 75 77 8 30 53 ...

哦,这成功了,奇怪的解决方案。均衡 类 训练集和测试集。以下代码将训练集的第一行绑定到测试集,然后将其删除。

test_set <- rbind(training_set[1, ] , test_set)
test_set <- test_set[-1,]

完成!它适用于单输入和单条目 .csv 文件,不会给模型带来错误。