Scikit-learnを使用してExtraTreesClassifier(giniインデックス)をトレーニングしましたが、これは私のニーズにかなり合っています。それほど正確ではありませんが、10倍の交差検証を使用すると、AUCは0.95です。私は自分の仕事でこの分類器を使用したいと思います。私はMLを初めて使用するので、概念的におかしいことをお聞きした場合はご容赦ください。
いくつかのROC曲線をプロットしましたが、それによって、分類器がうまく機能し始める特定のしきい値があるようです。フィットした分類器にこの値を設定したいので、predictを呼び出すたびに、分類器はそのしきい値を使用し、FPおよびTPレートを信じることができます。
また、この投稿( scikit .predict()default threshold )に行きました。ここでは、しきい値は分類子の一般的な概念ではないと述べています。しかし、ExtraTreesClassifierにはpredict_probaメソッドがあり、ROC曲線もしきい値の定義に関連しているため、指定できるようになっているはずです。
パラメータも、そのために使用するクラス/インターフェイスも見つかりませんでした。 scikit-learnを使用して、トレーニング済みのExtraTreesClassifier(または他の任意のクラス)のしきい値を設定するにはどうすればよいですか?
どうもありがとう、コリス
これは私がやったことです:
model = SomeSklearnModel()
model.fit(X_train, y_train)
predict = model.predict(X_test)
predict_probabilities = model.predict_proba(X_test)
fpr, tpr, _ = roc_curve(y_test, predict_probabilities)
しかし、predictが真の陽性の0.4%に対応するしきい値を選択することに悩まされます(偽陽性はゼロです)。 ROC曲線は、真の陽性が約20%(約4%の偽陽性)である問題に対して、私が好むしきい値を示しています。次に、predict_probabilitiesをスキャンして、お気に入りのROCポイントに対応する確率値を見つけます。私の場合、この確率は0.21です。次に、独自の予測配列を作成します。
predict_mine = np.where(rf_predict_probabilities > 0.21, 1, 0)
そしてそこに行きます:
confusion_matrix(y_test, predict_mine)
私が欲しかったものを返します:
array([[6927, 309],
[ 621, 121]])
特定のコード例を使用せずに正確な答えを提供することは困難です。既に相互検証を行っている場合は、最適化するパラメーターとしてAUCを指定することを検討できます。
shuffle = cross_validation.KFold(len(X_train), n_folds=10, shuffle=True)
scores = cross_val_score(classifier, X_train, y_train, cv=shuffle, scoring='roc_auc')