【发布时间】:2018-03-11 20:29:18
【问题描述】:
我正在尝试使用 caret 包中的 train() fx 在 60 个变量和约 20,000 个观察值上构建分类模型。我正在使用随机森林方法并在我的训练集上返回 0.999 准确度,但是当我使用模型进行预测时,它将每个测试观察分类为同一类(即 20 个观察中的每一个都被归类为“1”) 5 种可能的结果)。我确定这是错误的(测试集是针对 Coursera 测验的,因此我没有发布确切的代码)但我不确定发生了什么。
我的问题是,当我调用拟合的最终模型 (fit$finalModel) 时,它说它总共生成了 500 棵树(默认和预期),但是每次拆分尝试的变量数量为 35。 我知道将分类,为每个拆分选择的标准观察数是总预测变量数的平方根(因此,应该是 sqrt(60) = 7.7,称之为 8)。会不会是这个问题??
我对我的模型或数据清理等是否有问题感到困惑。
set.seed(10000)
fitControl <- trainControl(method = "cv", number = 5)
fit <- train(y ~ ., data = training, method = "rf", trControl = fitControl)
适合$finalModel
Call:
randomForest(x = x, y = y, mtry = param$mtry)
Type of random forest: classification
Number of trees: 500
No. of variables tried at each split: 41
OOB estimate of error rate: 0.01%
【问题讨论】:
-
我还会查看您的树深度,这是过度拟合随机森林的最简单方法之一。我建议对树深度和变量数量进行超参数网格搜索。您还应该使用自己的验证集进行确认。你的班级也平衡吗?设置更高的节点大小也可能会有所帮助。
-
包作者指出随机森林可以抵抗过度拟合。我仍然很难理解究竟是怎么回事。我相信这与训练模型时的引导有关。
标签: r random-forest prediction r-caret training-data