Я предполагаю, что энтропия упоминалась в контексте построения деревьев решений.
Для иллюстрации представьте себе задачу обучения классифицирует имена по мужским / женским группам. Дан список имен, каждое из которых помечено m или f, мы хотим изучить модель который соответствует данным и может использоваться для предсказания пола нового невидимого имени.
name gender
----------------- Now we want to predict
Ashley f the gender of "Amro" (my name)
Brian m
Caroline f
David m
Первый шаг - решить, что функции данных относятся к целевому классу, который мы хотим спрогнозировать. Вот некоторые примеры функций: первая / последняя буква, длина, количество гласных, оканчивается ли она на гласную и т. Д. Итак, после извлечения функции наши данные выглядят так:
# name ends-vowel num-vowels length gender
# ------------------------------------------------
Ashley 1 3 6 f
Brian 0 2 5 m
Caroline 1 4 8 f
David 0 2 5 m
Цель состоит в том, чтобы построить дерево решений. Примером дерева может быть:
length<7
| num-vowels<3: male
| num-vowels>=3
| | ends-vowel=1: female
| | ends-vowel=0: male
length>=7
| length=5: male
в основном каждый узел представляет собой тест, выполняемый для одного атрибута, и мы идем влево или вправо в зависимости от результата теста. Мы продолжаем перемещаться по дереву, пока не дойдем до листового узла, который содержит предсказание класса (m или f).
Итак, если мы запустим имя Amro по этому дереву, мы начнем с проверки «is the length‹ 7? »и ответим да, Итак, мы идем по той ветке. После ветки следующий тест «количество гласных‹ 3? »снова дает результат true. Это приводит к конечному узлу, помеченному m, и, таким образом, прогноз будет мужской (которым я и оказался, поэтому дерево предсказало результат правильно).
Дерево решений построено сверху вниз, но вопрос в том, как выбрать, какой атрибут для разделения на каждом узле? Ответ заключается в том, чтобы найти функцию, которая наилучшим образом разделяет целевой класс на максимально чистые дочерние узлы (то есть узлы, которые не содержат смесь мужских и женских узлов, скорее чистые узлы только с одним классом).
Этот показатель чистоты называется информацией a >. Он представляет собой ожидаемую сумму информация, которая потребуется для определения того, следует ли классифицировать новый экземпляр (имя) как мужской или женский, учитывая пример, который достиг узла. Мы рассчитываем его исходя из количества мужских и женских классов в узле.
Энтропия, с другой стороны, является мерой нечистоты < / em> (наоборот). Он определен для двоичного класса со значениями _9 _ / _ 10_ как:
Entropy = - p(a)*log(p(a)) - p(b)*log(p(b))
Эта двоичная функция энтропии изображена на рисунке ниже (случайная величина может принимать одно из двух значений). Он достигает своего максимума, когда вероятность равна p=1/2, что означает, что p(X=a)=0.5 или аналогичныйp(X=b)=0.5 имеет 50% / 50% шанс быть либо a, либо b (неопределенность максимальна). Функция энтропии находится на нулевом минимуме, когда вероятность равна p=1 или p=0 с полной уверенностью (p(X=a)=1 или p(X=a)=0 соответственно, последнее подразумевает p(X=b)=1).

Конечно, определение энтропии можно обобщить для дискретной случайной величины X с N исходами (а не только двумя):

(log в формуле обычно принимается как логарифм с основанием 2) < / em>
Вернемся к нашей задаче классификации имен, давайте рассмотрим пример. Представьте, что в какой-то момент в процессе построения дерева мы рассматривали следующее разбиение:
ends-vowel
[9m,5f] <--- the [..,..] notation represents the class
/ \ distribution of instances that reached a node
=1 =0
------- -------
[3m,4f] [6m,1f]
Как видите, до разделения у нас было 9 мужчин и 5 женщин, то есть P(m)=9/14 и P(f)=5/14. Согласно определению энтропии:
Entropy_before = - (5/14)*log2(5/14) - (9/14)*log2(9/14) = 0.9403
Затем мы сравниваем его с энтропией, вычисленной после рассмотрения разделения, глядя на две дочерние ветви. В левой ветви ends-vowel=1 имеем:
Entropy_left = - (3/7)*log2(3/7) - (4/7)*log2(4/7) = 0.9852
и правая ветвь ends-vowel=0, мы имеем:
Entropy_right = - (6/7)*log2(6/7) - (1/7)*log2(1/7) = 0.5917
Мы объединяем левую / правую энтропию, используя количество экземпляров в каждой ветви как весовой коэффициент (7 экземпляров пошли налево, а 7 экземпляров пошли направо), и получить окончательную энтропию после разделения:
Entropy_after = 7/14*Entropy_left + 7/14*Entropy_right = 0.7885
Теперь, сравнивая энтропию до и после разделения, мы получаем меру получения информации , или сколько информации мы получили, выполнив разделение с помощью этой конкретной функции:
Information_Gain = Entropy_before - Entropy_after = 0.1518
Вышеупомянутый расчет можно интерпретировать следующим образом: выполнив разделение с помощью функции end-vowels, мы смогли уменьшить неопределенность в результате прогнозирования поддерева на небольшую величину 0,1518 (измеряется в биты как единиц информации).
В каждом узле дерева этот расчет выполняется для каждого объекта, и для разделения в жадный способ (таким образом, отдавая предпочтение функциям, которые производят чистые разбиения с низкой неопределенностью / энтропией). Этот процесс применяется рекурсивно от корневого узла вниз и останавливается, когда листовой узел содержит экземпляры, имеющие один и тот же класс (нет необходимости разделять его дальше).
Обратите внимание, что я пропустил некоторые подробности, которые выходят за рамки этой публикации, в том числе о том, как обрабатывать числовые функции, отсутствующие значения, переоснащение и обрезка деревьев и т. д.
person
Amro
schedule
07.12.2009