我正在尝试运行一个简单的 GBM 分类模型来对随机森林和 SVM 的性能进行基准测试,但是我无法让模型正确评分。它没有抛出错误,但预测都是 NaN。我正在使用来自mlbench. 这是代码:
library(gbm)
library(mlbench)
library(caret)
library(plyr)
library(ada)
library(randomForest)
data(BreastCancer)
bc <- BreastCancer
rm(BreastCancer)
bc$Id <- NULL
bc$Class <- as.factor(mapvalues(bc$Class, c("benign", "malignant"), c("0","1")))
index <- createDataPartition(bc$Class, p = 0.7, list = FALSE)
bc.train <- bc[index, ]
bc.test <- bc[-index, ]
model.gbm <- gbm(Class ~ ., data = bc.train, n.trees = 500)
pred.gbm <- predict(model.gbm, bc.test.ind, n.trees = 500, type = "response")
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助解决我做错了什么吗?另外,我是否必须转换预测函数的输出?我读过这似乎是 GBM 预测的一个问题。谢谢。
我之前遇到过给因子变量的问题gbm。您可以强制Class变量为字符类型而不是因子,并且应该这样做。
bc$Class <- as.factor(mapvalues(bc$Class, c("benign", "malignant"), c("0","1")))
bc$Class <- as.character(bc$Class)
Run Code Online (Sandbox Code Playgroud)
您的代码应该从那里运行良好,只要确保你调用bc.test(不bc.test.ind)的predict。
这是我进行这些更改后获得的预测值的摘要
> summary(pred.gbm)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.222 0.222 0.231 0.346 0.573 0.579
Run Code Online (Sandbox Code Playgroud)
最后一件事,我建议set.seed()在调用createDataPartition(). 否则,每次运行代码时,您都会获得不同的训练和测试集。