scikit-learn
Эксплуатационная характеристика приемника (ROC)
Поиск…
Введение в РПЦ и АУК
Пример показателя эксплуатационной характеристики приемника (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