如何使用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)

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

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

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

我已经通读了文档,但如果有人在这方面有任何经验,我想知道哪些参数最适合调整并简要解释原因。

根据我的经验,根据重要性排序,sklearn RandomForestClassifier 有三个值得探索的功能:

  • n_estimators

  • max_features

  • criterion

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

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

criterion可能会产生很小的影响,但通常默认值没问题。如果您有时间,请尝试一下。

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

但是,如果我正确理解您的问题,那么您只有 9 个样本和 3 个类?大概每类 3 个样本?你的RF很可能会过度拟合那么少量的数据,除非它们是好的、有代表性的记录。

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

  • 估计器的数量 - 通常森林越大越好,这里过度拟合的可能性很小
  • 每棵树的最大深度(默认为无,导致全树) - 减少最大深度有助于对抗过度拟合
  • 每次拆分的最大功能(默认sqrt(d)) - 您可能会玩一玩,因为它会显着改变整个树的行为。 sqrt 启发式通常是一个很好的起点,但实际的最佳点可能在其他地方

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

n_estimators正如其他人所说,这很好。在增加过拟合时,它也擅长处理过度拟合。

但我认为min_sample_split处理小样本但大特征数据集中发生的过度拟合也很有帮助。

相关内容

  • 没有找到相关文章

最新更新