Это 17-й день моего участия в августовском испытании обновлений. Узнайте подробности события:Испытание августовского обновления
0. Обзор Качество модели относительное. Какая модель хороша, зависит от алгоритма и данных, а также от требований задачи.
- Показатели производительности для задач регрессии
среднеквадратическая ошибка Среднеквадратическая ошибка — это наиболее часто используемый показатель производительности для задач регрессии, представляющий ошибку между прогнозируемым значением и фактическим значением. рисунок
- Показатели производительности для задач классификации
Предсказание реальности Положительный пример Отрицательный пример Положительный пример TP (истинный пример) FN (ложноотрицательный пример) Контрпример FP (ложноположительный пример) TN (истинно отрицательный пример) Точность: доля правильно классифицированных образцов от общего числа образцов TP+FN/общее количество случаев Точность: доля правильно предсказанных выборок, которые на самом деле являются правильными TP/(TP+FP). Коэффициент отзыва: доля правильных прогнозов в положительном примере TP/(TP+FN) F1: среднее значение точности и отзыва ОКР и АУК Способ, которым классифицируют многие методы машинного обучения, заключается в создании реального значения (или прогноза вероятности) для тестовой выборки и сравнении его с заданным порогом, который больше порога и классифицируется как положительный, а меньше порога классифицируется как отрицательный. . Мы можем отсортировать выборки по размеру реального значения, то есть по вероятности быть положительным примером. Процесс классификации заключается в том, чтобы найти «точку усечения» в этой сортировке и оценить первую часть как положительный пример, а вторую часть как отрицательный пример. Кривая ROC использует каждое реальное значение в качестве порога и измеряет производительность модели. Он принимает истинную частоту случаев TPR = TP / (TP + FN) по оси абсцисс, а частоту ложноположительных результатов FPR = FP / (TN + FP) по оси абсцисс. Каждый раз реальное значение последовательно используется в качестве порога для тестирования. Знаменатель истинной скорости и отрицательной скорости - это фактическое количество положительных и отрицательных примеров, которое является фиксированным числом, поэтому они пропорциональны TP и FP. рисунок Изображение выше является примером ROC. Точка (0, 1) соответствует идеальной модели, разделяющей все положительные примеры перед отрицательными. Оранжевая линия соответствует фактической кривой ROC. В начале значение порога высокое, только первые несколько чисел считаются положительными примерами, количество ложных срабатываний равно 0, а частота ложных срабатываний равна 0. По мере снижения порога больше образцов классифицируются как положительные примеры, увеличивается количество истинных и ложноположительных примеров, а также увеличивается доля истинных и ложноположительных примеров. Когда порог увеличивается до определенной степени, все образцы, ранжированные позже, являются фактически отрицательными примерами. Таким образом, истинная частота случаев больше не увеличивается, в любом случае частота случаев постепенно увеличивается до 1. Получить последовательность fpr, tpr может использовать sklearn.metrics в roc_curve([фактический результат], [оценка]) AUC — это площадь под линией ROC-кривой, которая измеряет ранжирование качества прогноза и является всеобъемлющим индикатором. Когда AUC=1, кривая ROC представляет собой ломаную линию, соединенную (0, 0), (0, 1), (1, 1), представляющую идеальное упорядочение всех положительных примеров перед отрицательными примерами. Когда AUC = близко к 1/2, ROC близок к прямой, соединяющей (0, 0) и (1, 1), что означает, что метод сортировки близок к полностью случайному. Способ вычисления auc — применить roc_auc([fpr],[tpr]) в sklearn.metrics. частота ошибок, чувствительная к стоимости Различные последствия для неправильного типа, например, пациент диагностирован как здоровый (пропущенное лечение) и здоровый диагностирован как пациент (плата за обследование). В соответствии с различными типами ошибок FP и FN добавляются в определенной пропорции и делятся на количество выборок, что является коэффициентом ошибок, зависящим от стоимости.
- пример кода
Нарисуйте кривую ROC и рассчитайте значение AUC.
import matplotlib.pyplot as plt from sklearn import svm, datasets from sklearn.metrics import roc_curve, auc from sklearn.model_selection import train_test_split from sklearn.preprocessing import label_binarize from sklearn.multiclass import OneVsRestClassifier
Импорт набора данных радужной оболочки
iris = datasets.load_iris() X = iris.data y = iris.target
двоичный вывод
y = label_binarize(y, classes=[0, 1, 2]) n_classes = y.shape[1]
Разделить тренировочный набор и тестовый набор
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.5, random_state=0)
Применить SVM для оценки
classifier = OneVsRestClassifier(svm.SVC(kernel='linear', probability=True,)) y_score = classifier.fit(X_train, y_train).decision_function(X_test)
Рассчитайте кривую ROC и AUC для каждого класса
fpr = дикт() тпр = дикт() roc_auc = дикт() для я в диапазоне (n_classes): # Здесь мы используем roc_curve для получения значений fpr и tpr каждой точки.Параметры представляют собой i-й столбец фактических результатов и оценок тестовых образцов. fpr[i], tpr[i], _ = roc_curve(y_test[:, i], y_score[:, i]) # Здесь используйте функцию auc, чтобы получить auc каждой точки roc_auc[i] = auc(fpr[i], tpr[i]) plt.figure() лв = 2
Нарисуйте кривую ROC и отметьте значение AUC.
plt.plot(fpr[1], tpr[1], color='darkorange', lw=lw, label='ROC curve (area = %0.4f)' % roc_auc[1]) 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()
Использованная литература: «Машинное обучение» Чжоу Чжихуа
sk-learn официальная документация
Операция: Постройте кривую roc для набора данных о раке молочной железы и рассчитайте значение auc.
import matplotlib.pyplot as plt from sklearn import svm, datasets from sklearn.metrics import roc_curve, auc from sklearn.model_selection import train_test_split from sklearn.multiclass import OneVsRestClassifier
Импорт набора данных о раке молочной железы
data = datasets.load_breast_cancer() X = data.data y = data.target
Разделить тренировочный набор и тестовый набор
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.5, random_state=0)