私は大規模なデータセットで単純な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つ目の目標:、私は同様の結果を得ることができます。
の両方にrandom_stateを設定してみてください、
roc_auc_score(y_test, cfc.predict_proba(X_test)[:,1])
とこれを比較し、あなたは同じランダムな状態でクロスバリデータを見てみましたか?あなたのデータはあらかじめシャッフルされているのですか? –