web-dev-qa-db-ja.com

Python sklearn?

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ですが、それらを調整する方法がよくわかりません。

前もって感謝します!

27
Munichong

@Falcon w.r.tに同意します。データセットのサイズ。主な問題は、データセットのサイズが小さいことです。可能であれば、データセットのサイズが大きくなると予測されるランダムパターンがかき消され始めるため、できる限り多くのデータを取得することができます。

そうは言っても、次のパラメーターを見ていきます。

  1. n_estimators:@Falconが間違っています。一般的に、より多くのツリー可能性は低いアルゴリズムはオーバーフィットします。 これを増やすを試してください。この数値が低いほど、モデルは決定木に近くなり、機能セットが制限されます。
  2. max_features:この数を減らしてみてください(機能の数の30〜50%を試してください)。これにより、各ツリーにランダムに割り当てられる機能の数が決まります。小さければ小さいほど、オーバーフィットする可能性は低くなりますが、小さすぎるとフィット不足になり始めます。
  3. max_depth:これを試してください。これにより、学習したモデルの複雑さが軽減され、過剰な適合リスクが低減されます。 5から10のように小さく始めてみて、最高の結果が得られるように増やしてください。
  4. min_samples_leaf:これを1より大きい値に設定してみてください。これはmax_depthパラメータと同様の効果があります。つまり、リーフがそれぞれその数のサンプルを取得すると、ブランチは分割を停止します。

この作業を行うときは科学的であることに注意してください。 3つのデータセット、トレーニングセット、個別の「開発」データセットを使用してパラメーターを調整し、最適なパラメーターで最終モデルをテストするテストセットを使用します。一度に1つのパラメーターのみを変更し、結果を評価します。または、sklearn gridsearchアルゴリズムを試して、これらのパラメーターを一度に検索します。

53
Simon