如何使用Scikit Learn调整随机森林中的参数?

O.r*_*rka 34 python parameters machine-learning random-forest scikit-learn

class sklearn.ensemble.RandomForestClassifier(n_estimators=10,
                                              criterion='gini', 
                                              max_depth=None,
                                              min_samples_split=2,
                                              min_samples_leaf=1, 
                                              min_weight_fraction_leaf=0.0, 
                                              max_features='auto', 
                                              max_leaf_nodes=None, 
                                              bootstrap=True, 
                                              oob_score=False,
                                              n_jobs=1, 
                                              random_state=None,
                                              verbose=0, 
                                              warm_start=False, 
                                              class_weight=None)
Run Code Online (Sandbox Code Playgroud)

我使用的是随机森林模型,包含9个样本和大约7000个属性.在这些样本中,我的分类器识别出3个类别.

我知道这远非理想条件,但我试图找出哪些属性在特征预测中最重要.哪些参数最适合优化功能重要性?

我尝试了不同的,n_estimators并注意到"重要特征"(即feature_importances_阵列中的非零值)的数量急剧增加.

我已经阅读了文档,但如果有任何人有这方面的经验,我想知道哪些参数最适合调整,并简要说明原因.

Ran*_*son 55

根据我的经验,按照重要性的顺序,使用sklearn RandomForestClassifier有三个值得探索的功能:

  • n_estimators

  • max_features

  • criterion

n_estimators并不值得优化.你给它的估算越多,它就越好.500或1000通常就足够了.

max_features值得探索许多不同的价值观.它可能对RF的行为产生很大影响,因为它决定RF中每个树在每次拆分时考虑的特征数量.

criterion可能影响很小,但通常默认是好的.如果你有时间,试试吧.

在尝试这些参数时,请确保使用sklearn的GridSearch(最好是GridSearchCV,但数据集大小太小).

但是,如果我理解你的问题,你只有9个样本和3个类?大概每班3个样本?除非它们是好的,有代表性的记录,否则你的RF很可能会过多地填充少量数据.


lej*_*lot 18

关键部分通常有三个要素:

  • 估算数量 - 通常森林越大越好,这里过度拟合的可能性很小
  • 每棵树的最大深度(默认为无,导致完整树) - 减小最大深度有助于与过度拟合作斗争
  • 每个拆分的最大特征数(默认sqrt(d)) - 你可能会玩一个,因为它会显着改变整个树的行为.sqrt启发式通常是一个很好的起点,但实际的甜蜜点可能在其他地方

  • 你好,你能告诉我特征数量如何影响方差和过度拟合吗? (2认同)

Ana*_*pta 5

这篇精彩的文章详细介绍了可调参数,如何跟踪性能与速度之间的权衡,一些实用技巧以及如何执行网格搜索。