ml_03_class
Заметка 3. Классификация на примере распознавания рукописных цифр.
курса Введение в машинное обучение.
Шокуров Антон В.
shokurov.anton.v@yandex.ru
http://машинноезрение.рф
Версия 0.14

Аннотация

Вводятся понятие классификации на базе библиотек scikit-learn. Рассмотрены как минимум следующие классификаторы: svm (Support Vector Machine, метод опорных векторов) включая ядровый трюк, MLP (Multi-layer Perceptron, Многослойный перцептрон, нейронные сети), SGD (Stochastic Gradient Descent, Стохастический градиентный спуск) и RidgeClassifier (ridge classification, гребневый классификатор). В процессе изложения показано насколько важную роль играют параметры того или иного метода.

Это предварительная версия! Любые замечания приветствуются.

Задача классификации является частным случаем общей формулировке задачи машинного обучения показаной в самой первой заметке про регрессии. Так, в задаче лкассификации считается, что регрессия строится для конечного, при этом существенно небольшого колличества чисел. Фактически значения образуют дискретное множество или просто конечное множество объектов. Интерпретация такая. По признакам строится прогноз нечисловой, а элементу из множества. Например, по признакам (где обитает, сколько весит в взослом состоянии, сколько ног и так дале) определить животное. Или как в примере из прошлой заметке определить название цветка ириса.

Пусть наша модель задается параметризуется: $f_\theta$. Задача подбора параметров тогда формулируется так: $$ \theta^* = \underset{\theta}{\operatorname{argmin}}\sum_{i=1}^{i=N}(f_{\theta}(x_i) - y_i )^2 = \underset{\theta}{\operatorname{argmin}} \mathcal{L}(\theta). $$

Преобразуем минимизационную задачу. Введем $l(\hat{y}, y) = (\hat{y}- y)^2$, тогда $$ \mathcal{L}(\theta) = \sum_{i=1}^{i=N}(f_{\theta}(x_i) - y_i )^2 = \sum_{i=1}^{i=N}l(f_{\theta}(x_i), y_i ). $$

Как и ранее было упомянуто l можно выбирать под задачу.

Задача классификации заключается в предсказании класса объекта. Классов объектов "немного", задаются дискретным множеством. В простом случае рассматривается бинарная задача, когда есть два класса. Например, что

В таких задачах значение у $y$ может быть

Для случая бинарной классификации берут $$ l(\hat{y}, y) = [\hat{y} \neq y] = \begin{cases} 0 & \hat{y} = y\\ 1 & \hat{y} \neq y \end{cases} $$ Но данная функция не дифференцируема, значит методом градиентного спуска не минимизировать.

Приходим к важному принципу. Есть функция метрика, которую мы на самом деле хотим минимизировать. Но для применения оптимизационных методов берут другую дифференцируемую функцию, которую и минимизируют.

Какие варианты для значений функции $f_{\theta}$? Отмечу, что в случае задания $l(\hat{y}, y)$ для $\hat{y}$ фактически имеются два варианта значения. Иначе говоря можно было бы эквивалентно задать две функции. Если же класса равноправны, то хотелось бы одной.

В случае бинарной классификации один из вариантов это считать, что число $0$ разбивает на два класса. Так, если $f_{\theta}(x) >0$, то $x$ принадлежит первому классу, а если $f_{\theta}(x)<0$, то второму. Случай $f_{\theta}(x)=0$ считается неопределенным. Если придерживаться того, что классам соответствует значение y $1$ и $-1$, то величина $m$ всегда положительна ($m=yf_{\theta}(x)>0$) для правильных данных. В этом смысле, данная величина характеризует величину ошибки. Если величина $m$ (margin) положительна, то ошибки фактически нет. Если она отрицательно ($m=yf_{\theta}(x)<0$), то обозначает ошибку. Поэтому, можно величину $m$ и использовать для построения функции потерь.

Линейные модели

Линейные модели как следует из названия предполагают, что данные линейной разделимы -- речь про бинарную классификацию. Так, существует гипер-плоскость такая что по одну сторону будут элементы одного класса, а по другую другого.

В случае линейных моделей $$ f_{\theta}(x)= f_{\omega,b}(\vec{x}) = \sum_{j=1}^{j=k}\omega_j\vec{x}_j+b = \omega\cdot x +b, $$где $\theta = \{\omega,b\}$ и $x=\vec{x}\in R^k$.

Далее будет рассматривать случай $k=2$.

Берем формулу из второй заметки, которую мы минимизируем, и считаем, что сама функция принимает два значения6 -1 и 1. 1 для одного класса, а -1 для другого. Ествественно значения не будут идеальными. Например, значению может быть равно 1.1 или 0.8 для класса 1.

Как и ранее ищится минимум данной фкнции. Но теперь вадно обратить внимание на функцию потерь. В зависимости от того какая будет выбрана будет зависеть и качественый результат по сути. А точнее некотрым из фукнций потерь соответвуют те или иные традиционные методы классификации. Так, логорифмическая ункция потерь даст логистическую регрессию.

Линейно разделимые

Сформируем данные

Для начала рассмотрим линейно разделимые.

Подготовим данные для минимизации функции

Так обычно и делают, для машинного обучения.

Экспоненциальная функция потерь

Например, можно воспользоваться экспонентной. Так, при больших положительных значениях, функция имеет большое значение (стремящиеся к бесконечности), а при маленьких маленькое (стремящиеся к нулю). Тогда мы могли бы взять величину $q=e^{-m}$. Чем более уверенный будет решение решающей функции ($m$ не просто положительная, стремится к положительной бесконечности), то тем меньше будет величина $q$, а значит тем меньше будет вклад в ошибку. И наоборот, тем сильнее решающая функция ошибается, тем меньше величина $m$, тогда величина $q$ будет неограниченно большой.

$$ l(f_{\theta}(x_i), y_i ) = e^{-y_if_{\theta}(x_i)} = e^{-y_i(\omega \cdot x_i + b)} $$$$ \mathcal{L}(\theta) = \sum_{i=1}^{i=N}l(f_{\theta}(x_i), y_i ) = \sum_{i=1}^{i=N}e^{-y_i(\omega \cdot x_i + b)}. $$

Сделаем предсказание

Доля правильных ответов

Вспомним про регуляризацию.

Есть стабильность...

Hinge

Метод опорных векторов. $$ l(f_{\theta}(x_i), y_i ) = \max\{{0, 1-y_if_{\theta}(x_i)}\} = \max\{0, 1 - y_i(\omega \cdot x_i + b)\} $$

Производная

Библиотечный вызов

Для конкретных методов есть более оптимальный алгоритм из вычисления.

Через оптимальное управление

Детали дам на отдельной лекции.

Логистическая регрессия

$$ l(f_{\theta}(x_i), y_i ) = \log\{1+e^{-y_if_{\theta}(x_i)}\} = \log\{1+e^{-y_i(\omega \cdot x_i + b)}\} $$

Различные функции потерь

Классификация на примере изображений рукописных цифр.

Изоражение рукописных цифр имеет фисированный рамер. изображение черное белое (скорее даже градации серого). Изображение как известно харакетезуется его размером: некое колличество пикселов в ширину и в высоту. Фактически изображение является матрицей чисел. Признаками являются сами пикселы, т.е. отдельные элементы из которых изображение состоит. Их общее количество будет ширина умноденная на высоту.

Рассмотрим одну из классическиз задачь... определение цифры по изображению её рукописной заиси. Иначе говоря на вход будет подаватся изображение с рукописной цифрой (от 0 до 9). С точки зрения постановки задачи важно, что ничего друго не может быть там написано быть. т.е. гарантируется что одна из фифр (и только одна) изображена. Так вот по изображению нужно определить цифру.

Смотрим что находится в данных. На основании того что там есть решить отдкуда брать изображения и метки (правильные ответы).

Это вроде сами изображения. проверим что количество элементов в массиве images совпдает с количеством ответов.

Вывдеим матрицы изображения виде картинки для лучшего понимания.

Посмотрим какой должен быть правильным ответ.

Сделаем все-таки изображения в градациях серого.

В данном массиве по суте хранятся названия для людей. В более сложном датасете они были бы более осмысленными. В даном они совпадабт с самими метками.

Один класс против другого

Для начала попробуем линейную модель

Уже прекрасный результат.

Один класс против всех

Второй класс гораздо больше. Это обычно считается плохо. Нужно выравнять.

Многоклассовая

Отображение результатов

Зафиксируем какой либо класс. Например конкретную цифру. Два главных понятия:

Разберем синтезированые примеры

Возьмем два вектра чисел. Правильные ответы: [1,1,1,1,2,1], и то что быо предсказано [1,2,1,1,2,2]. Правдивость предсказаний: [Да, Нет, Да, Да, Да,Нет].

Выберем класс, например, 1. Тогда, все места где было предсказано 1, действительно соответсвуют действительности. Значит precision равен 1. Все ли 1 были предсказаны. Нет, не все. Вторая и последняя 1 не были предсказаны (мы сказали что там 2). Значит мы верно предсказали 3 из 5 единиц. 3/5=0.6. Значит recall 0.6.

Упр. По аналогии проверьте класс 2.

Разумеется можно запустить и для большего колличества классов.

Отчет для обученной модели