我使用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,但我不太明白如何调整它们。
提前致谢!
答案 0 :(得分:49)
我同意@Falcon w.r.t.数据集大小。主要问题可能是数据集的小尺寸。如果可能的话,你可以做的最好的事情就是获得更多的数据,越多的数据(通常)就越不容易过度拟合,因为随着数据集大小的增加,出现预测的随机模式会逐渐被淹没。
那说,我会看下面的参数:
注意做这项工作时要科学。使用3个数据集,一个训练集,一个单独的“开发”数据集来调整您的参数,以及一个使用最佳参数测试最终模型的测试集。仅一次更改一个参数并评估结果。或者尝试使用sklearn gridsearch算法一次性搜索这些参数。