2016-09-24 8 views
0

私は大規模なデータセットで単純なRandomForestClassifier()を実行しようとしています。私は通常、最初にtrain_test_splitを使用してクロスバリデーションを行い、次にcross_val_scoreを使い始める。scikit-learn - train_test_splitとShuffleSplitは非常に異なる結果を返します

しかし、私はこれらの2つのアプローチとは非常に異なる結果を得ていますが、その理由を理解することはできません。

cfc = RandomForestClassifier(n_estimators=50) 

scores = cross_val_score(cfc, X, y, 
         cv = ShuffleSplit(len(X), 1, 0.25), 
         scoring = 'roc_auc') 
print(scores) 
>>> [ 0.88482262] 

と、この:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25) 

cfc = RandomForestClassifier(n_estimators=50) 
cfc.fit(X_train, y_train) 

roc_auc_score(y_test, cfc.predict(X_test)) 
>>> 0.57733474562203269 

そして、まだスコアが広く異なっている私の理解これらは、これら二つのスニペットがまったく同じことを行うべきであるということです。 (スコアは非常に代表的なものであり、私は多くの試行にわたって同じ挙動を観察した)。

これは何故でしょうか? ..私はcross_val_score結果を信頼するように誘惑していますが、私はどこかめちゃくちゃわけではないことを確認したい

**更新**私が気づい

その私がroc_auc_scoreへの引数の順序を逆にするとき

roc_auc_score(cfc.predict(X_test), y_test) 

しかし、ドキュメントが明示的に最初の要素は実数値であることを述べて、2つ目の目標:、私は同様の結果を得ることができます。

+0

の両方にrandom_stateを設定してみてください、roc_auc_score(y_test, cfc.predict_proba(X_test)[:,1])

  • とこれを比較し、あなたは同じランダムな状態でクロスバリデータを見てみましたか?あなたのデータはあらかじめシャッフルされているのですか? –

  • 答えて

    0

    私が問題だかわからないんだけど、ここであなたが試みることができる二つのものがあります:

    1. ROC AUCは、適切な評価のための予測確率ではなく、ハードのスコア(すなわち、0または1)を必要とします。したがって、cross_val_scoreを変更して確率で動作させてください。詳細はthis linkの最初の回答を確認できます。

      xysmasが言ったようにcross_val_scoreroc_auc_score