Как прочитать эту кривую ROC и установить пользовательские пороги? - PullRequest
0 голосов
/ 05 октября 2018

Используя этот код:

from sklearn import metrics
import numpy as np
import matplotlib.pyplot as plt

y_true = [1,0,0]
y_predict = [.6,.1,.1]

fpr, tpr, thresholds = metrics.roc_curve(y_true, y_predict , pos_label=1)

print(fpr)
print(tpr)
print(thresholds)

# Print ROC curve
plt.plot(fpr,tpr)
plt.show()


y_true = [1,0,0]
y_predict = [.6,.1,.6]

fpr, tpr, thresholds = metrics.roc_curve(y_true, y_predict , pos_label=1)

print(fpr)
print(tpr)
print(thresholds)

# Print ROC curve
plt.plot(fpr,tpr)
plt.show()

построены следующие кривые roc:

enter image description here

scikit learn устанавливает пороги, ноЯ хотел бы установить пользовательские пороги.

Например, для значений:

y_true = [1,0,0]
y_predict = [.6,.1,.6]

Возвращаются следующие пороги:

[1.6 0.6 0.1]

Почему значение 1.6 не существуетв кривой РПЦ?Является ли порог 1.6 избыточным в этом случае, поскольку вероятности находятся в диапазоне 0-1?Можно ли установить собственные пороговые значения: .3, .5, .7, чтобы проверить, насколько хорошо классификатор работает в этом случае?

Обновление:

С https://sachinkalsi.github.io/blog/category/ml/2018/08/20/top-8-performance-metrics-one-should-know.html#receiver-operating-characteristic-curve-roc Я использовал тот же xи прогнозируемые значения:

from sklearn import metrics
import numpy as np
import matplotlib.pyplot as plt

y_true = [1,1,1,0]
y_predict = [.94,.87,.83,.80]

fpr, tpr, thresholds = metrics.roc_curve(y_true, y_predict , pos_label=1)

print('false positive rate:', fpr)
print('true positive rate:', tpr)
print('thresholds:', thresholds)

# Print ROC curve
plt.plot(fpr,tpr)
plt.show()

, который создает этот график:

enter image description here

График отличается от ссылочного графика в блоге, также порогиразличаются:

enter image description here

Кроме того, пороговые значения, возвращаемые при использовании scikit metrics.roc_curve, реализованы так: thresholds: [0.94 0.83 0.8 ].Должен ли Scikit возвращать ту же кривую roc, что и в тех же точках?Я должен сам реализовать кривую roc вместо того, чтобы полагаться на реализацию scikit, так как результаты разные?

1 Ответ

0 голосов
/ 05 октября 2018

Пороговые значения не будут отображаться на кривой ROC.Документация Scikit-Learn гласит:

Порог [0] не представляет прогнозируемых экземпляров и произвольно установлен на максимум (y_score) + 1

Если y_predict содержит0.3, 0.5, 0.7, тогда эти пороги будут проверяться функцией metrics.roc_curve.

Обычно эти шаги выполняются при расчете ROC кривой

1.Сортировать y_predict в порядке убывания.

2.Для каждого из показателей вероятности (скажем, τ_i) в y_predict, если y_predict> = τ_i, то считайте эту точку данных положительной.

PS: Если мы имеем NТочки данных, тогда у нас будет N порогов (если комбинации y_true и y_predict уникальны)

3.Для каждого из значений y_predicted (τ_i) рассчитайте TPR и FPR.

4.Составьте ROC, взяв N (количество точек данных) TPR, пары FPR

Вы можете обратиться к этому блогу для получения подробной информации

...