Поиск…


Введение в РПЦ и АУК

Пример показателя эксплуатационной характеристики приемника (ROC) для оценки качества выходного сигнала классификатора.

Кривые ROC обычно имеют истинную положительную скорость по оси Y и ложную положительную скорость по оси X. Это означает, что верхний левый угол графика - это «идеальная» точка - ложная положительная норма нуля и истинная положительная скорость одного. Это не очень реалистично, но это означает, что большая площадь под кривой (AUC) обычно лучше.

«Крутизна» кривых ROC также важна, поскольку она идеальна для максимизации истинной положительной скорости при минимизации ложной положительной скорости.

Простой пример:

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

Произвольные значения y - в реальном случае это предсказанные целевые значения ( model.predict(x_test) ):

y = np.array([1,1,2,2,3,3,4,4,2,3])

Оценки - это средняя точность данных данных и меток ( model.score(X,Y) ):

scores = np.array([0.3, 0.4, 0.95,0.78,0.8,0.64,0.86,0.81,0.9, 0.8])

Вычислите кривую ROC и AUC:

fpr, tpr, thresholds = metrics.roc_curve(y, scores, pos_label=2)
roc_auc = metrics.auc(fpr, tpr)

Заговор:

plt.figure()
plt.plot(fpr, tpr, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], 'k--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic example')
plt.legend(loc="lower right")
plt.show()

Выход:

введите описание изображения здесь

Примечание: источники были взяты из этих ссылок1 и link2

Показатель ROC-AUC с переопределением и перекрестной проверкой

Для расчета оценки ROC-AUC (площадь под кривой) нужны предсказанные вероятности. cross_val_predict использует методы predict классификаторов. Чтобы иметь возможность получить оценку ROC-AUC, можно просто подклассифицировать классификатор, переопределяя метод predict , чтобы он действовал как predict_proba .

from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.cross_validation import cross_val_predict
from sklearn.metrics import roc_auc_score

class LogisticRegressionWrapper(LogisticRegression):
    def predict(self, X):
        return super(LogisticRegressionWrapper, self).predict_proba(X)

X, y = make_classification(n_samples = 1000, n_features=10, n_classes = 2, flip_y = 0.5)

log_reg_clf = LogisticRegressionWrapper(C=0.1, class_weight=None, dual=False,
             fit_intercept=True)

y_hat = cross_val_predict(log_reg_clf, X, y)[:,1]

print("ROC-AUC score: {}".format(roc_auc_score(y, y_hat)))

выход:

ROC-AUC score: 0.724972396025


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow