Класифікатор з регульованою точністю та відкликанням


11

Я працюю над проблемою бінарної класифікації, де набагато важливіше не мати помилкових позитивів; досить багато помилкових негативів - це нормально. Наприклад, я використовував купу класифікаторів у sklearn, але я думаю, що жоден з них не має можливості чітко регулювати компроміс з точністю нагадування (вони дають досить хороші результати, але не регулюються).

Які класифікатори мають регульовану точність / відкликання? Чи можна впливати на точність / відкликання компромісу на стандартних класифікаторах, наприклад, Random Forest або 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()

Ідеально, дякую! Не впевнений, як я пропустив це :)
Олексій I

Схоже, precision_recall_curveобчислити весь F1. Як розрахувати лише негативні?
Мітріль

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

Ось як би ви використали нещодавно вивчений мінімальний поріг для коригування свого прогнозування (щоб у іншому випадку ви просто отримали б передбачення дзвінка (X_test))

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

Будемо раді почути ваші відгуки про цей рецепт коригування.


1

Ось функція

http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html#sklearn.ensemble.RandomForestClassifier.predict_proba

що виробляє ймовірності класу. Потім використовуйте різні показники, щоб регулювати поріг, P, який ви використовуєте в рішенні, дотримуючись псевдо-код

якщо p (y)> P, то y = 1 інше y = 0 endif

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.