Новосибирский Государственный Университет
Опубликован: 20.08.2013 | Доступ: свободный | Студентов: 858 / 36 | Длительность: 14:11:00
Лекция 2:

Введение в машинное обучение

< Лекция 1 || Лекция 2: 123 || Лекция 3 >
1.1.3. Машина опорных векторов

Один из самых популярных методов машинного обучения – машина опорных векторов (SVM – Support Vector Machine) – является развитием идей, предложенных в 1960–1970 гг. В. Н. Вапником и А. Я. Червоненкисом. Окончательное очертание метод принял в 1995 г., когда было показано, как в этом методе можно эффективно использовать ядра [ 4 ].

Рассмотрим вначале случай двух линейно разделимых классов. Для удобства будем их кодировать числами 1, -1, т. е. \mathbb{Y} = \{1, -1\}.

Оптимальной разделяющей гиперплоскостью называется гиперплоскость, такая, что расстояние от нее до ближайшей точки из обучающей выборки (не важно из какого класса) максимально. Таким образом, оптимальная разделяющая гиперплоскость максимизирует зазор (отступ) - расстояние от нее до точек из обучающей выборки. Часто это приводит к хорошим результатам и на объектах тестовой выборки.

Математическая постановка задачи выглядит следующим образом:

Требуется найти

\max_{\beta,\beta_{0},w}w,

при ограничениях

y^{(i)}(\beta x^{(i)} + \beta_{0}) \geq w \;\;\;(i=1,2,...,N),
\parallet \beta \parallet = 1,

где \beta x^{(i)} означает скалярное произведение

\beta x^{(i)} = \sum_{j=1)^d{\beta_{j}}x_{j}^{(i)}},

а \parallet \beta \parallet – евклидову норму

\parallet \beta \parallet = \sqrt{\sum_{j=1)^d{\beta_{j}}^2}}.

Эквивалентная формулировка:

\max_{\beta,\beta_{0}}\parallet \beta \parallet^2,

при ограничениях

y^{(i)}(\beta x^{(i)} + \beta_{0}) \geq 1 \;\;\; (i=1,2,...,N).

Можно показать, что решение этой задачи имеет вид

\beta = \sum_{i=1}^N{\alpha_{i}y^{(i)}x^{(i)}}, \;\;\; где \alpha_{i} \geq 0,

уравнение разделяющей гиперплоскости есть \beta x + \beta_{0} = 0 и классификатор определяется правилом

f(x) = sign(\beta x + \beta_{0}).

Если \alpha_{i} < 0, то x^{(i)} называется опорной точкой или опорным вектором. Легко видеть, что опорные точки лежат на границе разделяющей полосы

-1 \leq \beta x + \beta_{0} \leq 1,

следовательно, \beta_{0} = y^{(i)} - \beta x^{(i)}, где x^{(i)} - произвольный опорный вектор.

В случае линейно не разделимых классов разрешим некоторым объектам из обучающей выборки "слегка" заходить за разделяющую гиперплоскость:

\max_{\beta,\beta_{0},\zeta,w}w,

при ограничениях

y^{(i)}(x^{(i)}\beta + \beta_[0})\geq w(1 - \zeta_{i}),\;\;\; \zeta_{i} \geq 0, \;\;\; (i=1,2,...,N),
\parallet \beta \parallet = 1,
\sum_{i=1}^N {\zeta_{i} \leq \Xi,}

где \Xi - некоторая константа (параметр метода). При \Xi = 0 получаем предыдущий случай (линейно разделимых классов). Значение \zeta_{i} пропорционально величине, на которую x^{(i)} заходит за границу разделяющей полосы. В частности, -й объект будет классифицирован неправильно тогда и только тогда, когда \zeta_{i} > 1. Чем меньше \Xi, тем меньше объектов классифицируется неправильно. С другой стороны, \Xi должно быть достаточно велико, чтобы задача была совместной.

Эквивалентная формулировка:

\max_{\beta,\beta_{0},\zeta} \frac{1}{2}\parallet \beta \parallet + C \sum_{i=1}^N {\zeta_{i}},

при ограничениях

y^{(i)}(\beta x^{(i)} + \beta_{0}) \geq 1 - \zeta_{i}, \;\;\; \zeta_{i} \geq 0, \;\;\; (i=1,2,...,N).

Здесь параметр C \geq 0 регулирует величину штрафа за то, что некоторые точки выходят за границу разделяющей полосы. Построенная задача является задачей квадратического программирования. Для ее решения можно использовать общие методы для решения таких задач, однако существуют весьма эффективные специальные методы.

Можно показать, что решение задачи единственно, если в обучающей выборке есть по крайней мере один представитель каждого из классов.

Дальнейшее усовершенствование метода - использование спрямляющих пространств. Пусть удается перейти от исходного пространства признаков \mathbb{X} к новому пространству \mathbb{H} (которое называется спрямляющим) с помощью некоторого отображения h: \mathbb{X} \rightarrow \mathbb{H}:

h(x) = (h_{1}(x),h_{2}(x),...,h_{M}(x)),

где h_{m}(x) - базисные функции ((m=1,2,...,M). Новый классификатор определяется теперь функцией

f(x) = sign(h(x) \beta + \beta_{0}).

Здесь h(x) \beta + \beta_{0} = 0 - разделяющая поверхность. Если отображение подобрано удачно, в новом пространстве классы могут быть линейно разделимы или близки к таковым.

Оказывается, все вычисления при обучении и при расчете функции f(x) можно организовать так, что h(x) встречается только в выражениях вида

K(x,x') = h(x)h(x').

В частности уравнение разделяющей поверхности имеет вид

\left(\sum_{i=1}^N{\alpha_{i} y^{(i)} h(x^{(i)})}\right) h(x) + \beta_{0} = 0

что эквивалентно

\sum_{i=1}^N{\alpha_{i} y^{(i)} h(x^{(i)}) h(x)} + \beta_{0} = 0 \;\;\; или \;\;\; \sum_{i=1}^N{\alpha_{i} y^{(i)} K(x^{(i)}, x)} + \beta_{0} = 0.

Функция K(x,x') называется ядром. На практике, таким образом, вместо того, чтобы испытывать различные функции h можно (так и поступают) подбирать наиболее подходящее ядро K(x,x'). Заметим, что не любая функция K: \mathbb{R}^d \times \mathbb{R}^d \rightarrow \mathbb{R} представима в виде K(x,x')=h(x)h(x'), т.е. может быть использована в качестве ядра. Приведем перечень некоторых популярных функций-ядер:

  • линейное ядро: K(x,x')=xx';
  • многочлен степениd: K(x,x')=(\gamma_{0} + \gamma xx')^d;
  • радиальная функция: K(x,x')= e^{-\gamma \parallet x-x' \parallet^2};
  • сигмоидальная ("нейронная") функция: K(x,x')=tanh(\gamma_{0} + \gamma xx').

Для того чтобы использовать метод опорных векторов для задачи классификации с числом классом K > 2, возможно использовать две стратегии:

  • "Каждый против каждого": построить K(K-1)/2 классификаторов на всех возможных подзадачах бинарной классификации. Новый объект классифицируется всеми построенными решающими правилами, затем выбирается преобладающий класс.
  • "Один против всех": обучить K моделей на задачах бинарной классификации вида "один класс против всех остальных". Класс нового объекта выбирается по максимальному значению отступа.
1.1.4. Деревья решений

Деревья решений [ 3 ] являются одним из наиболее наглядных и универсальных алгоритмов обучения. К достоинствам деревьев решений следует отнести:

  • Возможность производить обучение на исходных данных без их дополнительной предобработки (нормализация и т. п.);
  • Нечувствительность к монотонным преобразованиям данных;
  • Устойчивость к выбросам;
  • Возможность обрабатывать данные с пропущенными значения;
  • Поддержка работы с входными переменными разных (смешанных) типов;
  • Возможность интерпретации построенного дерева решений.

Кроме того, существуют эффективные алгоритмы их настройки (обучения), например, CART – Classification and Regression Trees [ 3 ] или See5/C5.0.

Основная идея деревьев решений состоит в рекурсивном разбиении пространства признаков с помощью разбиений (splits): гиперплоскостей, параллельных координатным гиперплоскостям (если признак – количественный), либо по категориям (если признак номинальный). В каждом из полученных в конце процедуры "ящиков" R_{1},R_{2},...,R_{M} функция аппроксимируется константой:

  • Для задачи классификации:
    f(x) = arg \max_{k} \mid \{i:x^{(i)} \in R_{m}, y^{(i)} = k\} \mid
  • Для задачи восстановления регрессии:
    f(x) = \frac{1}{N_{m}} \sum_{x^{(i)} \in R_{m}} {y^{(i)}}

В алгоритме CART разбиения имеют вид:

  • x_{j} \leq c, если j-й признак количественный;
  • x_{j} \in L, если j -й признак качественный, L \subset Q_{j}, где Q_{j} - набор значений, которые может принимать j-й признак.

Дерево строится рекурсивно с помощью следующей жадной процедуры, на каждом шаге максимально уменьшая значение функции, описывающей неоднородность данных, содержащихся в узле дерева. Пусть на текущем шаге имеется разбиение пространства признаков на области (ящики) R_{1},R_{2},...,R_{M}

  • Выбираем область R_{M}.
  • Выбираем j и c (или L ), так, чтобы добиться максимального уменьшения неоднородности, или загрязненности, (impurity) Im_{m}.
  • Строим разбиение и повторяем действия.

Разбиения проводятся до тех пор, пока в строящиеся вершины попадает достаточное количество точек обучающей выборки, или пока дерево не достигнет заданной глубины.

Используют различные способы измерить неоднородность, например,

  • Для задачи классификации:
    Im_{m} = \frac{1}{N_{m}} \mid \{i:x^{(i)} \in R_{m}, y^{(i)} \ne f(x^{(i)})\} \mid,
  • Для задачи восстановления регрессии:
    Im_{m} = \sum_{x^{(i)} \in R_{m}} {\left(y^{(i)} - f(x^{(i)}) \right)^2}.

где N_{m} - количество точек из обучающей выборки, попавших в область R_{m}.

Другой важный параметр модели - это глубина дерева решений, регулирующая, "как сильно" будет разбито пространство признаков. Небольшое число разбиений может привести к тому, что построенная модель не будет учитывать некоторые особенности распределения признаков, описывающих те или иные классы, и таким образом приведет к уменьшению точности предсказания. Чрезмерное число разбиений может привести к переобучению модели и снижению её обобщающей способности.

Для того чтобы избежать переобучения, используется процедура отсечений (prunning) [ 3 ].

< Лекция 1 || Лекция 2: 123 || Лекция 3 >
Александра Максимова
Александра Максимова

При прохождении теста 1 в нем оказались вопросы, который во-первых в 1 лекции не рассматривались, во-вторых, оказалось, что вопрос был рассмаотрен в самостоятельно работе №2. Это значит, что их нужно выполнить перед прохождением теста? или это ошибка?
 

Алена Борисова
Алена Борисова

В лекции по обработке полутоновых изображений (http://www.intuit.ru/studies/courses/10621/1105/lecture/17979?page=2) увидела следующий фильтр:


    \begin{array}{|c|c|c|}
    \hline \\
    0 & 0 & 0 \\
    \hline \\
    0 & 2 & 0 \\
    \hline \\
    0 & 0 & 0 \\
    \hline 
    \end{array} - \frac{1}{9} \begin{array}{|c|c|c|}
    \hline \\
    0 & 0 & 0 \\
    \hline \\
    0 & 1 & 0 \\
    \hline \\
    0 & 0 & 0 \\
    \hline 
    \end{array}

В описании говорится, что он "делает изображение более чётким, потому что, как видно из конструкции фильтра, в однородных частях изображение не изменяется, а в местах изменения яркости это изменение усиливается".

Что вижу я в конструкции фильтра (скорее всего ошибочно): F(x, y) = 2 * I(x, y) - 1/9 I(x, y) = 17/9 * I(x, y), где F(x, y) - яркость отфильтрованного пикселя, а I(x, y) - яркость исходного пикселя с координатами (x, y). Что означает обычное повышение яркости изображения, при этом без учета соседних пикселей (так как их множители равны 0).

Объясните, пожалуйста, как данный фильтр может повышать четкость изображения?