#Морфологические операции над изображениями. Фильтры и их назначение
ВВЕДЕНИЕ
В данной статье речь пойдёт об операциях математической морфологии и матричных фильтрах обработки изображений, инструменты которых пригодятся для обработки томографических снимков.
Прежде чем приступить к рассмотрению морфологических операций и фильтров, вспомним о представлении графической информации на компьютере. Изображение состоит из точек, навзываемые пикселями. Каждый пиксель является носителем информации (см. Рисунок 1), которая представляется в виде одной из двух цифр: 0 (белый цвет) или 1 (черный цвет).
Рисунок 1
Математическая морфология используется для извлечения свойств изображения, полезных для его представления и описания. Входными данными для аппарата математической морфологии являются два изображения: обрабатываемое и специальное, зависящее от вида операции и решаемой задачи. Такое специальное изображения принято называть примитивом или структурным элементом. Структурный элемент представляет собой область в виде геометрической фигуры. Геометрия такой фигуры может быть любой, главное, чтобы её можно было представить в виде бинарного изображения заданного размера. Во многих пакетах обработки изображений наиболее распространенные структурные элементы имеют специальные названия: BOX[H,W] –прямоугольник заданного размера, DISK[R] — диск заданного размера, RING[R] – кольцо заданного размера (см. Рисунок 2).
Рисунок 2
Одно из главных достоинств морфологической обработки — её простота: как на входе, так и на выходе мы получаем бинаризированное изображение.
Матричные фильтры обработки изображений позволяют получать на выходе изображение со свойствами, отличными от исходного. В основе работы каждого из фильтров лежит использование матрицы свертки, о которой пойдёт речь в соответствующем разделе. Далее разберёмся в принципе работы каждого из фильтров более подробно.
1. Морфологические операции
Всего существует 4 основных морфологических операций: наращивание, эрозия, замыкание и размыкание. При детальном рассмотрении каждой из операций, мы будем использовать изображение и структурный элемент, показанные на рисунке 3.
Рисунок 3
Важно отметить, что начало координат выбранного структурного элемента находится в центре (см. рисунок 4).
Рисунок 4
1.1. Перенос
Операция переноса Xt множества пикселов X на вектор t задаётся в виде Xt={x+t|x∈X}. Следовательно, перенос множества единичных пикселов на бинарном изображении сдвигает все пикселы множества на заданное расстояние. Вектор переноса t может задаваться в виде упорядоченной пары (∆r,∆c), где ∆r – компонент вектора переноса в направлении строк, а ∆c — компонент вектора переноса в направлении столбцов изображения.
Рисунок 5
1.2. Наращивание
Обратимся к рисунку 3. Операция наращивания применяется к каждому пикселю. Происходит весь процесс следующим образом: начало координат структурного элемента (СЭ) совмещается с каждым пикселем исходного изображения. Если на пути начала координат СЭ встречается пиксель аналагичного цвета, то происходит операция объединения между СЭ и исходным изображением. Результаты логического сложения записываются в выходное бинарное изображение (см. рисунок 5).
Рисунок 6
1.3. Эрозия
При выполнении операции эрозии структурный элемент тоже проходит по всем пикселам изображения. Если в некоторой позиции каждый единичный пиксел структурного элемента совпадет с единичным пикселом бинарного изображения, то выполняется логическое сложение центрального пиксела структурного элемента с соответствующим пикселом выходного изображения (см. рисунок 7).
Рисунок 7
В результате применения операции эрозии все объекты, меньшие чем структурный элемент, стираются, размеры всех объектов уменьшаются.
1.4. Размыкание
Операция эрозии полезна для удаления малых объектов и различных шумов, но её недостаток – уменьшение всех оставшихся объектов в размере. Этого эффекта можно избежать, если после операции эрозии применить операцию наращивания с тем же структурным элементом.
Размыкание отсеивает все объекты, меньшие чем структурный элемент, но при этом помогает избежать сильного уменьшения размера объектов. Также размыкание идеально подходит для удаления линий, толщина которых меньше, чем диаметр структурного элемента. После выполнения этой операции контуры объектов становятся более гладкими.
Рисунок 8
1.5. Замыкание
Операция замыкания практически идентична размыканию, за исключением того, что вначале выполняется операция наращивания, а потом эрозии. Замыкание позволяет избавиться от малых дыр и щелей при сохранении тех же размеров контуров объекта (см. рисунок 9).
Рисунок 9
2. Применение бинарной морфологии
Примером реального применения морфологических операций является выделение границ объекта. Эта операция является весьма важной, поскольку она позволяет весьма компактно и полно привести полное описание объекта.
Легко заметить, что граничные точки имеют как минимум один фоновый пиксел в своей окрестности. Таким образом, применив оператор эрозии с структурным элементом, содержащим все возможные соседние элементы, мы удалим все граничные точки… Тогда граница получится с помощью операции разности множеств между исходным изображением и изображением, полученным в результате эрозии (см. рисунок 10). Существуют фильтры, позволяющие выделять границы объектов, о которых мы поговорим в дальнейшем.
Рисунок 10
3. Матричные фильтры обработки изображений
3.1. Матрица свёртки
Матрица свёртки – это матрица коэффициентов, которая «умножается» на значение пикселей изображения для получения требуемого результата. Алгоритм применения следующий. Начиная с верхнего левого пикселя, выделяем ядро размером матрицы свертки (см. рисунок 11).
Рисунок 11
Проводим перемножение между элементами матрицы свертки и выделенного ядра. Для примера, показанного на рисунке 11, результат будет следующим: 0⋅2+0⋅9+0⋅4+0⋅7+17⋅5+24⋅3+0⋅6+23⋅1+5⋅8=220. Далее вычисляем коэффициент нормирования, суммируя компоненты матрицы свёртки. Для нашего примера это значение будет равно 45. Результат перемножения матриц делим на коэффициент нормирования: 220:45=4.89. Полученное значение присваиваем центральному компоненту ядра. Весь цикл проделываем для каждого пикселя изображения.
3.2. Фильтр размытия
Наиболее часто используемым фильтром, основанным на матрице свёртки, является фильтр размытия. Фильтр меняет каждую точку выбранного ядра, делая её значение равным значению всех точек в определённом радиусе от рассматриваемой точки. Значение этого радиуса (размер матрицы) можно изменить.
Обычно матрица заполняется по нормальному (гауссовому закону). Ниже приведена матрица размытия 5×5 заполненная по закону Гауссовского распределения.
Важно отметить, что сумма элементов матрицы равна 1, поэтому и коэффициент нормирования так же равен 1. Сила размытия изображения зависит от размера матрицы свёртки (см. рисунок 12).
Рисунок 12
Данный фильтр предназначен для подавления шумов на изображении. С ростом размера матрицы свертки подавляется и большее количество шумов на изображении. Однако стоит помнить, что при дальнейшем увеличении размера матрицы, картинка может получится более размытой и утратить чёткие очертания контуров объекта. Пример c матрицей свёртки 15×15 показан на рисунке 13.
Рисунок 13
Стоит также сказать пару слов о недостатке фильтра размытия, да и вообще всех фильтров, использующих матрицу свертки. Дело в том, что у верхнего левого пикселя отсутствует сосед справа от него, следовательно, нам не на что умножать коэффициенты матрицы. Решений для этой проблемы существует несколько, но мы ограничимся рассмотрением лишь одного из них, поскольку этот метод не будет влиять на качество обрабатываемых изображений, а для томографических снимков, которые мы будем использовать, это очень важно. Идея состоит в создании временного изображения с размерами (width + 2 * kernelSize / 2, height + 2 * kernelSize / 2, где kernelSize — размер матрицы свертки, width, height — ширина и высота изображения соответственно). В центр изображения копируется входная картинка, а края заполняются крайними пикселями изображения. Размытие применяется к промежуточному буферу, а потом из него извлекается результат (см. рисунок 14).
Рисунок 14
3.3. Фильтр средняя скользящая
В фильтре средняя скользящая все элементы матрицы свёртки имеют одинаковое значение. Например, для данного фильтра матрица 3×3 будет выглядеть следующим образом:
Фильтр предназначен для подавления шума в изображении, но за это мы расплачиваемся ухудшением чёткости границ объектов. Элементы изображения, которые малы по размерам по сравнению с ядром, значительно подавляются, в то время, как элементы значительно большие, чем ядро, поражаются умеренно. Степень подавления шума соответствует размеру ядра, чем больше размер этого ядра, тем лучше шумоподавление. Пример применения данного фильтра приведён на рисунке 15 (a-d).
Рисунок 15
На рисунке 15(a) изображен оригинал снимка. На рис. 15(b) изображён оригинал, искажённый белым гауссовским шумом. Далее это изображение пропускают через фильтр средняя скользящая, размер матрицы свёртки которого 3×3 (рис. 15 (c)). Фильтр, несомненно, убрал некоторое количество аддитивного шума, однако изображение стало смазанным. Данное изображение не будет иметь особого клинического значения. Снимок на рис. 15(b) пропустили через фильтр с матрицей 9×9 (рис. 15(d)). Фильтр удалил все эффекты аддитивного шума, однако результат оказался совершенно неприемлемым, поскольку изображение стало сильно размытым. Отсюда делается вывод, что применение данного фильтра, как и фильтра размытия, ограничивается размером матрицы свёртки.
3.4. Медианный фильтр
Медианный фильтр является весьма распространённым инструментом по подавлению шумов на изображении. Фильтр работает с матрицами различного размера, но в отличие от матрицы свёртки, размер матрицы влияет только на количество рассматриваемых пикселей, т.е., если предыдущие фильтры занимались тем, что перемножали матрицы друг на друга, то в данном случае, размер и сама матрица свёртки нужны лишь для того, чтобы определить размеры рассматриваемого ядра. Он не обладает такими сглаживающими свойствами, как фильтр средней скользящей. В результате использования медианного фильтра может наблюдаться утрата непрерывности границ объекта, изменение яркости изображения, однако это не оказывает сильного влияния на восприятие изображения, в то время, как значения интенсивностей пикселей могут быть сдвинуты на несколько позиций. Применение медианного фильтра позволяет подавить определённые типы шумов. Например, дробовой шум может быть полностью убран из изображения без значительного ослабления чёткости границ и характеристик самого изображения. Действие медианного фильтра изображено на рисунке 16.
Рисунок 16
На рисунке 16(a) изображен снимок из рисунка 15(b), пропущенный через медианный фильтр 3×3. Медианный фильтр не так эффективно устраняет шум, как фильтр средней скользящей, имеющий тот же размер матрицы. На рис. 16(b) изображён снимок из 16(a) с добавлением дробового шума. Далее снимок из рис. 16(b) повторно пропускают через медианный фильтр 3×3 (рис. 16(c)). Результатом такой операции, позволившей практически полностью избавится от дробового шума, становится значительное улучшение изображения. С таким изображением можно в дальнейшем работать.
Алгоритм медианного фильтра следующий: для текущего пикселя, пиксели, которые «попадают» в матрицу, сортируются, и выбирается средние значение из отсортированного массива. Это значение и является выходным для текущего пикселя. Данный алгоритм подобен поиску медианы в числовой выборке, отсюда и название, медианный фильтр. Ниже приведена иллюстрация алгоритма.
3.5. Фильтры выделения границ
Современные средства обработки изображений предлагают богатый выбор инструментов, которые позволяют выделять границы объектов. Таковыми являются фильтры Лапласа, Собеля, Превитта и Робертса. Мы же рассмотрим лишь первые два, поскольку они используются в программном пакете по обработке снимков компьютерной томографии Amira, который является прямым конкурентом разрабатываемого отечественного аналога.
В фильтре Лапласа может использоваться одна из трёх матриц (масок):
К исходному изображению применяется уже знакомая операция свёртки. Результат применения фильтра Лапласа приведён на рис. 17.
Рисунок 17
Теперь рассмотрим фильтр Собеля. Он использует две маски:
Проводим рассуждения аналогичные предыдущим. Применяем операцию свёртки дважды:
Далее вычисляем конечную интенсивность каждого пикселя:
Полезно также знать, что фильтр используется для приближённого вычисления градиента функции интенсивности пикселей. Применение оператора Gx позволяет определить приближённое значение первой частной производной изменения интенсивности в горизонтальном направлении, Gy – в вертикальном. Пример применения данного фильтра на КТ представлен на рисунке 18.
Рисунок 18
Оба рассмотренных фильтра очень чувствительны к шумам. Влияние шумовых эффектов может быть уменьшено сглаживанием перед выделением границ.
3.6. Фильтры эрозии и наращивания
Фильтры наращивание и эрозия служат для получения морфологического расширения или сужения соответственно. Проще говоря, для изображений это значит выбор пикселя с максимальной или минимальной интенсивностью из окрестности. В результате наращивания происходит увеличение ярких объектов, а эрозии – увеличение тёмных объектов (см. рисунок 19, 20).
Рисунок 19
Рисунок 20
Фильтр использует входное изображение и бинарную матрицу. Бинарная матрица определяет форму окрестности. Обычно окрестность имеет круглую форму.
3.7. Комбинированное использование матричных фильтров обработки изображений
В данном разделе будут рассмотрены и показаны преимущества комбинированных методов обработки КТ.
Как говорилось в разделе 3.6., все фильтры выделения границ очень чувствительны к шумам. Мар и Хилдрет предложили сглаживать изображение фильтром Гаусса. Результаты выделения границ лаплассианом до и после сглаживания фильтром Гаусса показаны на рис. 21.
Рисунок 21
Как видно, изображение стало после обработки более отчётливым.
Применяем аналогичные действия c фильтром Собеля (рис. 22).
Рисунок 22
Из рисунка видно, что выделение границ, как и в случае с лаплассианом, стало видно более отчётливо.
Из приведённых выше примеров можно сделать вывод, что применением комбинаций фильтров, мы не только устраняем шумы в изображении, но и получаем требуемую информацию в должном качестве.
4. Заключение
В данной статье были рассмотрены математическая морфология и матричные фильтры обработки изображений, представлены алгоритмы действия перечисленных фильтров, приведены результаты их действия на снимках КТ. Выяснено и практически показано, что комбинированное применение матричных фильтров благоприятно сказывается на качестве и читабельности снимка.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
-
Isaac N.Bankman Medical imaging, processing and analysis;
-
Noriyasu Homma Theory and applications of CT imaging and analysis;
-
http://www.intuit.ru/studies/courses/10621/1105/lecture/17989?page=6;
-
https://habrahabr.ru/post/142818/
Формулировка алгоритма фильтра Калмана
Рассмотрим
сначала линейную задачу, т.е. вариации
модельных предсказаний в окрестности
предсказания являются линейной функцией
начального состояния, т.е. для всякого
,
достаточно близкого к
Модель
использует данные анализа на сетке в
момент времени
для того, чтобы вычислить прогностические
значения на той же сетке в момент времени:
Предполагается,
что модель может быть несовершенной и
давать некоторую ошибку:
Из
практики можно предположить, что ошибки
не имеют сдвига и не коррелируют во
времени:
где
— символ Кронекера, равный 1 при
и 0 при всех прочих случаях.,
— матрица ошибок модели в момент времени
.
Определим ошибку анализа в момент
времени:
и
вычислим ошибку прогноза с учетом
линейности оператора моделирования
Возводя
вквадрат, т.е., умножая левую часть на
,
а правую на,
и полагая, что ошибки моделирования не
коррелируют с ошибками анализа, т.е.,
получаем
где
— ковариационная матрица ошибок прогноза
в момент времени,
а— ковариационная матрица ошибок анализа
в момент времени.
В
результате получены два прогностических
уравнения для момента времени
на основании значений в момент времени
:
одно позволяет прогнозировать значение
вектора состояния,
а второе ковариационную матрицу ошибок
прогноза.
Таким образом, использование методики
фильтра Калмана позволяет рассчитывать
как прогностические значения вектора
состояния, так и ковариационную матрицу
ошибок прогноза. Ковариационные матрицы
ошибок прогноза и анализа являются
идентичными матрицам ошибок оценки
фонового состоянияи анализа
.
Прогностическая
часть алгоритма должна быть дополнена
уравнениями для вычисления результатов
анализа вектора состояния, матрицы
преобразования весов, а также ковариационной
матрицы ошибок анализа. Эти уравнения
аналогичны выведенным при рассмотрении
обобщенного метода оптимальной
интерполяции:
Эти
три уравнения представляют собой
аналитическую часть метода фильтра
Калмана, а уравнения для прогноза вектора
состояния и ковариационной матрицы
ошибок – прогностическую часть фильтра
Калмана.
Если
у нас есть результаты измерений
,
ошибки измерений,
и ошибки моделирования,
то начиная с начального момента времени,
если определеныи
,
то можно вычислить значения анализа в
этот момент времении ошибки анализа
.
Затем, используя прогностические
уравнения, можно вычислить для следующего
момента времени прогностические значения
вектора состоянияи ковариационную матрицу ошибок прогноза
.
После этого последовательность
повторяется, т.е. вычисляютсяи
и т.д для последующих моментов времени.
Фильтр
Калмана аналогичен оптимальной
интерполяции в части анализа и
четырехмерному вариационному анализу
в прогностической части, если не
учитывается ошибка моделирования.
Расширенный фильтр Калмана
Если
оператор модели нелинеен, то используется
расширенный фильтр Калмана, в котором
оператор
линеаризуется в окрестности анализируемого
вектора состояния,
а оператор наблюдений линеаризуется
около.
Таким образом, подразумевается, что
Это
означает, что при вычислении ошибки
прогноза мы должны учитывать Якобиан
оператора моделирования:
Соответственно,
прогностическое уравнение для
ковариационной матрицы прогноза будет
выглядеть как
Вычислительная
стоимость фильтра Калмана и его
расширенного варианта получается
достаточно большой, т.к. помимо собственно
анализа, который, как было определено
при исследовании оптимальной интерполяции,
занимает много процессорного времени
и памяти, нужно еще оценивать матрицы
ковариаций анализа, делать прогноз
вектора состояния, вычислять Якобиан
для нелинейной модели и прогноз изменения
матрицы ковариаций анализа. В результате
вычислительная стоимость фильтра
Калмана намного больше 4-мерного
вариационного для той же задачи, даже
для малых моделей.
Схема
организации вычислений в фильтре Калмана
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
Гораздо легче что-то измерить, чем понять, что именно вы измеряете
Джон Уильям Салливан
Задачи машинного обучения с учителем как правило состоят в восстановлении зависимости между парами (признаковое описание, целевая переменная) по данным, доступным нам для анализа. Алгоритмы машинного обучения (learning algorithm), со многими из которых вы уже успели познакомиться, позволяют построить модель, аппроксимирующую эту зависимость. Но как понять, насколько качественной получилась аппроксимация?
Почти наверняка наша модель будет ошибаться на некоторых объектах: будь она даже идеальной, шум или выбросы в тестовых данных всё испортят. При этом разные модели будут ошибаться на разных объектах и в разной степени. Задача специалиста по машинному обучению – подобрать подходящий критерий, который позволит сравнивать различные модели.
Перед чтением этой главы мы хотели бы ещё раз напомнить, что качество модели нельзя оценивать на обучающей выборке. Как минимум, это стоит делать на отложенной (тестовой) выборке, но, если вам это позволяют время и вычислительные ресурсы, стоит прибегнуть и к более надёжным способам проверки – например, кросс-валидации (о ней вы узнаете в отдельной главе).
Выбор метрик в реальных задачах
Возможно, вы уже участвовали в соревнованиях по анализу данных. На таких соревнованиях метрику (критерий качества модели) организатор выбирает за вас, и она, как правило, довольно понятным образом связана с результатами предсказаний. Но на практике всё бывает намного сложнее.
Например, мы хотим:
- решить, сколько коробок с бананами нужно завтра привезти в конкретный магазин, чтобы минимизировать количество товара, который не будет выкуплен и минимизировать ситуацию, когда покупатель к концу дня не находит желаемый продукт на полке;
- увеличить счастье пользователя от работы с нашим сервисом, чтобы он стал лояльным и обеспечивал тем самым стабильный прогнозируемый доход;
- решить, нужно ли направить человека на дополнительное обследование.
В каждом конкретном случае может возникать целая иерархия метрик. Представим, например, что речь идёт о стриминговом музыкальном сервисе, пользователей которого мы решили порадовать сгенерированными самодельной нейросетью треками – не защищёнными авторским правом, а потому совершенно бесплатными. Иерархия метрик могла бы иметь такой вид:
- Самый верхний уровень: будущий доход сервиса – невозможно измерить в моменте, сложным образом зависит от совокупности всех наших усилий;
- Медианная длина сессии, возможно, служащая оценкой радости пользователей, которая, как мы надеемся, повлияет на их желание продолжать платить за подписку – её нам придётся измерять в продакшене, ведь нас интересует реакция настоящих пользователей на новшество;
- Доля удовлетворённых качеством сгенерированной музыки асессоров, на которых мы потестируем её до того, как выставить на суд пользователей;
- Функция потерь, на которую мы будем обучать генеративную сеть.
На этом примере мы можем заметить сразу несколько общих закономерностей. Во-первых, метрики бывают offline и online (оффлайновыми и онлайновыми). Online метрики вычисляются по данным, собираемым с работающей системы (например, медианная длина сессии). Offline метрики могут быть измерены до введения модели в эксплуатацию, например, по историческим данным или с привлечением специальных людей, асессоров. Последнее часто применяется, когда метрикой является реакция живого человека: скажем, так поступают поисковые компании, которые предлагают людям оценить качество ранжирования экспериментальной системы еще до того, как рядовые пользователи увидят эти результаты в обычном порядке. На самом же нижнем этаже иерархии лежат оптимизируемые в ходе обучения функции потерь.
В данном разделе нас будут интересовать offline метрики, которые могут быть измерены без привлечения людей.
Функция потерь $neq$ метрика качества
Как мы узнали ранее, методы обучения реализуют разные подходы к обучению:
- обучение на основе прироста информации (как в деревьях решений)
- обучение на основе сходства (как в методах ближайших соседей)
- обучение на основе вероятностной модели данных (например, максимизацией правдоподобия)
- обучение на основе ошибок (минимизация эмпирического риска)
И в рамках обучения на основе минимизации ошибок мы уже отвечали на вопрос: как можно штрафовать модель за предсказание на обучающем объекте.
Во время сведения задачи о построении решающего правила к задаче численной оптимизации, мы вводили понятие функции потерь и, обычно, объявляли целевой функцией сумму потерь от предсказаний на всех объектах обучающей выборке.
Важно понимать разницу между функцией потерь и метрикой качества. Её можно сформулировать следующим образом:
-
Функция потерь возникает в тот момент, когда мы сводим задачу построения модели к задаче оптимизации. Обычно требуется, чтобы она обладала хорошими свойствами (например, дифференцируемостью).
-
Метрика – внешний, объективный критерий качества, обычно зависящий не от параметров модели, а только от предсказанных меток.
В некоторых случаях метрика может совпадать с функцией потерь. Например, в задаче регрессии MSE играет роль как функции потерь, так и метрики. Но, скажем, в задаче бинарной классификации они почти всегда различаются: в качестве функции потерь может выступать кросс-энтропия, а в качестве метрики – число верно угаданных меток (accuracy). Отметим, что в последнем примере у них различные аргументы: на вход кросс-энтропии нужно подавать логиты, а на вход accuracy – предсказанные метки (то есть по сути argmax логитов).
Бинарная классификация: метки классов
Перейдём к обзору метрик и начнём с самой простой разновидности классификации – бинарной, а затем постепенно будем наращивать сложность.
Напомним постановку задачи бинарной классификации: нам нужно по обучающей выборке ${(x_i, y_i)}_{i=1}^N$, где $y_iin{0, 1}$ построить модель, которая по объекту $x$ предсказывает метку класса $f(x)in{0, 1}$.
Первым критерием качества, который приходит в голову, является accuracy – доля объектов, для которых мы правильно предсказали класс:
$$ color{#348FEA}{text{Accuracy}(y, y^{pred}) = frac{1}{N} sum_{i=1}^N mathbb{I}[y_i = f(x_i)]} $$
Или же сопряженная ей метрика – доля ошибочных классификаций (error rate):
$$text{Error rate} = 1 — text{Accuracy}$$
Познакомившись чуть внимательнее с этой метрикой, можно заметить, что у неё есть несколько недостатков:
- она не учитывает дисбаланс классов. Например, в задаче диагностики редких заболеваний классификатор, предсказывающий всем пациентам отсутствие болезни будет иметь достаточно высокую accuracy просто потому, что больных людей в выборке намного меньше;
- она также не учитывает цену ошибки на объектах разных классов. Для примера снова можно привести задачу медицинской диагностики: если ошибочный положительный диагноз для здорового больного обернётся лишь ещё одним обследованием, то ошибочно отрицательный вердикт может повлечь роковые последствия.
Confusion matrix (матрица ошибок)
Исторически задача бинарной классификации – это задача об обнаружении чего-то редкого в большом потоке объектов, например, поиск человека, больного туберкулёзом, по флюорографии. Или задача признания пятна на экране приёмника радиолокационной станции бомбардировщиком, представляющем угрозу охраняемому объекту (в противовес стае гусей).
Поэтому класс, который представляет для нас интерес, называется «положительным», а оставшийся – «отрицательным».
Заметим, что для каждого объекта в выборке возможно 4 ситуации:
- мы предсказали положительную метку и угадали. Будет относить такие объекты к true positive (TP) группе (true – потому что предсказали мы правильно, а positive – потому что предсказали положительную метку);
- мы предсказали положительную метку, но ошиблись в своём предсказании – false positive (FP) (false, потому что предсказание было неправильным);
- мы предсказали отрицательную метку и угадали – true negative (TN);
- и наконец, мы предсказали отрицательную метку, но ошиблись – false negative (FN). Для удобства все эти 4 числа изображают в виде таблицы, которую называют confusion matrix (матрицей ошибок):
Не волнуйтесь, если первое время эти обозначения будут сводить вас с ума (будем откровенны, даже профи со стажем в них порой путаются), однако логика за ними достаточно простая: первая часть названия группы показывает угадали ли мы с классом, а вторая – какой класс мы предсказали.
Пример
Попробуем воспользоваться введёнными метриками в боевом примере: сравним работу нескольких моделей классификации на Breast cancer wisconsin (diagnostic) dataset.
Объектами выборки являются фотографии биопсии грудных опухолей. С их помощью было сформировано признаковое описание, которое заключается в характеристиках ядер клеток (таких как радиус ядра, его текстура, симметричность). Положительным классом в такой постановке будут злокачественные опухоли, а отрицательным – доброкачественные.
Модель 1. Константное предсказание.
Решение задачи начнём с самого простого классификатора, который выдаёт на каждом объекте константное предсказание – самый часто встречающийся класс.
Зачем вообще замерять качество на такой модели?При разработке модели машинного обучения для проекта всегда желательно иметь некоторую baseline модель. Так нам будет легче проконтролировать, что наша более сложная модель действительно дает нам прирост качества.
from sklearn.datasets
import load_breast_cancer
the_data = load_breast_cancer()
# 0 – "доброкачественный"
# 1 – "злокачественный"
relabeled_target = 1 - the_data["target"]
from sklearn.model_selection import train_test_split
X = the_data["data"]
y = relabeled_target
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
from sklearn.dummy import DummyClassifier
dc_mf = DummyClassifier(strategy="most_frequent")
dc_mf.fit(X_train, y_train)
from sklearn.metrics import confusion_matrix
y_true = y_test y_pred = dc_mf.predict(X_test)
dc_mf_tn, dc_mf_fp, dc_mf_fn, dc_mf_tp = confusion_matrix(y_true, y_pred, labels = [0, 1]).ravel()
| Прогнозируемый класс + | Прогнозируемый класс — | |
|---|---|---|
| Истинный класс + | TP = 0 | FN = 53 |
| Истинный класс — | FP = 0 | TN = 90 |
Обучающие данные таковы, что наш dummy-классификатор все объекты записывает в отрицательный класс, то есть признаёт все опухоли доброкачественными. Такой наивный подход позволяет нам получить минимальный штраф за FP (действительно, нельзя ошибиться в предсказании, если положительный класс вообще не предсказывается), но и максимальный штраф за FN (в эту группу попадут все злокачественные опухоли).
Модель 2. Случайный лес.
Настало время воспользоваться всем арсеналом моделей машинного обучения, и начнём мы со случайного леса.
from sklearn.ensemble import RandomForestClassifier
rfc = RandomForestClassifier()
rfc.fit(X_train, y_train)
y_true = y_test
y_pred = rfc.predict(X_test)
rfc_tn, rfc_fp, rfc_fn, rfc_tp = confusion_matrix(y_true, y_pred, labels = [0, 1]).ravel()
| Прогнозируемый класс + | Прогнозируемый класс — | |
|---|---|---|
| Истинный класс + | TP = 52 | FN = 1 |
| Истинный класс — | FP = 4 | TN = 86 |
Можно сказать, что этот классификатор чему-то научился, т.к. главная диагональ матрицы стала содержать все объекты из отложенной выборки, за исключением 4 + 1 = 5 объектов (сравните с 0 + 53 объектами dummy-классификатора, все опухоли объявляющего доброкачественными).
Отметим, что вычисляя долю недиагональных элементов, мы приходим к метрике error rate, о которой мы говорили в самом начале:
$$text{Error rate} = frac{FP + FN}{ TP + TN + FP + FN}$$
тогда как доля объектов, попавших на главную диагональ – это как раз таки accuracy:
$$text{Accuracy} = frac{TP + TN}{ TP + TN + FP + FN}$$
Модель 3. Метод опорных векторов.
Давайте построим еще один классификатор на основе линейного метода опорных векторов.
Не забудьте привести признаки к единому масштабу, иначе численный алгоритм не сойдется к решению и мы получим гораздо более плохо работающее решающее правило. Попробуйте проделать это упражнение.
from sklearn.svm import LinearSVC
from sklearn.preprocessing import StandardScaler
ss = StandardScaler() ss.fit(X_train)
scaled_linsvc = LinearSVC(C=0.01,random_state=42)
scaled_linsvc.fit(ss.transform(X_train), y_train)
y_true = y_test
y_pred = scaled_linsvc.predict(ss.transform(X_test))
tn, fp, fn, tp = confusion_matrix(y_true, y_pred, labels = [0, 1]).ravel()
| Прогнозируемый класс + | Прогнозируемый класс — | |
|---|---|---|
| Истинный класс + | TP = 50 | FN = 3 |
| Истинный класс — | FP = 1 | TN = 89 |
Сравним результаты
Легко заметить, что каждая из двух моделей лучше классификатора-пустышки, однако давайте попробуем сравнить их между собой. С точки зрения error rate модели практически одинаковы: 5/143 для леса против 4/143 для SVM.
Посмотрим на структуру ошибок чуть более внимательно: лес – (FP = 4, FN = 1), SVM – (FP = 1, FN = 3). Какая из моделей предпочтительнее?
Замечание: Мы сравниваем несколько классификаторов на основании их предсказаний на отложенной выборке. Насколько ошибки данных классификаторов зависят от разбиения исходного набора данных? Иногда в процессе оценки качества мы будем получать модели, чьи показатели эффективности будут статистически неразличимыми.
Пусть мы учли предыдущее замечание и эти модели действительно статистически значимо ошибаются в разную сторону. Мы встретились с очевидной вещью: на матрицах нет отношения порядка. Когда мы сравнивали dummy-классификатор и случайный лес с помощью Accuracy, мы всю сложную структуру ошибок свели к одному числу, т.к. на вещественных числах отношение порядка есть. Сводить оценку модели к одному числу очень удобно, однако не стоит забывать, что у вашей модели есть много аспектов качества.
Что же всё-таки важнее уменьшить: FP или FN? Вернёмся к задаче: FP – доля доброкачественных опухолей, которым ошибочно присваивается метка злокачественной, а FN – доля злокачественных опухолей, которые классификатор пропускает. В такой постановке становится понятно, что при сравнении выиграет модель с меньшим FN (то есть лес в нашем примере), ведь каждая не обнаруженная опухоль может стоить человеческой жизни.
Рассмотрим теперь другую задачу: по данным о погоде предсказать, будет ли успешным запуск спутника. FN в такой постановке – это ошибочное предсказание неуспеха, то есть не более, чем упущенный шанс (если вас, конечно не уволят за срыв сроков). С FP всё серьёзней: если вы предскажете удачный запуск спутника, а на деле он потерпит крушение из-за погодных условий, то ваши потери будут в разы существеннее.
Итак, из примеров мы видим, что в текущем виде введенная нами доля ошибочных классификаций не даст нам возможности учесть неравную важность FP и FN. Поэтому введем две новые метрики: точность и полноту.
Точность и полнота
Accuracy — это метрика, которая характеризует качество модели, агрегированное по всем классам. Это полезно, когда классы для нас имеют одинаковое значение. В случае, если это не так, accuracy может быть обманчивой.
Рассмотрим ситуацию, когда положительный класс это событие редкое. Возьмем в качестве примера поисковую систему — в нашем хранилище хранятся миллиарды документов, а релевантных к конкретному поисковому запросу на несколько порядков меньше.
Пусть мы хотим решить задачу бинарной классификации «документ d релевантен по запросу q». Благодаря большому дисбалансу, Accuracy dummy-классификатора, объявляющего все документы нерелевантными, будет близка к единице. Напомним, что $text{Accuracy} = frac{TP + TN}{TP + TN + FP + FN}$, и в нашем случае высокое значение метрики будет обеспечено членом TN, в то время для пользователей более важен высокий TP.
Поэтому в случае ассиметрии классов, можно использовать метрики, которые не учитывают TN и ориентируются на TP.
Если мы рассмотрим долю правильно предсказанных положительных объектов среди всех объектов, предсказанных положительным классом, то мы получим метрику, которая называется точностью (precision)
$$color{#348FEA}{text{Precision} = frac{TP}{TP + FP}}$$
Интуитивно метрика показывает долю релевантных документов среди всех найденных классификатором. Чем меньше ложноположительных срабатываний будет допускать модель, тем больше будет её Precision.
Если же мы рассмотрим долю правильно найденных положительных объектов среди всех объектов положительного класса, то мы получим метрику, которая называется полнотой (recall)
$$color{#348FEA}{text{Recall} = frac{TP}{TP + FN}}$$
Интуитивно метрика показывает долю найденных документов из всех релевантных. Чем меньше ложно отрицательных срабатываний, тем выше recall модели.
Например, в задаче предсказания злокачественности опухоли точность показывает, сколько из определённых нами как злокачественные опухолей действительно являются злокачественными, а полнота – какую долю злокачественных опухолей нам удалось выявить.
Хорошее понимание происходящего даёт следующая картинка: 
Recall@k, Precision@k
Метрики Recall и Precision хорошо подходят для задачи поиска «документ d релевантен запросу q», когда из списка рекомендованных алгоритмом документов нас интересует только первый. Но не всегда алгоритм машинного обучения вынужден работать в таких жестких условиях. Может быть такое, что вполне достаточно, что релевантный документ попал в первые k рекомендованных. Например, в интерфейсе выдачи первые три подсказки видны всегда одновременно и вообще не очень понятно, какой у них порядок. Тогда более честной оценкой качества алгоритма будет «в выдаче D размера k по запросу q нашлись релевантные документы». Для расчёта метрики по всей выборке объединим все выдачи и рассчитаем precision, recall как обычно подокументно.
F1-мера
Как мы уже отмечали ранее, модели очень удобно сравнивать, когда их качество выражено одним числом. В случае пары Precision-Recall существует популярный способ скомпоновать их в одну метрику — взять их среднее гармоническое. Данный показатель эффективности исторически носит название F1-меры (F1-measure).
$$
color{#348FEA}{F_1 = frac{2}{frac{1}{Recall} + frac{1}{Precision}}} = $$
$$ = 2 frac{Recall cdot Precision }{Recall + Precision} = frac
{TP} {TP + frac{FP + FN}{2}}
$$
Стоит иметь в виду, что F1-мера предполагает одинаковую важность Precision и Recall, если одна из этих метрик для вас приоритетнее, то можно воспользоваться $F_{beta}$ мерой:
$$
F_{beta} = (beta^2 + 1) frac{Recall cdot Precision }{Recall + beta^2Precision}
$$
Бинарная классификация: вероятности классов
Многие модели бинарной классификации устроены так, что класс объекта получается бинаризацией выхода классификатора по некоторому фиксированному порогу:
$$fleft(x ; w, w_{0}right)=mathbb{I}left[g(x, w) > w_{0}right].$$
Например, модель логистической регрессии возвращает оценку вероятности принадлежности примера к положительному классу. Другие модели бинарной классификации обычно возвращают произвольные вещественные значения, но существуют техники, называемые калибровкой классификатора, которые позволяют преобразовать предсказания в более или менее корректную оценку вероятности принадлежности к положительному классу.
Как оценить качество предсказываемых вероятностей, если именно они являются нашей конечной целью? Общепринятой мерой является логистическая функция потерь, которую мы изучали раньше, когда говорили об устройстве некоторых методов классификации (например уже упоминавшейся логистической регрессии).
Если же нашей целью является построение прогноза в терминах метки класса, то нам нужно учесть, что в зависимости от порога мы будем получать разные предсказания и разное качество на отложенной выборке. Так, чем ниже порог отсечения, тем больше объектов модель будет относить к положительному классу. Как в этом случае оценить качество модели?
AUC
Пусть мы хотим учитывать ошибки на объектах обоих классов. При уменьшении порога отсечения мы будем находить (правильно предсказывать) всё большее число положительных объектов, но также и неправильно предсказывать положительную метку на всё большем числе отрицательных объектов. Естественным кажется ввести две метрики TPR и FPR:
TPR (true positive rate) – это полнота, доля положительных объектов, правильно предсказанных положительными:
$$ TPR = frac{TP}{P} = frac{TP}{TP + FN} $$
FPR (false positive rate) – это доля отрицательных объектов, неправильно предсказанных положительными:
$$FPR = frac{FP}{N} = frac{FP}{FP + TN}$$
Обе эти величины растут при уменьшении порога. Кривая в осях TPR/FPR, которая получается при варьировании порога, исторически называется ROC-кривой (receiver operating characteristics curve, сокращённо ROC curve). Следующий график поможет вам понять поведение ROC-кривой.
Желтая и синяя кривые показывают распределение предсказаний классификатора на объектах положительного и отрицательного классов соответственно. То есть значения на оси X (на графике с двумя гауссианами) мы получаем из классификатора. Если классификатор идеальный (две кривые разделимы по оси X), то на правом графике мы получаем ROC-кривую (0,0)->(0,1)->(1,1) (убедитесь сами!), площадь под которой равна 1. Если классификатор случайный (предсказывает одинаковые метки положительным и отрицательным объектам), то мы получаем ROC-кривую (0,0)->(1,1), площадь под которой равна 0.5. Поэкспериментируйте с разными вариантами распределения предсказаний по классам и посмотрите, как меняется ROC-кривая.
Чем лучше классификатор разделяет два класса, тем больше площадь (area under curve) под ROC-кривой – и мы можем использовать её в качестве метрики. Эта метрика называется AUC и она работает благодаря следующему свойству ROC-кривой:
AUC равен доле пар объектов вида (объект класса 1, объект класса 0), которые алгоритм верно упорядочил, т.е. предсказание классификатора на первом объекте больше:
$$
color{#348FEA}{operatorname{AUC} = frac{sumlimits_{i = 1}^{N} sumlimits_{j = 1}^{N}mathbb{I}[y_i < y_j] I^{prime}[f(x_{i}) < f(x_{j})]}{sumlimits_{i = 1}^{N} sumlimits_{j = 1}^{N}mathbb{I}[y_i < y_j]}}
$$
$$
I^{prime}left[f(x_{i}) < f(x_{j})right]=
left{
begin{array}{ll}
0, & f(x_{i}) > f(x_{j}) \
0.5 & f(x_{i}) = f(x_{j}) \
1, & f(x_{i}) < f(x_{j})
end{array}
right.
$$
$$
Ileft[y_{i}< y_{j}right]=
left{
begin{array}{ll}
0, & y_{i} geq y_{j} \
1, & y_{i} < y_{j}
end{array}
right.
$$
Чтобы детальнее разобраться, почему это так, советуем вам обратиться к материалам А.Г.Дьяконова.
В каких случаях лучше отдать предпочтение этой метрике? Рассмотрим следующую задачу: некоторый сотовый оператор хочет научиться предсказывать, будет ли клиент пользоваться его услугами через месяц. На первый взгляд кажется, что задача сводится к бинарной классификации с метками 1, если клиент останется с компанией и $0$ – иначе.
Однако если копнуть глубже в процессы компании, то окажется, что такие метки практически бесполезны. Компании скорее интересно упорядочить клиентов по вероятности прекращения обслуживания и в зависимости от этого применять разные варианты удержания: кому-то прислать скидочный купон от партнёра, кому-то предложить скидку на следующий месяц, а кому-то и новый тариф на особых условиях.
Таким образом, в любой задаче, где нам важна не метка сама по себе, а правильный порядок на объектах, имеет смысл применять AUC.
Утверждение выше может вызывать у вас желание использовать AUC в качестве метрики в задачах ранжирования, но мы призываем вас быть аккуратными.
ПодробнееУтверждение выше может вызывать у вас желание использовать AUC в качестве метрики в задачах ранжирования, но мы призываем вас быть аккуратными.» details=»Продемонстрируем это на следующем примере: пусть наша выборка состоит из $9100$ объектов класса $0$ и $10$ объектов класса $1$, и модель расположила их следующим образом:
$$underbrace{0 dots 0}_{9000} ~ underbrace{1 dots 1}_{10} ~ underbrace{0 dots 0}_{100}$$
Тогда AUC будет близка к единице: количество пар правильно расположенных объектов будет порядка $90000$, в то время как общее количество пар порядка $91000$.
Однако самыми высокими по вероятности положительного класса будут совсем не те объекты, которые мы ожидаем.
Average Precision
Будем постепенно уменьшать порог бинаризации. При этом полнота будет расти от $0$ до $1$, так как будет увеличиваться количество объектов, которым мы приписываем положительный класс (а количество объектов, на самом деле относящихся к положительному классу, очевидно, меняться не будет). Про точность же нельзя сказать ничего определённого, но мы понимаем, что скорее всего она будет выше при более высоком пороге отсечения (мы оставим только объекты, в которых модель «уверена» больше всего). Варьируя порог и пересчитывая значения Precision и Recall на каждом пороге, мы получим некоторую кривую примерно следующего вида:

Рассмотрим среднее значение точности (оно равно площади под кривой точность-полнота):
$$ text { AP }=int_{0}^{1} p(r) d r$$
Получим показатель эффективности, который называется average precision. Как в случае матрицы ошибок мы переходили к скалярным показателям эффективности, так и в случае с кривой точность-полнота мы охарактеризовали ее в виде числа.
Многоклассовая классификация
Если классов становится больше двух, расчёт метрик усложняется. Если задача классификации на $K$ классов ставится как $K$ задач об отделении класса $i$ от остальных ($i=1,ldots,K$), то для каждой из них можно посчитать свою матрицу ошибок. Затем есть два варианта получения итогового значения метрики из $K$ матриц ошибок:
- Усредняем элементы матрицы ошибок (TP, FP, TN, FN) между бинарными классификаторами, например $TP = frac{1}{K}sum_{i=1}^{K}TP_i$. Затем по одной усреднённой матрице ошибок считаем Precision, Recall, F-меру. Это называют микроусреднением.
- Считаем Precision, Recall для каждого классификатора отдельно, а потом усредняем. Это называют макроусреднением.
Порядок усреднения влияет на результат в случае дисбаланса классов. Показатели TP, FP, FN — это счётчики объектов. Пусть некоторый класс обладает маленькой мощностью (обозначим её $M$). Тогда значения TP и FN при классификации этого класса против остальных будут не больше $M$, то есть тоже маленькие. Про FP мы ничего уверенно сказать не можем, но скорее всего при дисбалансе классов классификатор не будет предсказывать редкий класс слишком часто, потому что есть большая вероятность ошибиться. Так что FP тоже мало. Поэтому усреднение первым способом сделает вклад маленького класса в общую метрику незаметным. А при усреднении вторым способом среднее считается уже для нормированных величин, так что вклад каждого класса будет одинаковым.
Рассмотрим пример. Пусть есть датасет из объектов трёх цветов: желтого, зелёного и синего. Желтого и зелёного цветов почти поровну — 21 и 20 объектов соответственно, а синих объектов всего 4.
Модель по очереди для каждого цвета пытается отделить объекты этого цвета от объектов оставшихся двух цветов. Результаты классификации проиллюстрированы матрицей ошибок. Модель «покрасила» в жёлтый 25 объектов, 20 из которых были действительно жёлтыми (левый столбец матрицы). В синий был «покрашен» только один объект, который на самом деле жёлтый (средний столбец матрицы). В зелёный — 19 объектов, все на самом деле зелёные (правый столбец матрицы).
Посчитаем Precision классификации двумя способами:
- С помощью микроусреднения получаем $$
text{Precision} = frac{dfrac{1}{3}left(20 + 0 + 19right)}{dfrac{1}{3}left(20 + 0 + 19right) + dfrac{1}{3}left(5 + 1 + 0right)} = 0.87
$$ - С помощью макроусреднения получаем $$
text{Precision} = dfrac{1}{3}left( frac{20}{20 + 5} + frac{0}{0 + 1} + frac{19}{19 + 0}right) = 0.6
$$
Видим, что макроусреднение лучше отражает тот факт, что синий цвет, которого в датасете было совсем мало, модель практически игнорирует.
Как оптимизировать метрики классификации?
Пусть мы выбрали, что метрика качества алгоритма будет $F(a(X), Y)$. Тогда мы хотим обучить модель так, чтобы $F$ на валидационной выборке была минимальная/максимальная. Лучший способ добиться минимизации метрики $F$ — оптимизировать её напрямую, то есть выбрать в качестве функции потерь ту же $F(a(X), Y)$. К сожалению, это не всегда возможно. Рассмотрим, как оптимизировать метрики иначе.
Метрики precision и recall невозможно оптимизировать напрямую, потому что эти метрики нельзя рассчитать на одном объекте, а затем усреднить. Они зависят от того, какими были правильная метка класса и ответ алгоритма на всех объектах. Чтобы понять, как оптимизировать precision, recall, рассмотрим, как расчитать эти метрики на отложенной выборке. Пусть модель обучена на стандартную для классификации функцию потерь (LogLoss). Для получения меток класса специалист по машинному обучению сначала применяет на объектах модель и получает вещественные предсказания модели ($p_i in left(0, 1right)$). Затем предсказания бинаризуются по порогу, выбранному специалистом: если предсказание на объекте больше порога, то метка класса 1 (или «положительная»), если меньше — 0 (или «отрицательная»). Рассмотрим, что будет с метриками precision, recall в крайних положениях порога.
- Пусть порог равен нулю. Тогда всем объектам будет присвоена положительная метка. Следовательно, все объекты будут либо TP, либо FP, потому что отрицательных предсказаний нет, $TP + FP = N$, где $N$ — размер выборки. Также все объекты, у которых метка на самом деле 1, попадут в TP. По формуле точность $text{Precision} = frac{TP}{TP + FP} = frac1N sum_{i = 1}^N mathbb{I} left[ y_i = 1 right]$ равна среднему таргету в выборке. А полнота $text{Recall} = frac{TP}{TP + FN} = frac{TP}{TP + 0} = 1$ равна единице.
- Пусть теперь порог равен единице. Тогда ни один объект не будет назван положительным, $TP = FP = 0$. Все объекты с меткой класса 1 попадут в FN. Если есть хотя бы один такой объект, то есть $FN ne 0$, будет верна формула $text{Recall} = frac{TP}{TP + FN} = frac{0}{0+ FN} = 0$. То есть при пороге единица, полнота равна нулю. Теперь посмотрим на точность. Формула для Precision состоит только из счётчиков положительных ответов модели (TP, FP). При единичном пороге они оба равны нулю, $text{Precision} = frac{TP}{TP + FP} = frac{0}{0 + 0}$то есть при единичном пороге точность неопределена. Пусть мы отступили чуть-чуть назад по порогу, чтобы хотя бы несколько объектов были названы моделью положительными. Скорее всего это будут самые «простые» объекты, которые модель распознает хорошо, потому что её предсказание близко к единице. В этом предположении $FP approx 0$. Тогда точность $text{Precision} = frac{TP}{TP + FP} approx frac{TP}{TP + 0} approx 1$ будет близка к единице.
Изменяя порог, между крайними положениями, получим графики Precision и Recall, которые выглядят как-то так:
Recall меняется от единицы до нуля, а Precision от среднего тагрета до какого-то другого значения (нет гарантий, что график монотонный).
Итого оптимизация precision и recall происходит так:
- Модель обучается на стандартную функцию потерь (например, LogLoss).
- Используя вещественные предсказания на валидационной выборке, перебирая разные пороги от 0 до 1, получаем графики метрик в зависимости от порога.
- Выбираем нужное сочетание точности и полноты.
Пусть теперь мы хотим максимизировать метрику AUC. Стандартный метод оптимизации, градиентный спуск, предполагает, что функция потерь дифференцируема. AUC этим качеством не обладает, то есть мы не можем оптимизировать её напрямую. Поэтому для метрики AUC приходится изменять оптимизационную задачу. Метрика AUC считает долю верно упорядоченных пар. Значит от исходной выборки можно перейти к выборке упорядоченных пар объектов. На этой выборке ставится задача классификации: метка класса 1 соответствует правильно упорядоченной паре, 0 — неправильно. Новой метрикой становится accuracy — доля правильно классифицированных объектов, то есть доля правильно упорядоченных пар. Оптимизировать accuracy можно по той же схеме, что и precision, recall: обучаем модель на LogLoss и предсказываем вероятности положительной метки у объекта выборки, считаем accuracy для разных порогов по вероятности и выбираем понравившийся.
Регрессия
В задачах регрессии целевая метка у нас имеет потенциально бесконечное число значений. И природа этих значений, обычно, связана с каким-то процессом измерений:
- величина температуры в определенный момент времени на метеостанции
- количество прочтений статьи на сайте
- количество проданных бананов в конкретном магазине, сети магазинов или стране
- дебит добывающей скважины на нефтегазовом месторождении за месяц и т.п.
Мы видим, что иногда метка это целое число, а иногда произвольное вещественное число. Обычно случаи целочисленных меток моделируют так, словно это просто обычное вещественное число. При таком подходе может оказаться так, что модель A лучше модели B по некоторой метрике, но при этом предсказания у модели A могут быть не целыми. Если в бизнес-задаче ожидается именно целочисленный ответ, то и оценивать нужно огрубление.
Общая рекомендация такова: оценивайте весь каскад решающих правил: и те «внутренние», которые вы получаете в результате обучения, и те «итоговые», которые вы отдаёте бизнес-заказчику.
Например, вы можете быть удовлетворены, что стали ошибаться не во втором, а только в третьем знаке после запятой при предсказании погоды. Но сами погодные данные измеряются с точностью до десятых долей градуса, а пользователь и вовсе может интересоваться лишь целым числом градусов.
Итак, напомним постановку задачи регрессии: нам нужно по обучающей выборке ${(x_i, y_i)}_{i=1}^N$, где $y_i in mathbb{R}$ построить модель f(x).
Величину $ e_i = f(x_i) — y_i $ называют ошибкой на объекте i или регрессионным остатком.
Весь набор ошибок на отложенной выборке может служить аналогом матрицы ошибок из задачи классификации. А именно, когда мы рассматриваем две разные модели, то, глядя на то, как и на каких объектах они ошиблись, мы можем прийти к выводу, что для решения бизнес-задачи нам выгоднее взять ту или иную модель. И, аналогично со случаем бинарной классификации, мы можем начать строить агрегаты от вектора ошибок, получая тем самым разные метрики.
MSE, RMSE, $R^2$
MSE – одна из самых популярных метрик в задаче регрессии. Она уже знакома вам, т.к. применяется в качестве функции потерь (или входит в ее состав) во многих ранее рассмотренных методах.
$$ MSE(y^{true}, y^{pred}) = frac1Nsum_{i=1}^{N} (y_i — f(x_i))^2 $$
Иногда для того, чтобы показатель эффективности MSE имел размерность исходных данных, из него извлекают квадратный корень и получают показатель эффективности RMSE.
MSE неограничен сверху, и может быть нелегко понять, насколько «хорошим» или «плохим» является то или иное его значение. Чтобы появились какие-то ориентиры, делают следующее:
-
Берут наилучшее константное предсказание с точки зрения MSE — среднее арифметическое меток $bar{y}$. При этом чтобы не было подглядывания в test, среднее нужно вычислять по обучающей выборке
-
Рассматривают в качестве показателя ошибки:
$$ R^2 = 1 — frac{sum_{i=1}^{N} (y_i — f(x_i))^2}{sum_{i=1}^{N} (y_i — bar{y})^2}.$$
У идеального решающего правила $R^2$ равен $1$, у наилучшего константного предсказания он равен $0$ на обучающей выборке. Можно заметить, что $R^2$ показывает, какая доля дисперсии таргетов (знаменатель) объяснена моделью.
MSE квадратично штрафует за большие ошибки на объектах. Мы уже видели проявление этого при обучении моделей методом минимизации квадратичных ошибок – там это проявлялось в том, что модель старалась хорошо подстроиться под выбросы.
Пусть теперь мы хотим использовать MSE для оценки наших регрессионных моделей. Если большие ошибки для нас действительно неприемлемы, то квадратичный штраф за них — очень полезное свойство (и его даже можно усиливать, повышая степень, в которую мы возводим ошибку на объекте). Однако если в наших тестовых данных присутствуют выбросы, то нам будет сложно объективно сравнить модели между собой: ошибки на выбросах будет маскировать различия в ошибках на основном множестве объектов.
Таким образом, если мы будем сравнивать две модели при помощи MSE, у нас будет выигрывать та модель, у которой меньше ошибка на объектах-выбросах, а это, скорее всего, не то, чего требует от нас наша бизнес-задача.
История из жизни про бананы и квадратичный штраф за ошибкуИз-за неверно введенных данных метка одного из объектов оказалась в 100 раз больше реального значения. Моделировалась величина при помощи градиентного бустинга над деревьями решений. Функция потерь была MSE.
Однажды уже во время эксплуатации случилось ч.п.: у нас появились предсказания, в 100 раз превышающие допустимые из соображений физического смысла значения. Представьте себе, например, что вместо обычных 4 ящиков бананов система предлагала поставить в магазин 400. Были распечатаны все деревья из ансамбля, и мы увидели, что постепенно число ящиков действительно увеличивалось до прогнозных 400.
Было решено проверить гипотезу, что был выброс в данных для обучения. Так оно и оказалось: всего одна точка давала такую потерю на объекте, что алгоритм обучения решил, что лучше переобучиться под этот выброс, чем смириться с большим штрафом на этом объекте. А в эксплуатации у нас возникли точки, которые плюс-минус попадали в такие же листья ансамбля, что и объект-выброс.
Избежать такого рода проблем можно двумя способами: внимательнее контролируя качество данных или адаптировав функцию потерь.
Аналогично, можно поступать и в случае, когда мы разрабатываем метрику качества: менее жёстко штрафовать за большие отклонения от истинного таргета.
MAE
Использовать RMSE для сравнения моделей на выборках с большим количеством выбросов может быть неудобно. В таких случаях прибегают к также знакомой вам в качестве функции потери метрике MAE (mean absolute error):
$$ MAE(y^{true}, y^{pred}) = frac{1}{N}sum_{i=1}^{N} left|y_i — f(x_i)right| $$
Метрики, учитывающие относительные ошибки
И MSE и MAE считаются как сумма абсолютных ошибок на объектах.
Рассмотрим следующую задачу: мы хотим спрогнозировать спрос товаров на следующий месяц. Пусть у нас есть два продукта: продукт A продаётся в количестве 100 штук, а продукт В в количестве 10 штук. И пусть базовая модель предсказывает количество продаж продукта A как 98 штук, а продукта B как 8 штук. Ошибки на этих объектах добавляют 4 штрафных единицы в MAE.
И есть 2 модели-кандидата на улучшение. Первая предсказывает товар А 99 штук, а товар B 8 штук. Вторая предсказывает товар А 98 штук, а товар B 9 штук.
Обе модели улучшают MAE базовой модели на 1 единицу. Однако, с точки зрения бизнес-заказчика вторая модель может оказаться предпочтительнее, т.к. предсказание продажи редких товаров может быть приоритетнее. Один из способов учесть такое требование – рассматривать не абсолютную, а относительную ошибку на объектах.
MAPE, SMAPE
Когда речь заходит об относительных ошибках, сразу возникает вопрос: что мы будем ставить в знаменатель?
В метрике MAPE (mean absolute percentage error) в знаменатель помещают целевое значение:
$$ MAPE(y^{true}, y^{pred}) = frac{1}{N} sum_{i=1}^{N} frac{ left|y_i — f(x_i)right|}{left|y_iright|} $$
С особым случаем, когда в знаменателе оказывается $0$, обычно поступают «инженерным» способом: или выдают за непредсказание $0$ на таком объекте большой, но фиксированный штраф, или пытаются застраховаться от подобного на уровне формулы и переходят к метрике SMAPE (symmetric mean absolute percentage error):
$$ SMAPE(y^{true}, y^{pred}) = frac{1}{N} sum_{i=1}^{N} frac{ 2 left|y_i — f(x_i)right|}{y_i + f(x_i)} $$
Если же предсказывается ноль, штраф считаем нулевым.
Таким переходом от абсолютных ошибок на объекте к относительным мы сделали объекты в тестовой выборке равнозначными: даже если мы делаем абсурдно большое предсказание, на фоне которого истинная метка теряется, мы получаем штраф за этот объект порядка 1 в случае MAPE и 2 в случае SMAPE.
WAPE
Как и любая другая метрика, MAPE имеет свои границы применимости: например, она плохо справляется с прогнозом спроса на товары с прерывистыми продажами. Рассмотрим такой пример:
| Понедельник | Вторник | Среда | |
|---|---|---|---|
| Прогноз | 55 | 2 | 50 |
| Продажи | 50 | 1 | 50 |
| MAPE | 10% | 100% | 0% |
Среднее MAPE – 36.7%, что не очень отражает реальную ситуацию, ведь два дня мы предсказывали с хорошей точностью. В таких ситуациях помогает WAPE (weighted average percentage error):
$$ WAPE(y^{true}, y^{pred}) = frac{sum_{i=1}^{N} left|y_i — f(x_i)right|}{sum_{i=1}^{N} left|y_iright|} $$
Если мы предсказываем идеально, то WAPE = 0, если все предсказания отдаём нулевыми, то WAPE = 1.
В нашем примере получим WAPE = 5.9%
RMSLE
Альтернативный способ уйти от абсолютных ошибок к относительным предлагает метрика RMSLE (root mean squared logarithmic error):
$$ RMSLE(y^{true}, y^{pred}| c) = sqrt{ frac{1}{N} sum_{i=1}^N left(vphantom{frac12}log{left(y_i + c right)} — log{left(f(x_i) + c right)}right)^2 } $$
где нормировочная константа $c$ вводится искусственно, чтобы не брать логарифм от нуля. Также по построению видно, что метрика пригодна лишь для неотрицательных меток.
Веса в метриках
Все вышеописанные метрики легко допускают введение весов для объектов. Если мы из каких-то соображений можем определить стоимость ошибки на объекте, можно брать эту величину в качестве веса. Например, в задаче предсказания спроса в качестве веса можно использовать стоимость объекта.
Доля предсказаний с абсолютными ошибками больше, чем d
Еще одним способом охарактеризовать качество модели в задаче регрессии является доля предсказаний с абсолютными ошибками больше заданного порога $d$:
$$frac{1}{N} sum_{i=1}^{N} mathbb{I}left[ left| y_i — f(x_i) right| > d right] $$
Например, можно считать, что прогноз погоды сбылся, если ошибка предсказания составила меньше 1/2/3 градусов. Тогда рассматриваемая метрика покажет, в какой доле случаев прогноз не сбылся.
Как оптимизировать метрики регрессии?
Пусть мы выбрали, что метрика качества алгоритма будет $F(a(X), Y)$. Тогда мы хотим обучить модель так, чтобы F на валидационной выборке была минимальная/максимальная. Аналогично задачам классификации лучший способ добиться минимизации метрики $F$ — выбрать в качестве функции потерь ту же $F(a(X), Y)$. К счастью, основные метрики для регрессии: MSE, RMSE, MAE можно оптимизировать напрямую. С формальной точки зрения MAE не дифференцируема, так как там присутствует модуль, чья производная не определена в нуле. На практике для этого выколотого случая в коде можно возвращать ноль.
Для оптимизации MAPE придётся изменять оптимизационную задачу. Оптимизацию MAPE можно представить как оптимизацию MAE, где объектам выборки присвоен вес $frac{1}{vert y_ivert}$.
- Главная
- Вопросы и ответы
Матрица ошибок и расчет показателей точности тематических карт
Дано определение матрицы ошибок (confusion matrix, contingency table, error matrix), приведены примеры использования.
Обсудить в форуме Комментариев — 2
Матрица ошибок представляет собой инструмент, использующий кросс-табуляцию (http://en.wikipedia.org/wiki/Cross-tabulation) для показа того, как соотносятся значения совпадающих классов, полученные из различных источников. В качестве источников могут выступать, например, проверяемый растр (тематическая классификация) и опорный более точный источник данных (растр или набор полевых данных в виде точек). При интерпретации результатов обычно полагается, что проверяемый результат потенциально является неточным, а проверочный растр хорошо отражает реальную ситуацию. В противном случае, если проверочный растр также несовершенен, нельзя говорить об «ошибке», а следует говорить о «разнице» между двумя наборами данных. Для построения матрицы могут использоваться все ячейки растра (пиксели) или выборка ячеек, расположенных случайно, стратифицировано случайно или согласно какому-либо другому распределению.
По одной из осей матрицы записываются названия классов легенды классификации проверяемого набора данных, по второй — классы легенды данных, используемых для проверки.

Серым отмечена главная диагональ матрицы, показывающая случаи, где расчетные классы и реальные данные совпадают (правильная классификация). Сумма значений диагональных элементов показывает общее количество правильно классифицированных пикселей, а отношение этого количества к общему количеству пикселей в матрице N называется общей точностью классификации и обычно выражается в процентах:
Для определения точности определенного расчетного класса, необходимо разделить количество правильно классифицированных пикселей этого класса на общее количество пикселей в этом классе согласно проверочным данным. Этот показатель также называют «точностью производителя» (producer’s accuracy), так как он показывает, насколько хорошо результат классификации для этого класса совпадает с проверочными данными. Для класса A:
Похожий показатель может быть вычислен для реального класса, если разделить количество правильно классифицированных пикселей класса на общее количество пикселей в этом классе согласно проверяемым данным. Этот показатель называют «точностью пользователя» (user’s accuracy), так как он показывает пользователю классификации насколько вероятно, что данный класс совпадает с результатами классификации. Для класса A:
Вне-диагональные элементы показывает случаи несовпадения между расчетными и реальными классами (ошибки классификации).
Пример 1 Маска пожаров
Приведем пример реальной ситуации, при желании вы можете повторить все расчеты и вычисления. Допустим, у нас есть классификации, показывающие какая территория сгорела, а какая нет. Одна из этих классификаций сделана на базе данных AVHRR, а другая — MODIS. Например, иллюстрация показывает результат наложения двух классификаций, где:
0 – оба источника определили территорию как не сгоревшую;
1 – AVHRR определил территорию как сгоревшую, MODIS – как не сгоревшую;
2 — MODIS определил территорию как сгоревшую, AVHRR – как не сгоревшую;
3 — оба источника определили территорию как сгоревшую.

В этом случае, если мы обозначим сгоревшую территорию как «ДА», а не сгоревшую как «НЕТ», наша матрица ошибок будет выглядеть следующим образом:

Рассчитаем общую ошибку и ошибки для разных классов.
Общая точность 83%, из рисунка очевидно, что решающую роль в такой высокой точности играет масса территорий, классифицированных как несгоревшие обоими источниками.
Точность производителя (producer’s accuracy) для класса сгоревших территорий – 88%. Высокая точность производителя означает, что в проверяемой классификации мало ошибок омиссии (ommission errors), т.е. мало сгоревших пикселей было пропущено. Другими словами, небольшое количество пикселей, которые были на самом деле (согласно проверочному набору) сгоревшими, были ошибочно классифицированы как несгоревшие.
Точность пользователя (user’s accuracy) для класса сгоревших территорий – 54%. Низкая точность пользователя означает, что в проверяемой классификации много ошибок комиссии (commission errors), т.е. много пикселей, которые не сгорели, но были классифицированы как сгоревшие.
Разберем интерпретацию точностей для класса сгоревших территорий, как целевого класса в данном примере. Как можно видеть, для этого класса точность производителя значительно лучше точности пользователя, что в переводе на человеческий язык означает, что при производстве данного набора данных предпочтение было отдано тому, что «лучше, чтобы все территории которые на самом деле сгорели, были классифицированы как сгоревшие», а не «лучше, чтобы сгоревших территорий было меньше, но все они были точно сгоревшими».
Как видно из примера, ошибки комиссии и омиссии для одного класса часто являются противоположными, высокое значение одной из них часто связано с низким значением другой. Интерпретация качества классификации зависит от ставящихся перед ней задач, обычной стратегией является нахождение максимального значения обоих типов ошибок.
Пример 2
Более сложный пример, с большим количеством классов (источник):
Количество классов q = 5.

Рассчитаем общую точность, точность производителя и пользователя:

Расчеты всех показателей точности для приведенных выше данных в формате MS Excel XLS.
Обсудить в форуме Комментариев — 2
Последнее обновление: September 09 2021
Дата создания: 06.01.2010
Автор(ы): Денис Рыков
МАТРИЧНЫЕ ФИЛЬТРЫ ОБРАБОТКИ ИЗОБРАЖЕНИЙ
- Авторы
- Файлы работы
- Сертификаты
Иванов Н.Р. 1, Лукьянов Е.Н. 1, Матвеева Т.А. 1, Светличная В.Б. 1
1Волжский политехнический институт
Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке «Файлы работы» в формате PDF
В нашей современной жизни, мы часто сталкиваемся с такой проблемой, как необходимость компьютерной обработки изображений для получения наилучшего результата. Как правило, фильтрами. Под воздействием фильтров фотография может быть изменена необычным образом, может быть добавлен эффект рельефа, заменены цвета.
В данной статье рассказывается о математических алгоритмах работы фильтров обработки фотографий. Мы остановимся на алгоритме матрицы свёртки в фильтрах. Это матрица коэффициентов, которая умножается на значение точек картинки для получения требуемого результата.
Фильтр изучает каждый пиксель. он умножает значение каждого пикселя этого изображения и значения восьми окружающих на соответствующие значения ядра. Затем он суммирует результаты произведения и устанавливает эту сумму как новое значение начальной точки.
В данном примере слева — матрица фотографии: каждый пиксель отмечен своим значением. У начального пикселя красная граница. В центре — ядро. Активная область ядра помечена зелёной границей. Справа — результат свертки.
Фильтров использующих матрицу свёртки несколько, такие как: фильтр размытия, улучшения четкости, фильтры эрозии и наращивания и медианный фильтр. Рассмотрим два примера: фильтры контраста и размытия.
Фильтр контраста. Умножаем матрицу изображения на следующую матрицу:
Результатом является усиление контраста.
Фильтр размытия. От размера матрицы зависит сила размытия
На этих нескольких примерах мы показали, как с помощью матрицы свертки можно редактировать и достигать различных эффектов для обработки изображений.
Список литературы:
Агишева Д.К., Зотова С.А., Матвеева Т.А., Светличная В.Б. Линейное программирование: учебное пособие // Успехи современного естествознания. – 2010. – № 9. – С. 61-62.
Грицун Б.М., Коленко К.В., Светличная В.Б., Матвеева Т.А., Зотова С.А. «КОРНИ» не только группа // Материалы VIII Международной студенческой электронной научной конференции «Студенческий научный форум».
Просмотров работы: 1153
Код для цитирования:






































