如何解决Python sklearn随机森林中的过拟合问题?
machine-learning
python
random-forest
scikit-learn
6
0

我正在使用在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提供的任何参数都可以用来克服此问题吗?我在这里找到了一些参数,例如min_samples_split和min_sample_leaf,但我不太了解如何调整它们。

提前致谢!

参考资料:
Stack Overflow
收藏
评论
共 1 个回答
高赞 时间 活跃

我同意@Falcon wrt的数据集大小。主要问题可能在于数据集的大小。如果可能的话,您能做的最好的事情就是获取更多的数据,更多的数据(通常)越不可能拟合得越好,因为随着数据集大小的增加,出现预测性的随机模式开始被淹没。

也就是说,我将查看以下参数:

  1. n_estimators:@Falcon是错误的,通常树越多,算法过拟合的可能性就越小 。因此,请尝试增加此值 。该数字越小,模型越接近具有受限功能集的决策树。
  2. max_features:尝试减少此数量(尝试使用30-50%的功能)。这确定了每棵树被随机分配多少个特征。尺寸越小,过度拟合的可能性越小,但是过小的尺寸会开始引入拟合不足。
  3. max_depth:尝试一下。这将降低学习模型的复杂性,降低拟合风险。尝试从5-10开始,从小开始,增加您可获得最佳结果。
  4. min_samples_leaf:尝试将其设置为大于1的值。这与max_depth参数具有相似的效果,这意味着一旦叶子每个具有相同数量的样本,分支将停止分裂。

做这项工作时要注意科学。使用3个数据集,一个训练集,一个单独的“开发”数据集来调整参数,以及使用最佳参数测试最终模型的测试集。一次只更改一个参数并评估结果。或尝试使用sklearn网格搜索算法一次搜索所有这些参数。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号