我正在尝试训练随机森林模型,但我收到以下错误。我需要使用不同的设置来分析模型来解决RMSE问题吗?我尝试过转换" good"一个因素,但引发了一个新的错误。
错误:
Error in train.default(x, y, weights = w, ...) :
Metric RMSE not applicable for classification models
5 stop(paste("Metric", metric, "not applicable for classification models"))
4 train.default(x, y, weights = w, ...)
3 train(x, y, weights = w, ...)
2 train.formula(good ~ ., data = train, method = "rf", trControl = trainControl(method = "cv",
5), ntree = 251)
1 train(like ~ ., data = train, method = "rf", trControl = trainControl(method = "cv",
5), ntree = 251)
我用来训练模型的代码如下。我试图将数据集中的记录分类为" good"基于变量1-3中的值。
代码:
set.seed(13518) # For reproducibile purpose
inTrain <- createDataPartition(SampleTestData$good, p=0.70, list=F)
train <- SampleTestData[inTrain, ]
test_train <- SampleTestData[-inTrain, ]
if(!exists("model1"))
{
model1 <- train(good ~ ., data=train, method="rf", trControl=trainControl(method="cv", 5), ntree=251)
}
我在下面提供了一些示例数据。我使用dput输出数据,如下文所示。
数据:
structure(list(good = c("True", "True", "True", "False", "False",
"True", "True", "True", "True", "False", "True", "True", "True",
"True", "False", "False", "False", "True", "False", "False",
"True", "False", "True", "False", "True", "False", "True", "True",
"False", "False", "True", "True", "False", "True", "True", "True",
"True", "False", "False", "False", "False", "True", "False",
"True", "True", "True", "False", "True", "False", "True", "False",
"True", "True", "True", "False", "False", "True", "False", "True"
), variable1 = c("TRUE", "TRUE", "TRUE", "TRUE",
"FALSE", "TRUE", "FALSE", "TRUE", "TRUE", "FALSE", "FALSE", "TRUE",
"TRUE", "TRUE", "TRUE", "TRUE", "FALSE", "TRUE", "FALSE", "TRUE",
"TRUE", "FALSE", "TRUE", "TRUE", "TRUE", "FALSE", "FALSE", "FALSE",
"TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE",
"TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "FALSE", "FALSE",
"TRUE", "TRUE", "TRUE", "FALSE", "TRUE", "TRUE", "FALSE", "TRUE",
"TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "FALSE", "TRUE"), variable2 = c("TRUE",
"TRUE", "TRUE", "TRUE", "FALSE", "TRUE", "TRUE", "TRUE", "TRUE",
"FALSE", "TRUE", "TRUE", "TRUE", "FALSE", "TRUE", "TRUE", "FALSE",
"TRUE", "FALSE", "TRUE", "FALSE", "FALSE", "TRUE", "TRUE", "TRUE",
"FALSE", "FALSE", "FALSE", "TRUE", "TRUE", "FALSE", "TRUE", "TRUE",
"TRUE", "TRUE", "FALSE", "FALSE", "TRUE", "TRUE", "FALSE", "FALSE",
"TRUE", "FALSE", "FALSE", "FALSE", "FALSE", "TRUE", "FALSE",
"TRUE", "TRUE", "FALSE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE",
"FALSE", "FALSE", "TRUE"), variable3 = c("FALSE", "FALSE",
"FALSE", "FALSE", "FALSE", "FALSE", "TRUE", "FALSE", "FALSE",
"FALSE", "FALSE", "FALSE", "FALSE", "FALSE", "FALSE", "FALSE",
"FALSE", "TRUE", "FALSE", "FALSE", "FALSE", "FALSE", "FALSE",
"FALSE", "TRUE", "FALSE", "FALSE", "FALSE", "FALSE", "FALSE",
"FALSE", "TRUE", "FALSE", "FALSE", "FALSE", "FALSE", "FALSE",
"FALSE", "FALSE", "FALSE", "FALSE", "TRUE", "FALSE", "FALSE",
"FALSE", "FALSE", "FALSE", "FALSE", "FALSE", "TRUE", "FALSE",
"TRUE", "FALSE", "FALSE", "FALSE", "FALSE", "FALSE", "FALSE",
"TRUE")), .Names = c("good", "variable1", "variable2",
"variable3"), class = "data.frame", row.names = c(5078L,
5087L, 5366L, 5568L, 7017L, 8123L, 8145L, 8525L, 11777L, 12355L,
12586L, 12675L, 14912L, 15503L, 15530L, 15533L, 15598L, 15634L,
15749L, 15842L, 16216L, 16718L, 16744L, 16792L, 17928L, 20351L,
20417L, 21083L, 22382L, 23698L, 23807L, 23879L, 23900L, 30431L,
30897L, 31084L, 31803L, 32007L, 32806L, 37487L, 37656L, 38284L,
38291L, 38471L, 38786L, 40303L, 40724L, 41222L, 41248L, 41837L,
42994L, 44423L, 45216L, 46233L, 47012L, 50446L, 52429L, 53197L,
54590L))
答案 0 :(得分:3)
将good转换为factor实际上似乎可以解决问题。数据集中的所有变量都具有TRUE或FALSE值,并且是字符类型。那么为什么随机林默认为回归而不是分类器呢?
解决问题的代码:
SampleTestData$good = as.factor(SampleTestData$good)