2016-07-01 14 views
4

ランダムフォレストをscikitで使用して学習します。 RFがデータに不備があり、予測結果が不良です。ランダムフォレストとの特定クロス検証

オーバーフィットは、RFのパラメータに依存しない: NBtree、Depth_Tree

オーバーフィットは、多くの異なるパラメータ(grid_search渡ってそれをテスト済み)で発生します。

対処方法: フィッティングに影響を与えるために、最初のデータを微調整し、いくつかの結果をダウンサンプリングします(手動でノイズサンプルを前処理します)。

Loop on random generation of RF fits, 

Get RF prediction on the data for prediction 
Select the model which best fits the "predicted data" (not the calibration data). 

このモンテ・カルロスは、非常にランダムな森に クロスバリデーションを行うための別の方法があるかどうかだけで不思議 、消費していますか? (すなわち、ハイパーパラメータ最適化ではない)。 scikit学習における任意の分類器で

+0

ドキュメントを読んでください。特に[this](http://scikit-learn.org/stable/modules/grid_search.html#grid-search)。 – sascha

+0

モデルがオーバーフィットしていると言っているときにoob_scoreや精度を使用していますか? –

+0

混乱行列を見ると偽陽性/陰性... トレーニングはOKです。 しかし、サンプルが一貫していません(通常は悪い、場合によってはOK)。 – Brook

答えて

13

クロスバリデーションをEDITED

は本当に簡単です:

from sklearn.ensemble import RandomForest 
from sklearn.cross_validation import cross_val_score 
import numpy as np 

clf = RandomForest() #Initialize with whatever parameters you want to 

# 10-Fold Cross validation 
print np.mean(cross_val_score(clf, X_train, y_train, cv=10)) 

あなたはグリッド検索を実行したい場合は、あなたがGridSearchCVクラスを経由して、それを簡単に行うことができます。そうするためには、マニュアルに従って

値として試して パラメータ設定のキーやリストなどのパラメータ名(文字列)を持つ辞書、あるいは、そのようなリストであるparam_gridを提供する必要があります の場合、リスト内の各辞書にまたがるグリッドは、 となります。これにより、パラメータ の任意のシーケンスの検索が可能になります。

次のようにそのため、おそらく、あなたはあなたのparam_gridを定義することができます。

from sklearn.grid_search import GridSearchCV 

grid_clf = GridSearchCV(clf, param_grid, cv=10) 
grid_clf.fit(X_train, y_train) 

を次のように次にあなたがGridSearchCVクラスを使用することができます

param_grid = { 
       'n_estimators': [5, 10, 15, 20], 
       'max_depth': [2, 5, 7, 9] 
      } 

その後、grid_clf. best_estimator_を使用して最適なモデルを得ることができますし、最良のパラメータはgrid_clf. best_params_です。同様に、グリッドの得点はgrid_clf.grid_scores_

となります。

+0

質問はハイパーパラメータ最適化を参照していません。 – Brook

関連する問題