使用 caret 包进行交叉验证的最终模型
Posted
技术标签:
【中文标题】使用 caret 包进行交叉验证的最终模型【英文标题】:final model in cross-validation using caret package 【发布时间】:2018-07-15 16:56:22 【问题描述】:我在 Caret 包中使用随机森林方法对我的数据进行了交叉验证,R 表示最终模型是使用 mtry=34 构建的,这是否意味着在最终的随机森林中(由交叉验证产生)只有 34 个变量我的数据集中的参数中的哪些用于在树中进行拆分?
> output
Random Forest
375 samples
592 predictors
2 classes: 'alzheimer', 'control'
No pre-processing
Resampling: Cross-Validated (3 fold)
Summary of sample sizes: 250, 250, 250
Resampling results across tuning parameters:
mtry Accuracy Kappa
2 0.6826667 0.3565541
34 0.7600000 0.5194246
591 0.7173333 0.4343563
Accuracy was used to select the optimal model using the largest value.
The final value used for the model was mtry = 34.
【问题讨论】:
【参考方案1】:由于您已经使用 caret
包构建了随机森林,因此建议使用 $finalModel
获取最终模型的摘要,该模型是使用预定义参数选择的模型 (默认值:OOB 精度)。
现在回答你的问题:
从下图中,您可以看到随机森林在每次拆分时从 34 个(我的示例是 31 个,但您明白了)变量中随机选择。根据您的问题,这 不 与仅使用 34 个变量来种植每棵树相混淆。事实上,所有变量都用在足够大的随机森林中;只有在每个节点上,从 34 个变量池中挑选一个变量以减少模型的方差。这使得每棵树彼此之间更加独立,因此,对大量树进行平均所获得的收益更加显着。
每棵树的树生长过程如下(粗体表示强调,假设您使用来自caret
或直接来自randomForest
的randomForest
实现):
m
(小于M
)被指定这样在每个节点分裂时,从M
中随机选择m
变量和m
中的最佳候选变量(以信息增益衡量)用于分割节点。 m
是森林生长过程中的常数
每棵树都尽可能地生长,无需预先或后修剪
抱歉,迟到了 2 个月的答案,但我认为这是一个很好的问题,如果没有更详细地解释 mtry
参数的真正作用,我会感到遗憾。它经常被误解,所以我想我会在这里添加一个答案!
【讨论】:
【参考方案2】:randomForest 的文档:
mtry: 随机抽样作为候选变量的数量 分裂。
在这种情况下,最终模型会考虑树中每个拆分的 34 个随机变量。
【讨论】:
以上是关于使用 caret 包进行交叉验证的最终模型的主要内容,如果未能解决你的问题,请参考以下文章
R语言使用caret包中的createFolds函数对机器学习数据集进行交叉验证抽样返回的样本列表长度为k个
R语言做决策树交叉验证时,注册并加载完caret安装包,调用trainControl函数失败怎么办