11 / 27 · Линейная классификация
Метрики классификации
Как измерять классификатор, когда ошибки неравноценны: матрица ошибок, почему доля правильных ответов не работает на несбалансированных данных, точность, полнота и F1 и выбор порога, пороги из стоимости ошибок, ROC-кривая и доказательство того, что площадь под ней — вероятность поставить положительный пример выше отрицательного, кривая точность–полнота и средняя точность, когда что предпочесть и доверительные интервалы для каждой метрики.
Логистическая регрессия · Валидация и переобучение · Условная вероятность · Доверительные интервалы и бутстрэп
На этой странице 15
Заметка о логистической регрессии дала вероятности, а классификаторы из заметки о линейных классификаторах дают оценки. Остаются два вопроса. Где поставить порог, который превращает оценку в решение? И насколько хорош классификатор? Доля правильных ответов (accuracy) — очевидный ответ на второй вопрос, и она отказывает ровно там, где классификация важнее всего: мошенничество, болезни, дефекты и отток клиентов редки, и модель, которая никогда ничего не помечает, почти всегда права. В этой заметке мы построим метрики, которые видят ошибки, скрытые долей правильных ответов, покажем, как стоимость ошибок фиксирует порог, и докажем тождество, которое делает площадь под ROC-кривой метрикой ранжирования.
Обозначения. Классификатор ставит каждому примеру оценку (score) , которая больше для «более положительных» примеров (вероятность, логит, отступ). Порог (threshold) превращает её в решение, , — это соглашение roc_curve и precision_recall_curve в scikit-learn. Метки , где 1 — положительный класс, тот, который ищут. В тестовой выборке положительных и отрицательных примеров, а — распространённость (prevalence), доля положительных.
Матрица ошибок#
При фиксированном пороге каждый тестовый пример попадает в одну из четырёх клеток матрицы ошибок (confusion matrix):
| предсказан положительным, | предсказан отрицательным, | |
|---|---|---|
| на самом деле положительный, | истинно положительный (true positive, TP) | ложноотрицательный (false negative, FN) |
| на самом деле отрицательный, | ложноположительный (false positive, FP) | истинно отрицательный (true negative, TN) |
Любая пороговая метрика — функция этих четырёх чисел. При фиксированных размерах классов (, ) свободны только два из них, поэтому для описания классификатора при одном пороге нужны два числа — по одному на каждый вид ошибки.
Разобранный пример. Скрининговый тест из курса теории вероятностей обнаруживает болезнь у 90% больных и даёт ложную тревогу у 9% здоровых, а больны 1% людей. Среди 10 000 человек больны 100, так что и ; из 9900 здоровых и . Тест прав насчёт людей. «Тест», который объявляет всех здоровыми, прав насчёт 99%.
Доля правильных ответов и ловушка дисбаланса#
Доля правильных ответов равна , и если разбить число верных ответов по истинному классу, видно, что именно она взвешивает:
Это среднее долей успехов на двух классах, взвешенное распространённостью. При качество на положительных вносит в это число одну сотую. Поэтому любую долю правильных ответов нужно сравнивать с базовым уровнем мажоритарного класса (majority baseline) — долей правильных ответов при постоянном предсказании большего класса.
Ловушка работает и в обратную сторону: требования, которые звучат скромно в терминах редкого класса, соответствуют долям правильных ответов, которые звучат абсурдно. Среди 100 000 транзакций с 2% мошеннических детектор, который находит 90% из 2000 мошеннических транзакций (, ) и прав в 90% случаев, когда поднимает тревогу (), делает 400 ошибок — доля правильных ответов 99.6%. В разделе «Код» логистическая регрессия на данных с 5.9% положительных достигает доли правильных ответов при пороге по умолчанию при базовом уровне мажоритарного класса : она находит 30 из 443 положительных.
Точность, полнота и F1#
Положительный класс описывают две доли:
Точность (precision) спрашивает, сколько тревог настоящие; полнота (recall), которую также называют чувствительностью (sensitivity) или долей истинно положительных (true positive rate, TPR), — сколько настоящих случаев вызывают тревогу. Они берут условие по разным событиям, и разница между ними — эффект базовой частоты из формулы Байеса. Полнота — свойство классификатора только на положительных примерах. Точность подмешивает отрицательные, а значит, и распространённость: с долей ложных срабатываний (false positive rate)
У скринингового теста полнота равна , а точность — : девять тревог из десяти ложные.
Каждую из двух величин легко сделать идеальной по отдельности: если пометить всё, полнота равна 1, а если пометить только один самый уверенный случай, точность обычно равна 1. F1-мера (F1 score) объединяет их через среднее гармоническое,
которое остаётся близким к меньшей из двух; у скринингового теста . Взвешенная версия считает полноту в раз важнее точности (van Rijsbergen, 1979):
даёт , отдаёт предпочтение полноте, — точности; у скринингового теста . Форма через счётчики определена, если только не — выборка без положительных примеров и без тревог, где scikit-learn возвращает значение своего аргумента zero_division. F1 совсем не учитывает истинно отрицательные примеры, что делает её полезной, когда их много и они неинтересны, и обманчивой, когда это не так. При нескольких классах эти метрики считают по каждому классу и усредняют — макро- или микроусреднением, как показывает заметка об оценке в NLP для текстов и развивает заметка о многоклассовой классификации.
Выбор порога#
Матрица ошибок относится к одному порогу; классификатор — это всё семейство порогов. Повышение помечает меньше примеров: полнота может только падать, а точность обычно растёт, хотя и не монотонно, поскольку каждый выбывший отрицательный пример её повышает, а каждый выбывший положительный — понижает. Где остановиться — решение о приложении, которое принимают на валидационной выборке и никогда на тестовой (заметка о валидации):
- Нижняя граница полноты. Скрининг болезни: найти не меньше 95% случаев и среди порогов, которые это обеспечивают, взять порог с наилучшей точностью.
- Нижняя граница точности. Оповещения, которые должен прочитать человек: хотя бы половина из них должна быть настоящей.
- Бюджет. Колл-центр может сделать 800 звонков на 4000 клиентов: ранжируем по оценке и звоним первым 800, так что порог — 800-я по величине оценка, а метрика — точность среди первых , precision@k. Если эту оценку делят несколько клиентов, выберет больше 800, и кому звонить, решает правило разрыва совпадений — случайное или по второму ключу.
- Наилучшая F1. Когда ничего другого не задано. Для откалиброванных вероятностей порог, максимизирующий F1, равен половине максимальной F1 (Lipton, Elkan and Narayanaswamy, 2014), поэтому он никогда не выше 0.5 и низок, когда задача трудная.
В разделе «Код» порог, максимизирующий F1 на валидационной выборке, равен (половина валидационной F1 равна — близко, поскольку модель откалибрована лишь приближённо). На тестовой выборке он поднимает F1 с при пороге по умолчанию до .
Порог определяется стоимостью ошибок#
Когда последствиям двух видов ошибок можно назначить цену, порог следует из вероятностей. Пусть ложноотрицательный ответ стоит , ложноположительный — , а верные решения ничего не стоят. Для примера с откалиброванной вероятностью пометить его стоит в среднем , а пропустить — . Помечаем, когда первое меньше:
(Elkan, 2001). Равные стоимости дают , порог по умолчанию; любые другие его сдвигают. Если пропущенное мошенничество стоит 500, а лишняя проверка законной транзакции 5, то : проверять нужно каждую транзакцию с вероятностью мошенничества выше 1%. Здесь проверка, поймавшая мошенничество, считается бесплатной. Если же каждая проверка стоит 5, пометка стоит 5 при любом , пропуск — , и порог равен , почти тот же. В разделе «Код» это правило снижает суммарную стоимость на тестовой выборке с 206 615 при пороге 0.5 и 127 520 при оптимальном по F1 пороге до 36 435. Правилу нужны откалиброванные вероятности — здесь и окупается предыдущая заметка; с необработанными оценками порог приходится искать на валидационных данных.
Дисбаланс сам по себе — не проблема. Откалиброванная модель с порогом из стоимости ошибок уже справляется с редкими классами. Пересэмплирование обучающей выборки или взвешивание классов (class_weight в scikit-learn) меняет вероятности, которые выучивает модель, а не правило решения: при весе на положительных примерах точка минимума взвешенной логистической функции потерь в точке равна вместо , и порог 0.5 на ней — это порог на . Так что взвешивание — ещё один способ сдвинуть порог ценой вероятностей, которые больше не откалиброваны; оно всё же может помочь, когда ёмкость модели лучше потратить на редкий класс.
ROC-кривая#
Порог на оценках: что видят ROC и точность
Когда убывает от до , классификатор переходит от «не помечать ничего» к «помечать всё». ROC-кривая (receiver operating characteristic) откладывает по пути полноту против доли ложных срабатываний, от до . Обе координаты берут условие по истинному классу, как показывает верхняя панель рисунка: это площади под двумя условными распределениями оценок по классам, и ни одна из них не зависит от распространённости.
На конечной тестовой выборке кривая ступенчатая. Упорядочим примеры по убыванию оценки и пройдём по списку: каждый положительный пример сдвигает кривую вверх на , каждый отрицательный — вправо на (равные оценки у положительного и отрицательного примеров сдвигают её по диагонали). Идеальное ранжирование поднимается до , прежде чем сдвинуться вправо; случайное ранжирование остаётся около диагонали; кривая ниже диагонали становится кривой выше неё, если поменять знак оценок.
Разобранный пример. Восемь тестовых примеров, упорядоченных по оценке:
| Оценка | 0.9 | 0.8 | 0.7 | 0.6 | 0.4 | 0.3 | 0.2 | 0.1 |
|---|---|---|---|---|---|---|---|---|
| Метка | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 |
При ступеньки идут так: вверх, вверх, вправо, вверх, вправо, вверх, вправо, вправо. Площадь под ними — сумма четырёх вертикальных полос ширины , по одной под каждым шагом вправо, с высотами : площадь равна .
Из построения следуют два свойства. Кривая зависит только от порядка оценок, поэтому любое строго возрастающее преобразование, включая калибровочное отображение Платта, её не меняет (отображение, которое лишь не убывает, как изотоническая регрессия, может создать совпадения оценок, а они дают в AUC ниже): ROC-кривая измеряет ранжирование, а не вероятности. И она не зависит от распространённости — в этом её сила, когда распространённость при применении неизвестна, и её слабость, когда положительные редки, на что уже намекает нижняя панель рисунка.
Стоимость на плоскости ROC. Ожидаемая стоимость на один пример в рабочей точке равна . Точки равной стоимости лежат на прямых с наклоном , и лучший порог — там, где самая высокая из таких прямых касается кривой (Fawcett, 2006). Дорогие пропуски или частые положительные делают прямые пологими и сдвигают лучшую точку вверх и вправо; редкие положительные или дорогие ложные тревоги делают их крутыми и сдвигают её к началу координат.
AUC — вероятность поставить положительный пример выше отрицательного#
Теорема. Для оценок на тестовой выборке с положительными примерами и отрицательными
Доказательство. Сначала предположим, что все оценки различны. У ступенчатой кривой есть горизонтальный шаг ширины для каждого отрицательного и вертикальные шаги только между ними, поэтому её площадь — сумма прямоугольников под горизонтальными шагами. Когда проход доходит до отрицательного , он уже миновал ровно те положительные примеры, у которых оценка выше, поэтому шаг лежит на высоте . Суммируя по отрицательным,
Если у положительного и отрицательного примеров одинаковая оценка, проход минует оба сразу по диагональному отрезку, площадь под которым равна половине прямоугольника, который дали бы два порядка: каждая пара с равенством считается за .
Эта сумма — статистика Манна–Уитни, делённая на ; именно так Хэнли и Макнил (1982) ввели AUC в медицину. В разобранном примере четыре положительных примера опережают и из четырёх отрицательных — пар из , та самая площадь, найденная выше. Пусть и — оценки положительного и отрицательного примеров, независимо извлечённых из генеральной совокупности. Если тестовые оценки — независимые наблюдения, положительные распределены как , а отрицательные — как , то каждое слагаемое суммы имеет математическое ожидание . Слагаемые зависимы, поскольку каждая оценка входит в или пар, так что обычный закон больших чисел неприменим; но дисперсия их среднего всё равно убывает как (Хэнли и Макнил выписывают её в явном виде), и по неравенству Чебышёва доля пар при росте обоих классов сходится к
Разобранный пример: гауссовские оценки. Если отрицательные получают оценки из , а положительные — из , независимо, то и . У классификатора A с рисунков, с и , получается ; у классификатора B с тем же средним и — . Величина , которую в кредитном скоринге называют коэффициентом Джини (Gini coefficient), — то же число, перемасштабированное на .
Форма через пары объясняет и применения, и ограничения AUC. Это естественная метрика, когда выход — ранжирование, и именно её попарный суррогат оптимизирует обучение ранжированию. Но каждая пара считается одинаково — касается ли она верха списка, который видит пользователь, или низа, который не видит никто.
Когда ROC льстит: кривая точность–полнота#
Когда положительные редки, доля ложных срабатываний делится на огромное . Детектор с полнотой при находится у левого верхнего угла плоскости ROC, но при 1000 положительных на миллион отрицательных он поднимает 10 000 ложных тревог на 900 настоящих — точность . Кривая точность–полнота (precision–recall curve) откладывает точность против полноты по мере движения порога. Её базовый уровень — не диагональ, а горизонтальная прямая на уровне точности : столько даёт случайная пометка. Её сводка — средняя точность (average precision, AP), точность на позиции каждого положительного примера, усреднённая по положительным:
где — метка -й по величине оценки. AP — площадь под ступенчатой кривой точность–полнота, которая держит каждую точность постоянной до следующего положительного примера. В разобранном примере положительные стоят на позициях 1, 2, 4 и 6 с точностями , так что .
Два предостережения. Точки кривой точность–полнота нельзя соединять отрезками: между двумя рабочими точками точность меняется с полнотой нелинейно, и линейная интерполяция завышает площадь, поэтому AP суммирует ступеньки (Davis and Goadrich, 2006). И кривые связаны между собой: при фиксированных размерах классов ROC-кривая одного классификатора всюду лежит выше ROC-кривой другого тогда и только тогда, когда это верно для их кривых точность–полнота (Davis and Goadrich, 2006). Два графика расходятся, только когда кривые пересекаются, и тогда площади взвешивают области пересечения совсем по-разному.
ROC-кривые и кривые точность–полнота двух классификаторов
Классификаторы A и B показывают такое пересечение. A в среднем ранжирует лучше и выигрывает по площади под ROC-кривой: против на смоделированной тестовой выборке рисунка. Оценки положительных у B разбросаны сильнее, поэтому часть из них оказывается намного выше всех отрицательных: при доле ложных срабатываний 1% он уже находит 35% положительных, а A — 21%. Эта область — узкая полоска на графике ROC и начало графика точность–полнота, где B выигрывает по средней точности: против (на большой выборке из тех же распределений против ).
Что приводить. Кривую точность–полнота и AP стоит предпочесть, когда положительные редки и действия предпринимаются по верху ранжирования: поиск, оповещения о мошенничестве, скрининг с ограниченными возможностями дообследования. На несбалансированных данных она показывает различия, которые график ROC сжимает у своего левого края (Saito and Rehmsmeier, 2015). ROC и AUC стоит предпочесть, когда важны оба класса, когда классификатор будет работать в нескольких рабочих точках или когда распространённость изменится: ROC к ней инвариантна, а AP того же классификатора падает по мере того, как положительные становятся реже, поэтому AP на наборах данных с разной распространённостью сравнивать нельзя. Рядом с любым значением AP нужно указывать распространённость, а когда кривые могут пересекаться, — приводить саму кривую, а не одну площадь.
Метрики с доверительными интервалами#
Каждое число выше посчитано на конечной тестовой выборке и является оценкой с выборочной ошибкой. Полнота — доля только среди положительных примеров, поэтому её ошибка зависит от числа положительных в тестовой выборке, а не от её общего размера: 40 обнаружений из 50 положительных дают полноту с 95%-ным интервалом Уилсона , как в заметке о доверительных интервалах. Для AUC, AP и F1 простой формулы нет, и вместо неё бутстрэп пересэмплирует тестовую выборку. В разделе «Код» 500 бутстрэп-выборок дают AUC с 95%-ным интервалом и AP с интервалом : метрика редкого класса менее точна. Чтобы сравнить два классификатора на одной тестовой выборке, пересэмплируют примеры и считают разность на каждой бутстрэп-выборке, сохраняя пары, как в разделе о сравнении двух моделей на одной тестовой выборке; для AUC аналитическая альтернатива — тест DeLong, DeLong and Clarke-Pearson (1988). Та же осторожность нужна и с порогом: порог, подобранный на маленькой валидационной выборке, подгоняется под её шум.
Что изменилось#
| Доля правильных ответов при пороге 0.5 | Метрики этой заметки | |
|---|---|---|
| Ошибки | одно число | два вида, FP и FN, в матрице ошибок |
| Редкие положительные | скрыты мажоритарным классом | полнота, точность, F1, AP сосредоточены на них |
| Порог | зафиксирован на 0.5 | выбирается по требованию, бюджету, F1 или стоимости ошибок () |
| Все пороги сразу | ROC-кривая и AUC (ранжирование, без зависимости от распространённости); кривая точность–полнота и AP (верх ранжирования, зависят от распространённости) | |
| Неопределённость | одно число | интервалы Уилсона, бутстрэп, парные сравнения |
Ограничения#
- Тестовая выборка описывает одну генеральную совокупность. Когда при применении сдвигаются распространённость или входы, вместе с ними сдвигаются точность, AP и лучший порог; полнота и ROC переживают чистый сдвиг распространённости, но ничто не переживает изменения того, что означают признаки.
- Площади скрывают форму. Два классификатора с одинаковыми AUC или AP могут вести себя по-разному в той рабочей точке, которая важна; нужно смотреть на кривую рядом с ней.
- Метрики ранжирования игнорируют калибровку. AUC и AP не меняются при любом строго возрастающем преобразовании оценок; чтобы судить о вероятностях, нужны логистическая функция потерь, мера Брайера или диаграмма надёжности.
- Стоимость ошибок редко известна точно. Порог из стоимости хорош настолько, насколько хороши оценки стоимости; полезно показывать, как меняется решение в правдоподобном диапазоне.
- Метки зашумлены. Ошибки в тестовых метках ограничивают сверху любую метрику и могут переставить местами близкие классификаторы.
Что нужно запомнить#
- Матрица ошибок (TP, FP, FN, TN) лежит в основе любой пороговой метрики. Доля правильных ответов взвешивает классы по распространённости; её нужно сравнивать с базовым уровнем мажоритарного класса.
- Точность зависит от распространённости, полнота — нет. F1 — их среднее гармоническое, и она игнорирует истинно отрицательные примеры.
- Пороги выбирают на валидационных данных — по требованию, бюджету или стоимости ошибок: при откалиброванных вероятностях помечаем, когда .
- ROC-кривая откладывает TPR против FPR по всем порогам; она зависит только от ранжирования и не зависит от распространённости. Её площадь — вероятность того, что случайный положительный пример опередит случайный отрицательный, для гауссовских оценок.
- Кривая точность–полнота и средняя точность сосредоточены на верхе ранжирования и показывают то, что ROC сжимает, когда положительные редки; доминирование по ROC и по кривой точность–полнота равносильны, но площади могут расходиться, когда кривые пересекаются.
- Метрики нужно приводить с интервалами (Уилсона, бутстрэп), а модели сравнивать парным пересэмплированием.
Код#
Пример со скринингом, AUC и AP вручную, два смоделированных классификатора, реальная модель на несбалансированных данных с выбором порога и стоимостью ошибок, доверительные интервалы:
import numpy as np
from scipy.stats import norm
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score, average_precision_score, precision_recall_curve, f1_score, confusion_matrix
rng = np.random.default_rng(0)
# 1. скрининговый тест на 10 000 человек: распространённость 1%, полнота 0.9, доля ложных срабатываний 0.09
tp, fn, fp, tn = 90, 10, 891, 9009
precision, recall = tp / (tp + fp), tp / (tp + fn)
print(round((tp + tn) / 10_000, 4), round(precision, 4), round(2 * precision * recall / (precision + recall), 4))
# 0.9099 0.0917 0.1665: доля правильных ответов, точность, F1
print(round(5 * tp / (5 * tp + 4 * fn + fp), 3)) # 0.326: F2 = 450 / 1381
# 2. восемь примеров с оценками: AUC как доля правильно упорядоченных пар, AP как средняя точность на положительных
s = np.array([0.9, 0.8, 0.7, 0.6, 0.4, 0.3, 0.2, 0.1]); y = np.array([1, 1, 0, 1, 0, 1, 0, 0])
pairs = np.mean([si > sj for si in s[y == 1] for sj in s[y == 0]])
hits = np.cumsum(y)[y == 1] / (np.flatnonzero(y) + 1)
print(pairs, roc_auc_score(y, s), round(hits.mean(), 4), round(average_precision_score(y, s), 4))
# 0.8125 0.8125 0.8542 0.8542
# 3. классификаторы A и B с рисунков на большой выборке: AUC против Phi(mu / sqrt(1 + sigma^2))
n_pos, n_neg = 20_000, 380_000
labels = np.r_[np.ones(n_pos), np.zeros(n_neg)]
for name, sd in (('A', 1.0), ('B', 2.0)):
scores = np.r_[1.5 + sd * rng.normal(size=n_pos), rng.normal(size=n_neg)]
print(name, round(roc_auc_score(labels, scores), 3), round(norm.cdf(1.5 / np.sqrt(1 + sd ** 2)), 3), round(average_precision_score(labels, scores), 3))
# A 0.857 0.856 0.336 | B 0.75 0.749 0.436: A выигрывает по AUC, B по AP
# 4. реальная модель на несбалансированных данных: доля правильных ответов против мажоритарного уровня, порог, оптимальный по F1
X, yy = make_classification(n_samples=30_000, n_features=10, n_informative=4, weights=[0.95], flip_y=0.02, random_state=1)
Xtr, Xrest, ytr, yrest = train_test_split(X, yy, test_size=0.5, stratify=yy, random_state=0)
Xva, Xte, yva, yte = train_test_split(Xrest, yrest, test_size=0.5, stratify=yrest, random_state=0)
model = LogisticRegression().fit(Xtr, ytr)
p_va, p_te = model.predict_proba(Xva)[:, 1], model.predict_proba(Xte)[:, 1]
print(round(yte.mean(), 4), round(np.mean((p_te >= 0.5) == yte), 4), round(1 - yte.mean(), 4)) # 0.0591 0.9419 0.9409
print(confusion_matrix(yte, p_te >= 0.5).ravel()) # [7034 23 413 30]: tn, fp, fn, tp при 0.5
P, R, T = precision_recall_curve(yva, p_va)
F = 2 * P[:-1] * R[:-1] / (P[:-1] + R[:-1] + 1e-12)
t_best = T[F.argmax()] # выбран на валидации, не на тесте
print(round(t_best, 3), round(F.max() / 2, 3), round(f1_score(yte, p_te >= 0.5), 3), round(f1_score(yte, p_te >= t_best), 3))
# 0.152 0.175 0.121 0.339: лучший порог, половина лучшей F1, тестовая F1 при 0.5 и при лучшем пороге
# 5. стоимость: пропущенный положительный стоит 500, ложная тревога 5, поэтому действуем при p > 5 / (5 + 500)
t_cost = 5 / 505
for t in (0.5, t_best, t_cost):
pred = p_te >= t
print(round(t, 4), int(500 * np.sum(~pred & (yte == 1)) + 5 * np.sum(pred & (yte == 0))))
# 0.5 206615 | 0.1516 127520 | 0.0099 36435: суммарная стоимость на тестовой выборке
# 6. доверительные интервалы: бутстрэп тестовой выборки для AUC и AP, интервал Уилсона для полноты 40/50
idx = rng.integers(0, len(yte), (500, len(yte))) # 500 бутстрэп-выборок из тестовой
aucs = [roc_auc_score(yte[i], p_te[i]) for i in idx]
aps = [average_precision_score(yte[i], p_te[i]) for i in idx]
print(round(roc_auc_score(yte, p_te), 3), np.percentile(aucs, [2.5, 97.5]).round(3), round(average_precision_score(yte, p_te), 3), np.percentile(aps, [2.5, 97.5]).round(3))
# 0.801 [0.779 0.822] 0.266 [0.227 0.311]
k, n, z = 40, 50, 1.96
c, h = (k + z * z / 2) / (n + z * z), z * np.sqrt(k * (n - k) / n + z * z / 4) / (n + z * z)
print(round(c - h, 3), round(c + h, 3)) # 0.67 0.888
Дальше#
Метрики судят о классификаторе, когда он уже обучен; они не говорят, какой из многих одинаково хороших классификаторов обучать. Когда классы разделимы, нулевую ошибку на обучении дают бесконечно много гиперплоскостей, а суррогатные функции потерь из заметки о линейных классификаторах либо не могут выбрать между ними (кусочно-линейная, как только все отступы превышают 1), либо уходят на бесконечность (логистическая). Следующая заметка отвечает геометрией: метод опорных векторов берёт гиперплоскость с самым широким отступом, а его двойственная задача показывает, что ответ зависит лишь от горстки обучающих точек.
Литература#
- T. Fawcett. An introduction to ROC analysis. Pattern Recognition Letters, 27(8), 861–874, 2006.
- J. A. Hanley, B. J. McNeil. The meaning and use of the area under a receiver operating characteristic (ROC) curve. Radiology, 143(1), 29–36, 1982.
- J. Davis, M. Goadrich. The relationship between precision-recall and ROC curves. ICML, 233–240, 2006.
- T. Saito, M. Rehmsmeier. The precision-recall plot is more informative than the ROC plot when evaluating binary classifiers on imbalanced datasets. PLoS ONE, 10(3), e0118432, 2015.
- C. Elkan. The foundations of cost-sensitive learning. IJCAI, 2001. Раздел 2 (оптимальный порог из матрицы стоимостей).
- Z. C. Lipton, C. Elkan, B. Narayanaswamy. Optimal thresholding of classifiers to maximize F1 measure. ECML PKDD, 225–239, 2014.
- E. R. DeLong, D. M. DeLong, D. L. Clarke-Pearson. Comparing the areas under two or more correlated receiver operating characteristic curves: a nonparametric approach. Biometrics, 44(3), 837–845, 1988.
- C. J. van Rijsbergen. Information Retrieval, 2nd ed. Butterworths, 1979. Глава 7 (оценка качества, F-мера).
- C. D. Manning, P. Raghavan, H. Schütze. Introduction to Information Retrieval. Cambridge University Press, 2008. Глава 8 (точность, полнота, F-мера, средняя точность).
- E. Sokolov et al. Машинное обучение (HSE): лекция 4 (метрики классификации, ROC-кривые и кривые точность–полнота), семинар 5 (AUC как доля правильно упорядоченных пар).