Машинное обучение вики
Qbrick (обсуждение | вклад)
Метки: Визуальный редактор apiedit
 
(не показано 11 промежуточных версий 5 участников)
Строка 1: Строка 1:
'''Решающее дерево (Decision tree) ''' — решение задачи [[Обучение с учителем (Supervised learning)|обучения с учителем]], основанный на том, как решает задачи прогнозирования человек. В общем случае — это k-ичное дерево с ''решающими правилами'' в нелистовых вершинах (узлах) и некотором заключении о целевой функции в листовых вершинах (''прогнозом''). ''Решающее правило'' — некоторая функция от объекта, позволяющее определить, в какую из дочерних вершин нужно поместить рассматриваем объект. В листовых вершинах могут находиться разные объекты: класс, который нужно присвоить попавшему туда объекту (в задаче классификации), вероятности классов (в задаче классификации), непосредственно значение целевой функции (задача регрессии).
+
'''Решающее дерево (Decision tree) ''' — решение задачи [[Обучение с учителем (Supervised learning)|обучения с учителем]], основанный на том, как решает задачи прогнозирования человек. В общем случае — это k-ичное дерево с ''решающими правилами'' в нелистовых вершинах (узлах) и некотором заключении о целевой функции в листовых вершинах (''прогнозом''). ''Решающее правило'' — некоторая функция от объекта, позволяющее определить, в какую из дочерних вершин нужно поместить рассматриваемый объект. В листовых вершинах могут находиться разные объекты: класс, который нужно присвоить попавшему туда объекту (в задаче классификации), вероятности классов (в задаче классификации), непосредственно значение целевой функции (задача регрессии).
   
 
Чаще всего на практике используются '''двоичные решающие деревья'''.
 
Чаще всего на практике используются '''двоичные решающие деревья'''.
Строка 35: Строка 35:
   
 
== Критерии останова ==
 
== Критерии останова ==
[https://github.com/esokolov/ml-course-msu/blob/master/ML16/lecture-notes/Sem04_trees.pdf Лекции Соколова] (6 стр.)
+
[https://github.com/esokolov/ml-course-msu/blob/master/ML16/lecture-notes/Sem04_trees.pdf Семинары Соколова], стр. 6
   
 
* Ограничение максимальной глубины дерева.
 
* Ограничение максимальной глубины дерева.
Строка 41: Строка 41:
 
* Ограничение максимального количества листьев в дереве.
 
* Ограничение максимального количества листьев в дереве.
 
* Останов в случае, если все объекты в вершине относятся к одному классу.
 
* Останов в случае, если все объекты в вершине относятся к одному классу.
* Требование, что Information gain при дроблении улучшался как минимум
+
* Требование, что Information gain при дроблении улучшался как минимум на <math>s</math> процентов.
  +
на <math>s</math> процентов.
 
 
== Стрижка ==
 
Для любой обучающей выборки существует дерево, которое не будет допускать на нём ни одной ошибки. Подобрать правильный критерий останова бывает затруднительно, поэтому прибегают к стрижке &mdash; строят дерево целиком, а затем начинают обрубать узлы с листов.
  +
=== Стрижка по валидационной выборке ===
  +
[https://yandexdataschool.ru/edu-process/courses/machine-learning#item-3 Лекции Воронцова], 63-я минута.
  +
  +
Рассмотрим бинарное решающее дерево на примере задачи классификации.
  +
  +
Выделим валидационной выборку порядка половины размера всей выборки (или можно, например, разделить выборку на 2 части следующим образом: <math>\tfrac{2}{3}</math> всей выборки оставить в качестве тренировочной, <math>\tfrac{1}{3}</math> &mdash; в качестве валидационной)
  +
  +
Построим дерево по тренировочной выборке. Пропустим через построенное дерево валидационную выборку и рассмотрим любую внутреннюю вершину <math>t</math> и её левую и правую вершины <math>L_t, R_t</math>. Если до <math>t</math> не дошло ни одного объекта из валидационной выборки, то говорим, что эта вершина (и все её поддеревья) незначимые и делаем из <math>t</math> листовую (ставим в качестве предиката мажоритарный класс в этой вершине по тренировочной выборке). Если до <math>t</math>
  +
дошли объекты из валидационной выборки, то рассмотрим следующие 3 величины:
  +
  +
# [[Критерий информативности (Impurity function)#Ошибка классификации|Число ошибок классификации]] поддеревом из вершины <math>t</math>
  +
# [[Критерий информативности (Impurity function)#Ошибка классификации|Число ошибок классификации]] поддеревом из вершины <math>L_t</math>
  +
# [[Критерий информативности (Impurity function)#Ошибка классификации|Число ошибок классификации]] поддеревом из вершины <math>R_t</math>
  +
  +
Если в 1) [[Критерий информативности (Impurity function)#Ошибка классификации|Число ошибок классификации]] поддеревом из вершины <math>t</math> равно 0, то значит делаем из <math>t</math> листовую с соответствующим прогнозом для класса.
  +
  +
Выберем минимум из трёх вышеприведенных пунктов. В зависимости от того, какое из них минимально, сделаем соответственно следующие действия:
  +
  +
# Ничего не делать
  +
# Заменить дерево из вершины <math>t</math> деревом из вершины <math>L_t</math>
  +
# Заменить дерево из вершины <math>t</math> деревом из вершины <math>R_t</math>
  +
  +
=== Cost-complexity pruning ===
  +
[https://github.com/esokolov/ml-course-msu/blob/master/ML16/lecture-notes/Sem04_trees.pdf Семинары Соколова], стр. 6 &ndash; 7.
  +
  +
Обозначим дерево, полученное в результате работы жадного алгоритма, через <math>T_0</math>. Поскольку в
  +
каждом из листьев находятся объекты только одного класса, значение функционала <math>R(T)</math> будет минимально на самом дереве <math>T_0</math> (среди всех поддеревьев). Однако данный функционал характеризует лишь качество дерева на обучающей выборке, и
  +
чрезмерная подгонка под нее может привести к переобучению. Чтобы преодолеть эту
  +
проблему, введем новый функционал <math>R_\alpha(T)</math>, представляющий собой сумму исходного функционала <math>R(T)</math> и штрафа за размер дерева:
  +
  +
<math>
  +
\begin{array}{lr}
  +
R_\alpha(T) = R(T) + \alpha|T| & (*) \\
  +
\end{array}
  +
</math>
  +
  +
где <math>|T |</math> &mdash; число листьев в поддереве <math>T</math> , а <math>\alpha > 0</math> &mdash; параметр. Это один из примеров [[ссылка на статью про регуляризацию|регуляризованных]] критериев качества , которые ищут баланс между качеством
  +
классификации обучающей выборки и сложностью построенной модели. В дальнейшем мы много раз будем сталкиваться с такими критериями.
  +
Можно показать, что существует последовательность вложенных деревьев с
  +
одинаковыми корнями:
  +
<math>T_K \subset T_{K-1} \subset \dots \subset T_0</math> ,
  +
(здесь <math>T_K</math> &mdash; тривиальное дерево, состоящее из корня дерева <math>T_0</math>), в которой каждое
  +
дерево <math>T_i</math> минимизирует критерий <math>(*)</math> для <math>\alpha</math> из интервала <math>\alpha \in [\alpha_i , \alpha_{i + 1})</math>, причем
  +
<math>0 = \alpha_0 < \alpha_1 < \dots < \alpha_K < +\infty</math>.
  +
Эту последовательность можно достаточно эффективно найти путем обхода дерева.
  +
Далее из нее выбирается оптимальное дерево по отложенной выборке или с помощью
  +
кросс-валидации.
   
=== Стрижка ===
 
Для любой обучающей выборки существует дерево, которое не будет допускать на нём ни одной ошибки. Подобрать правильный критерий останова бывает затруднительно, поэтому прибегают к стрижке &mdash; строят дерево целиком, а затем начинают обрубать узлы с листов. [[CART (Classification and regression tree)#Стрижка (Pruning)|Пример алгоритма стрижки в реализации CART]].
 
 
== Выбор прогноза в листе ==
 
== Выбор прогноза в листе ==
 
* Самый простой способ &mdash; взять самый часто встречающийся класс среди объектов обучающей выборки, попавших в этот лист, для классификации или среднее целевых функций этих объектов для регрессии.
 
* Самый простой способ &mdash; взять самый часто встречающийся класс среди объектов обучающей выборки, попавших в этот лист, для классификации или среднее целевых функций этих объектов для регрессии.
Строка 51: Строка 98:
 
* В задачах классификации c <math>k</math> классами в листе <math>t</math> также можно хранить вероятности классов &mdash; например, по классической вероятности: <math>\mathbb{P}(y=y_i|x) = \dfrac{\#{X_t}}{N(t)}</math>, где <math>\mathbb{Y} = \{y_1, y_2, \dots, y_k\}</math> &mdash; классы. Более подробно, как в таком случае выбирать класс, описано в [[Решающее дерево (Decision tree)#Метод обработки пропущенных значений|обработке пропусков]]
 
* В задачах классификации c <math>k</math> классами в листе <math>t</math> также можно хранить вероятности классов &mdash; например, по классической вероятности: <math>\mathbb{P}(y=y_i|x) = \dfrac{\#{X_t}}{N(t)}</math>, где <math>\mathbb{Y} = \{y_1, y_2, \dots, y_k\}</math> &mdash; классы. Более подробно, как в таком случае выбирать класс, описано в [[Решающее дерево (Decision tree)#Метод обработки пропущенных значений|обработке пропусков]]
   
* Если задана [[Матрица штрафов (Сost matrix)|матрица штрафов]], то есть в случае несимметричных потерь, можно минимизировать штраф и взять в качестве класса в листе <math> \hat{y} </math>:
+
* Если задана [[Матрица штрафов (Сost matrix)|матрица штрафов]], то есть в случае несимметричных потерь, можно минимизировать штраф и взять в качестве класса в листе <math> \hat{y} </math>:
 
<math>\hat{y} = \underset{y \in \mathbb{Y}}{\operatorname{argmin}} \sum_{i} \lambda_{y_{i}y}</math>, где <math>\lambda_{y_iy}</math> &mdash; элементы матрицы штрафов.
 
<math>\hat{y} = \underset{y \in \mathbb{Y}}{\operatorname{argmin}} \sum_{i} \lambda_{y_{i}y}</math>, где <math>\lambda_{y_iy}</math> &mdash; элементы матрицы штрафов.
   
Строка 104: Строка 151:
   
 
Пусть категориальный признак <math>x_j</math> имеет
 
Пусть категориальный признак <math>x_j</math> имеет
множество значений <math>Q = \{u_1, \dots, u_q\}, |Q| = q</math>. Разобьем множество значений на дванепересекающихся подмножества: <math>Q = Q_1 \bigsqcup Q_2</math> , и определим предикат как индикатор
+
множество значений <math>Q = \{u_1, \dots, u_q\}, |Q| = q</math>. Разобьем множество значений на два непересекающихся подмножества: <math>Q = Q_1 \bigsqcup Q_2</math> , и определим предикат как индикатор
попадания в первое подмножество: <math>\beta(x) = \mathbb{I}[x_j \in Q_1 ]</math>. Таким образом, объект будет попадать в левое поддерево, если признак <math>x_j</math> попадает в множество <math>Q_1</math> , и в первоеподдерево в противном случае. Основная проблема заключается в том, что для построения оптимального предиката нужно перебрать <math>2^{q-1} - 1</math> вариантов разбиения,что может быть не вполне возможным.
+
попадания в первое подмножество: <math>\beta(x) = \mathbb{I}[x_j \in Q_1 ]</math>. Таким образом, объект будет попадать в левое поддерево, если признак <math>x_j</math> попадает в множество <math>Q_1</math> , и в правое поддерево в противном случае. Основная проблема заключается в том, что для построения оптимального предиката нужно перебрать <math>2^{q-1} - 1</math> вариантов разбиения,что может быть не вполне возможным.
   
 
Оказывается, можно обойтись без полного перебора в случаях с бинарной классификацией и регрессией. Обозначим через<math> R_m (u)</math> множество объектов, которые
 
Оказывается, можно обойтись без полного перебора в случаях с бинарной классификацией и регрессией. Обозначим через<math> R_m (u)</math> множество объектов, которые
 
попали в вершину <math>m</math> и у которых <math>j</math>-й признак имеет значение <math>u</math>; через <math>N_m(u)</math> обозначим количество таких объектов.
 
попали в вершину <math>m</math> и у которых <math>j</math>-й признак имеет значение <math>u</math>; через <math>N_m(u)</math> обозначим количество таких объектов.
В случае с бинарной классификацией упорядочим все значения категориально-
+
В случае с бинарной классификацией упорядочим все значения категориального признака на основе того, какая доля объектов с таким значением имеет класс <math>+1</math>:
го признака на основе того, какая доля объектов с таким значением имеет класс <math>+1</math>:
 
   
 
<math>
 
<math>
Строка 116: Строка 162:
 
</math>
 
</math>
   
после чего заменим категорию <math>u (i)</math> на число <math>i</math>, и будем искать разбиение как для вещественного признака. Можно показать, что если искать оптимальное разбиение по
+
после чего заменим категорию <math>u_{(i)}</math> на число <math>i</math>, и будем искать разбиение как для вещественного признака. Можно показать, что если искать оптимальное разбиение по
 
[[Критерий информативности (Impurity function)#Критерий Джини|критерию Джини]] или [[Критерий информативности (Impurity function)#Энтропия|энтропийному критерию]], то мы получим такое же разбиение,
 
[[Критерий информативности (Impurity function)#Критерий Джини|критерию Джини]] или [[Критерий информативности (Impurity function)#Энтропия|энтропийному критерию]], то мы получим такое же разбиение,
 
как и при переборе по всем возможным <math>2^{q-1} - 1</math> вариантам.
 
как и при переборе по всем возможным <math>2^{q-1} - 1</math> вариантам.

Текущая версия от 08:49, 12 января 2019

Решающее дерево (Decision tree) — решение задачи обучения с учителем, основанный на том, как решает задачи прогнозирования человек. В общем случае — это k-ичное дерево с решающими правилами в нелистовых вершинах (узлах) и некотором заключении о целевой функции в листовых вершинах (прогнозом). Решающее правило — некоторая функция от объекта, позволяющее определить, в какую из дочерних вершин нужно поместить рассматриваемый объект. В листовых вершинах могут находиться разные объекты: класс, который нужно присвоить попавшему туда объекту (в задаче классификации), вероятности классов (в задаче классификации), непосредственно значение целевой функции (задача регрессии).

Чаще всего на практике используются двоичные решающие деревья.

Decision tree

Алгоритм построения[]

В корне дерева — рассматриваем всю обучающую выборку.

  1. Проверить критерий останова алгоритма. Если он выполняется, выбрать для узла выдаваемый прогноз, что можно сделать несколькими способами.
  2. Иначе требуется разбить множество на несколько не пересекающихся. В общем случае в вершине задаётся решающее правило , принимающее некоторый диапазон значений. Этот диапазон разбивается на непересекающихся множеств объектов, , где — количество потомков у вершины, а каждое — это множество объектов, попавших в -го потомка.
  3. Множество в узле разбивается согласно выбранному правилу, для каждого узла алгоритм запускается рекурсивно.

Решающие правила[]

Чаще всего в качестве берут просто один из признаков, то есть .

Традиционные разбиения на диапазоны:

  • для выбранных
  • — по сути проверка угла.
  • , где расстояние определено в некотором метрическом пространстве (например,).
  • предикаты, — скалярное произведение векторов.

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

Выбор оптимального решающего правила[]

Считаем, что решаем задачу многоклассовой классификации или регрессии в -ичном дереве.

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

Затем для каждого варианта решающего правила подсчитывается мера того, насколько будут разбросаны объекты (регрессия) или перемешаны классы (классификация) при таком разбиении:

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

также называется Information gain, то есть сколько информации мы получим при таком разбиении. Для выбора решающего правила требуется взять argmax от неё по всевозможным признакам и параметрам семейства решающих правил. При таком взятии мы как раз и получим оптимальное разбиение множества объектов в текущей вершине.

Критерии останова[]

Семинары Соколова, стр. 6

  • Ограничение максимальной глубины дерева.
  • Ограничение минимального числа объектов в листе.
  • Ограничение максимального количества листьев в дереве.
  • Останов в случае, если все объекты в вершине относятся к одному классу.
  • Требование, что Information gain при дроблении улучшался как минимум на процентов.

Стрижка[]

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

Стрижка по валидационной выборке[]

Лекции Воронцова, 63-я минута.

Рассмотрим бинарное решающее дерево на примере задачи классификации.

Выделим валидационной выборку порядка половины размера всей выборки (или можно, например, разделить выборку на 2 части следующим образом: всей выборки оставить в качестве тренировочной, — в качестве валидационной)

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

  1. Число ошибок классификации поддеревом из вершины
  2. Число ошибок классификации поддеревом из вершины
  3. Число ошибок классификации поддеревом из вершины

Если в 1) Число ошибок классификации поддеревом из вершины равно 0, то значит делаем из листовую с соответствующим прогнозом для класса.

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

  1. Ничего не делать
  2. Заменить дерево из вершины деревом из вершины
  3. Заменить дерево из вершины деревом из вершины

Cost-complexity pruning[]

Семинары Соколова, стр. 6 – 7.

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

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

Выбор прогноза в листе[]

  • Самый простой способ — взять самый часто встречающийся класс среди объектов обучающей выборки, попавших в этот лист, для классификации или среднее целевых функций этих объектов для регрессии.
  • В задачах классификации c классами в листе также можно хранить вероятности классов — например, по классической вероятности: , где — классы. Более подробно, как в таком случае выбирать класс, описано в обработке пропусков
  • Если задана матрица штрафов, то есть в случае несимметричных потерь, можно минимизировать штраф и взять в качестве класса в листе :

, где — элементы матрицы штрафов.

Выбор функции потерь в общем случае является параметром алгоритма.

Прогнозирование[]

Для случая отсутствия пропущенных значений. Алгоритм: начиная с корня, применить к новому объекту решающее правило. Таким образом определяется, в какой потомок объект должен "попасть", и рекурсивно запустить этот процесс для него.

Сложность прогнозирования для одного объекта для полностью построенного дерева — , где — высота дерева. Вообще говоря, дерево может быть несбалансированным, поэтому оценка в , где — размер тренировочной выборки, не гарантируется.

Метод обработки пропущенных значений[]

Пропуск пропущенных значений[]

Лекции Воронцова, 59-я минута.

Сергей Иванов: Вроде в билетах этого нет, но вполне вопрос.

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

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

Дальше можно поступать образом, схожим с выбором прогноза в листе: так, для регрессии можно просто объединить отклики с вероятностями в качестве весов, .

Пусть — корень дерева. В случае классификации

Такой алгоритм работы с пропущенными значениями используется в ID3, C4.5.

Суррогатные разбиения[]

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

Такой алгоритм работы с пропущенными значениями используется в CART

Работа с категориальными признаками[]

SVM
Эта статья нуждается в структуризации!


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

Сергей Иванов: Возможно, часть информации здесь не относится к деревьям; следует вынести в отдельную статью по работе с категориальными признаками

One-hot кодирование[]

Из вершины делаем столько детей, сколько уникальных значений у категориального признака.

При таком подходе размер дерева увеличивается увеличивается риск переобучения.

Перевод категориальных в вещественные[]

Семинары Соколова, стр. 8

Пусть категориальный признак имеет множество значений . Разобьем множество значений на два непересекающихся подмножества: , и определим предикат как индикатор попадания в первое подмножество: . Таким образом, объект будет попадать в левое поддерево, если признак попадает в множество , и в правое поддерево в противном случае. Основная проблема заключается в том, что для построения оптимального предиката нужно перебрать вариантов разбиения,что может быть не вполне возможным.

Оказывается, можно обойтись без полного перебора в случаях с бинарной классификацией и регрессией. Обозначим через множество объектов, которые попали в вершину и у которых -й признак имеет значение ; через обозначим количество таких объектов. В случае с бинарной классификацией упорядочим все значения категориального признака на основе того, какая доля объектов с таким значением имеет класс :

после чего заменим категорию на число , и будем искать разбиение как для вещественного признака. Можно показать, что если искать оптимальное разбиение по критерию Джини или энтропийному критерию, то мы получим такое же разбиение, как и при переборе по всем возможным вариантам. Для задачи регрессии с MSE-функционалом это тоже будет верно, если упорядочивать значения признака по среднему ответу объектов с таким значением:

CART-деревья[]

Реализация решающего дерева — за подробностями милости просим сюда.