首页 > 解决方案 > 为随机森林树训练数据时出错 - 我该如何解决?

问题描述

我为随机森林模型编写了这段代码。

set.seed(123)
split = sample.split(arrow_clean$discountflag, SplitRatio = 0.70)
training_set = subset(arrow_clean, split == TRUE)
test_set = subset(arrow_clean, split == FALSE)
length(training_set)
training_set[-3] = scale(training_set[-3])
test_set[-3] = scale(test_set[-3])

head(training_set)

library(randomForest)
classifier = randomForest(x = training_set[-3],
                          y = training_set$discountflag,
                          ntree = 500, random_state = 0)
y_pred = predict(classifier, newdata = test_set[-3])
y_pred
cm = table(test_set[, 3], y_pred)
cm

它正在工作,但现在以下部分给了我一个错误,上面写着“colMeans(x,na.rm = TRUE)中的错误:'x'必须是数字”。我该如何解决这两行的问题?

training_set[-3] = scale(training_set[-3])
test_set[-3] = scale(test_set[-3])

标签: rrandom-forestmodelingtraining-data

解决方案


似乎您的预测变量中至少有一个不是数字的。当您遇到与数据相关的问题时,建议dput您使用数据集的样本,或发布一个重现您的错误的示例,还包括library您使用的 s。但是,您可能只需要转换您的预测变量。用检查class每列的str,然后用 转换非数字预测变量as.numeric。此外,最好scale在数据拆分之前使用函数。iris查看数据集的示例

set.seed(123)
iris[-5] = scale(iris[-5])
split = caTools::sample.split(iris$Species, SplitRatio = 0.70)
training_set = subset(iris, split == TRUE)
test_set = subset(iris, split == FALSE)
library(randomForest)
classifier = randomForest(x = training_set[-5],
                          y = training_set$Species,
                          ntree = 500, random_state = 0)
y_pred = predict(classifier, newdata = test_set[-5])
y_pred
cm = table(test_set[, 5], y_pred)
cm

这工作很好


推荐阅读