精度と再現率を調整可能な分類子


11

私は二値分類問題に取り組んでいますが、誤検知がないことがより重要です。かなり多くの偽陰性が問題ありません。たとえば、sklearnで一連の分類子を使用しましたが、精度と再現率のトレードオフを明示的に調整する機能はありません(かなり良い結果が得られますが、調整はできません)。

どの分類子が調整可能な精度/再現率を備えていますか?ランダムフォレストやAdaBoostなどの標準的な分類子の精度と再現率のトレードオフに影響を与える方法はありますか?

回答:


12

scikit-learnの分類子のほとんどすべてが、決定値を(decision_functionまたはを介してpredict_proba)与えることができます。

決定値に基づいて、精度再現率および/またはROC曲線を計算することは簡単です。scikit-learnは、メトリックサブモジュールでこれらの機能を提供します

あなたが適切なコンテンツを持っているdataと仮定した最小限の例labels

import sklearn.svm
import sklearn.metrics
from matplotlib import pyplot as plt

clf = sklearn.svm.LinearSVC().fit(data, labels)
decision_values = clf.decision_function(data)

precision, recall, thresholds = sklearn.metrics.precision_recall_curve(labels, decision_values)

plt.plot(recall, precision)
plt.show()

パーフェクト、ありがとう!私はそれをどのように逃したかわからない:)
Alex I

precision_recall_curveF1全体を計算するように見えます。負の値のみを計算する方法は?
ミスリル2017年

6

私はこのQにぶつかる前にこれを自分で解決したので、自分の解決策を共有することにしました。

マーククリーセンが提案したのと同じアプローチを使用しますが、リコールをトレードオフして精度軸をより高く移動するために分類子を調整する方法に関する実際の質問に答えます。

X_testはデータで、y_testは真のラベルです。分類器はすでに取り付けられているはずです。

y_score = clf.decision_function(X_test)

prcsn,rcl,thrshld=precision_recall_curve(y_test,y_score)

min_prcsn=0.25 # here is your precision lower bound e.g. 25%
min_thrshld=min([thrshld[i] for i in range(len(thrshld)) if prcsn[i]>min_prcsn])

そして、これは、新しく学習したd最小しきい値を使用して予測を調整する方法です(そうしないと、predict(X_test)を呼び出すだけです)。

y_pred_adjusted=[1 if y_s>min_thrshld else 0 for y_s in y_score]

この調整レシピについてのフィードバックをお待ちしております。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.