回答:
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()
precision_recall_curve
F1全体を計算するように見えます。負の値のみを計算する方法は?
私はこの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]
この調整レシピについてのフィードバックをお待ちしております。
こちらが機能
クラス確率を生成します。次に、さまざまなメトリックを使用して、疑似コードに従って決定に使用するしきい値Pを調整します。
p(y)> Pの場合、y = 1、それ以外の場合y = 0 endif