web-dev-qa-db-ja.com

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つのカテゴリがあります。

これは理想的な条件とはほど遠いことは知っていますが、フィーチャの予測で最も重要なのはどの属性かを把握しようとしています。機能の重要性を最適化するには、どのパラメーターがTweakに最適ですか?

別のn_estimatorsと「重要な特徴」の量(つまり、feature_importances_ array)劇的に増加しました。

ドキュメントを読みましたが、これに関する経験がある人は、どのパラメーターを調整するのが最適かを知り、その理由を簡単に説明したいと思います。

33
O.rka

私の経験から、sklearn RandomForestClassifierを使って調査する価値のある3つの機能が重要度の順にあります。

  • n_estimators

  • max_features

  • criterion

n_estimatorsは本当に最適化する価値はありません。より多くの推定量を与えるほど、より良い結果が得られます。通常、500または1000で十分です。

max_featuresは、さまざまな値を調べる価値があります。 RFの動作に大きな影響を与える可能性があります。これは、RFの各ツリーが各分割で考慮するフィーチャの数を決定するためです。

criterionの影響はわずかですが、通常はデフォルトで問題ありません。時間があれば、試してみてください。

これらのパラメーターを試すときは、sklearnの GridSearch (GridSearchCVが望ましいが、データセットのサイズが小さすぎる)を使用してください。

しかし、あなたの質問を正しく理解していれば、サンプルは9つ、クラスは3つしかありませんか?おそらくクラスごとに3つのサンプルですか? RFは、適切な代表レコードでない限り、そのわずかな量のデータでオーバーフィットする可能性が非常に高いです。

54
Randy Olson

通常、重要な部分は3つの要素です。

  • 推定量の数-通常は森が大きいほど良い、ここで過剰適合する可能性は少ない
  • 各ツリーの最大深度(デフォルトはなし、完全なツリーにつながる)-最大深度の削減は、オーバーフィットとの戦いに役立ちます
  • 分割ごとの最大機能(デフォルトsqrt(d))-ツリー全体の動作を大幅に変更するため、少し遊んでみてください。 sqrtヒューリスティックは通常良い出発点ですが、実際のスイートスポットは他のどこかにあるかもしれません
18
lejlot

This すばらしい記事には、調整可能なパラメーターの詳細な説明、パフォーマンスと速度のトレードオフの追跡方法、実用的なヒント、およびグリッド検索の実行方法が記載されています。

5
Anant Gupta

n_estimatorsは他の人が言ったように良いものです。また、オーバーフィットを増やした場合の対処にも優れています。

しかし、私は思います min_sample_splitは、小さなサンプルではあるが大きな機能のデータセットで発生した過剰適合に対処する場合にも役立ちます。

1
Liu Bei