一般に、分類子のパフォーマンスは精度を使用して比較されます。これは、正しく分類されたインスタンスの数をインスタンスの総数で割った尺度です。ただし、学習データから、アンサンブル学習またはバギング手法を使用している場合、分類器から予想されるエラーのより良い近似を取得できます。
アウトオブバッグエラー
バツ私
sklearnにoobを実装するには、Random Forestsオブジェクトを作成するときに指定する必要があります。
from sklearn.ensemble import RandomForestClassifier
forest = RandomForestClassifier(n_estimators = 100, oob_score = True)
その後、モデルを訓練することができます
forest.fit(X_train, y_train)
print('Score: ', forest.score(X_train, y_train))
スコア:0.979921928817
予想どおり、トレーニングセットを評価するときのモデルの精度は非常に高いです。ただし、これは無意味です。データを過剰に適合させる可能性があり、モデルがゴミになるからです。ただし、out-of-bagスコアは次のように使用できます。
print(forest.oob_score_)
0.86453272101
これは、それらが省略されたツリーのみを使用してトレーニングセット内のインスタンスを評価する際の精度です。次に、テストセットのスコアを次のように計算します。
print('Score: ', forest.score(X_test, y_test))
スコア:0.86517733935
oobで測定された精度は、テストセットで得られた精度と非常に似ていることがわかります。したがって、oobの精度は、単なるスコアではなく、モデルのパフォーマンスを評価するためのより優れたメトリックであるという理論に従っています。これは、バギングモデルの結果であり、他のタイプの分類器では実行できません。
異なるメトリックを使用したoobの計算
はい、できます!ただし、コードの構造は正確に依存します。どのようにoobとAUCをcross_val_score
関数と一緒に含めることができるかわかりません。ただし、クロス検証フォールドを手動で実行している場合は、次の操作を実行できます。sklearnのランダムフォレストアルゴリズムは、oobの決定関数を次のように提供します。
print(forest.oob_decision_function_)
クラスは、次を使用して取得できます。
from sklearn import metrics
pred_train = np.argmax(forest.oob_decision_function_,axis=1)
次に、以下を使用してAUCを計算できます
metrics.roc_auc_score(y_train, pred_train)
0.86217157846471204