如何解决Python sklearn随机森林中的过度配置?

我使用在python sklearn包中实现的RandomForestClassifier来构建二进制分类模型.以下是交叉验证的结果:

Fold 1 : Train: 164  Test: 40
Train Accuracy: 0.914634146341
Test Accuracy: 0.55

Fold 2 : Train: 163  Test: 41
Train Accuracy: 0.871165644172
Test Accuracy: 0.707317073171

Fold 3 : Train: 163  Test: 41
Train Accuracy: 0.889570552147
Test Accuracy: 0.585365853659

Fold 4 : Train: 163  Test: 41
Train Accuracy: 0.871165644172
Test Accuracy: 0.756097560976

Fold 5 : Train: 163  Test: 41
Train Accuracy: 0.883435582822
Test Accuracy: 0.512195121951

我使用“价格”功能预测“质量”是一个序数值.在每个交叉验证中,有163个培训示例和41个测试示例.

显然这里过度配合.那么sklearn提供的任何参数可以用来克服这个问题呢?我发现了一些参数here,例如min_samples_split和min_sample_leaf,但我不太明白如何调整它们.

提前致谢!

最佳答案
我同意@Falcon w.r.t.数据集大小.主要的问题是数据集的尺寸很小.如果可能的话,您可以做的最好的事情就是获得更多的数据,越多的数据(通常)就越不可能进行超配,随着随着数据集大小的增加,显示预测性的随机模式开始被淹没.

也就是说,我会看下面的参数:

> n_estimators:@Falcon是错误的,一般来说,越多的树越不可能,算法越过.所以尝试增加这个.该数字越小,模型越接近决策树,并且具有受限的特征集.
> max_features:尝试减少这个数字(尝试30-50%的功能数量).这决定了每个树随机分配多少个特征.越小越小,越小越好,但是太小就会开始适应.
> max_depth:实验这个.这将降低学习模式的复杂性,降低拟合风险.尝试开始小,说5-10,并增加你得到最好的结果.
> min_samples_leaf:尝试将其设置为大于1的值.这与max_depth参数具有相似的效果,这意味着分支将停止分割,一旦叶子具有每个样本数量.

注意做这项工作是科学的.使用3个数据集,一个训练集,一个单独的’开发’数据集来调整你的参数,以及一个使用最优参数测试最终模型的测试集.一次只能更改一个参数并评估结果.或者使用sklearn网格搜索算法来一次性搜索这些参数.

转载注明原文:如何解决Python sklearn随机森林中的过度配置? - 代码日志