정밀도와 리콜을 조정할 수있는 분류기


11

나는 거짓 긍정을 갖지 않는 것이 훨씬 더 중요한 이진 분류 문제를 연구하고 있습니다. 많은 거짓 부정이 괜찮습니다. 예를 들어 sklearn에서 많은 분류기를 사용했지만 그중 어느 것도 정밀 리콜 트레이드 오프를 명시 적으로 조정할 수있는 능력이 없다고 생각합니다 (그들은 꽤 좋은 결과를 얻지 만 조정할 수는 없습니다).

조정 가능한 정밀도 / 리콜 기능이있는 분류기는 무엇입니까? Random Forest 또는 AdaBoost와 같은 표준 분류기의 정밀도 / 리콜 트레이드 오프에 영향을 줄 수있는 방법이 있습니까?

답변:


12

대부분의 (로 결정 값을 줄 수의 분류를 scikit 배우기 decision_function또는 predict_proba).

의사 결정 값을 기반으로 정밀 회수 및 / 또는 ROC 곡선을 계산하는 것이 간단합니다. scikit-learn은 해당 기능을 메트릭 하위 모듈 에 제공합니다 .

최소한의 예를 들어, 당신은 가정 datalabels적절한 내용 :

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_curve전체 F1을 계산하는 것 같습니다 . 부정적인 것을 계산하는 방법?
Mithril

6

나는이 Q에 부딪 치기 전에 이것을 스스로 해결 했으므로 솔루션을 공유하기로 결정했습니다.

Marc Claesen이 제안한 것과 동일한 접근 방식을 사용하지만 리콜에서 정밀 축 거래를 높이기 위해 분류기를 조정하는 방법에 대한 실제 질문에 대답합니다.

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])

그리고 이것은 새로 배운 최소 임계 값을 사용하여 예측을 조정하는 방법입니다 (그렇지 않으면 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.