2017-01-26 3 views
7

私はscikit-learnを使ってExtraTreesClassifier(giniインデックス)を訓練しました。それは私のニーズにかなり合っています。それほど正確ではないが、10倍のクロスバリデーションを用いると、AUCは0.95である。この分類器を自分の仕事に使用したいと思います。私はMLにはかなり新しいので、あなたに何か概念的に間違っていることを尋ねるなら、私を許してください。ROCの結果に基づいてsklearnクラシファイアのしきい値を設定するにはどうすればよいですか?

私はいくつかのROCカーブをプロットしました。それによって、私の分類器がうまく動作し始める特定の閾値があるようです。この値をフィット分類器に設定したいので、予測を呼び出すたびに分類器がそのしきい値を使用し、FPとTPレートを信じることができます。

私はこの投稿(scikit .predict() default threshold)にも来ました。ここでは、しきい値は分類子の一般的な概念ではないと述べています。しかし、ExtraTreesClassifierにはpredict_probaというメソッドがあり、ROCカーブもthresdholdsの定義に関連しているので、それを指定する必要があります。

パラメータやそれを使用するためのクラス/インターフェイスが見つかりませんでした。 scikit-learnを使用して、訓練されたExtraTreesClassifier(またはその他のもの)のしきい値を設定するにはどうすればよいですか?

多くのおかげで、 Colis

答えて

2

これは私がやっていることです:あなたはすでにクロス検証をやっている場合は、最適化するためのパラメータとして、AUCを指定して検討するかもしれません真陽性の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]]) 
0

それは、任意の特定のコード例なしに正確な答えを提供することは困難です。

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) 

は、しかし、私が選ぶの予測その悩まされています:

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') 
+0

こんにちはホワイト、お返事に感謝。私はroc_aucと他のメトリックを選択して最適化しました(私はLR +を最適化するカスタムスコアラーを作成しました)。私の主な疑問は、私がpredict()を呼び出すときの閾値としてROC曲線上の点によって示される閾値の1つを選択する方法ですか?私の質問は、()に関するものです。 通常はプロバスを使用しないので、これは樹木に利用できるかどうかはわかりません。しかし、他の方法のためにそれを設定する方法は、次に? – Colis

関連する問題