单个输入 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 文件,不会给模型带来错误。
我编写了一个 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 文件,不会给模型带来错误。