[Python, Программирование] Напишем и поймем Decision Tree на Python с нуля! Часть 5. Информационная энтропия (перевод)
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Данная статья — пятая в серии. Ссылки на предыдущие статьи: первая, вторая, третья, четвертая
5.1 Информационная энтропия (Средний объем информации)
При создании дерева решений из данных алгоритм ID3 использует индекс, называемый информационной энтропией, чтобы определить, какой атрибут следует использовать для ветвления с наиболее эффективным распределением данных.
В начале, определимся с понятием объем информации. Интуитивно понятно, что объем данных = сложность, запутанность данных. Дерево решений собирает данные с одинаковыми значениями классов с каждого ветвления, таким образом снижая степень запутанности значений класса. Следовательно, при выборе атрибута, согласно которому лучше всего проводить ветвление, опираться стоит на то, насколько простыми стали данные после разветвления.
5.1.1 Определяем понятие объем информации
Объем данных, по сути, это ценность полученной информации.
Предположим, что информация о явлениях с низкой вероятностью возникновения (например, данные, согласно которым произойдет то или иное явление), встречается гораздо чаще, чем информация о событиях, которые произойдут с высокой вероятностью.
Например, знание правильного ответа из пяти предложенных вариантов, по объему информации больше, чем знание правильного ответа из двух вариантов.
И для того, чтобы передать это знание другому человеку, представим, что оно закодировано как двоичное число и отправлено по каналу связи. В данном случае объем такого сообщения (длина в битах) и будет определяться как объем информации.
Когда вероятность того, что событие E произойдет, равна P (E), объем информации I (E), который знает, что событие E произошло, определяется следующим образом.
I(E)=log2(1/P(E))=−log2P(E)
5.1.2 Что такое информационная энтропия (средний объем информации)
У любого атрибута есть несколько значений. Например атрибут “Погода” представлен в 3 вариантах: “Ясно”, “Облачно”, “Дождь”. Среднее значение атрибутов того объема информации, который был получен из каждой вероятности появления события и называется энтропией (средним объемом информации).
В следующей формуле она представления буквой Н.
H=−∑E∈ΩP(E)log2P(E)
Например, рассчитать значение энтропии 2-ух представленных на рисунке атрибутов, можно следующим образом. Более смешанная, хаотичная левая сторона имеет высокое значение энтропии, по сравнению с черной правой стороной, имеющей низкое значение энтропии.
Однако, даже не используя запутанные формулы, из примера сверху можно понять, что правой стороне не хватает сложности, если посмотреть на количество черных точек. Можно, например, рассмотреть случай с добавлением желтой точки, создав тем самым ситуацию с 3 значениями. Информационную энтропию можно вычислить одинаковым образом как для двух значений, так и для трех значений, что делает ее, можно сказать, унифицированной и простой в обращении.
В примере ниже, несмотря на одинаковое количество черных точек с обеих сторон, значение энтропии будет выше на стороне, где присутствуют желтый и красный цвет, нежели чем на стороне, где оставшиеся точки только красные.
И алгоритм ID3 ищет значения атрибутов, которые разделяют данные на группы с более низкой энтропией.
5.2 Вычисление информационной энтропии
Информационная энтропия может быть вычислена с помощью следующего лямбда-выражения с DataFrame в качестве ввода и значением энтропии в качестве вывода.
entropy = lambda df:-reduce(lambda x,y:x+y,map(lambda x:(x/len(df))*math.log2(x/len(df)),df.iloc[:,-1].value_counts()))
Так как в данном лямбда-выражении уже присутствует другое лямбда-выражение, можно все немного упорядочить, и получится следующее:
entropy = lambda df:-reduce( #4.reduce создает одно значение из всех элементов массива.
lambda x,y:x+y,#5.Складываем значения энтропии, полученные из индивидуальных значений (9,5).
map( #2.Преобразовываем число (9,5) частотного массива (["○": 9, "×": 5]) в энтропию согласно следующему лямбда-выражению
lambda x:(x/len(df))*math.log2(x/len(df)),#3.Вычисляем P(E)log2(P(E))
df.iloc[:,-1].value_counts() #1.Частота последнего столбца DataFrame(например:["○":9,"×":5])
)
)
Данное выражение можно упорядочить следующим образом:
- df.iloc[:,-1]извлекает последний столбец DataFrame, а value_counts дает его частотное распределение (пример частотного распределения: ["○": 9, "×": 5])
- map преобразует каждое из значений частотного распределения (например, 9,5) в значения энтропии.
- (x / len (df)) * math.log2 (x / len (df)) вычисляет формулу P (E) log2P (E) для одного значения энтропии.
- reduce используется для создания единого значения из всех элементов массива. Например, его можно использовать для расчета сумм, средних значений и т. д.
- Лямбда-выражение x, y: x + y дает сумму двух аргументов (x, y), то есть сумму массивов. Это часть с “сигмой” в формуле энтропии (−∑E∈ΩP(E)log2P(E)). Так как выражение имеет минус в начале, оно также имеет минус перед reduce в программе.
5.2.1 Вычисление информационной энтропии
Информационная энтропия для следующих данных составляет 0,9402859586706309.
d = {"Гольф":["×","×","○","○","○","×","○","×","○","○","○","○","○","×"]}
# Энтропия равна 0.9402859586706309
С другой стороны, в случае, если первые два x изменяются на ○, ○ станут доминирующими данными (сложность снизится), то энтропия будет равна 0,74959525725948.
d = {"Гольф":["○","○","○","○","○","×","○","×","○","○","○","○","○","×"]}
# Энтропия равна 0.74959525725948
Ниже приведен список всех программ, вычисляющих информационную энтропию.
import pandas as pd
from functools import reduce
import math
d = {"Гольф":["×","×","○","○","○","×","○","×","○","○","○","○","○","×"]}
df0 = pd.DataFrame(d)
entropy = lambda df:-reduce(
lambda x,y:x+y,
map(
lambda x:(x/len(df))*math.log2(x/len(df)),
df.iloc[:,-1].value_counts()
)
)
print(entropy(df0)) # Вывод 0.9402859586706309
Спасибо за прочтение!
Мы будем очень рады, если вы расскажете нам, понравилась ли вам данная статья, понятен ли перевод, была ли она вам полезна?
===========
Источник:
habr.com
===========
===========
Автор оригинала: 豊久 中田
===========Похожие новости:
- [Мессенджеры, JavaScript, Программирование, VueJS] Как создать приложение-чат за двадцать минут (перевод)
- [Разработка веб-сайтов, JavaScript, Программирование] Как анимировать элемент «details» с помощью WAAPI (перевод)
- [Программирование, Совершенный код, C++, C] Пока смерть не разлучит нас или всё о static в C++
- [Python, Программирование, Машинное обучение, Искусственный интеллект] Машинное обучение на помощь руководителю разработки
- [Программирование микроконтроллеров, Разработка на Raspberry Pi, DIY или Сделай сам, Здоровье] Затерянные в тумане, или Увлекательные приключения в мире АПР *
- [Разработка робототехники, Учебный процесс в IT, Разработка под Arduino, Робототехника, DIY или Сделай сам] Начать заниматься роботами должно быть просто
- [Информационная безопасность, Python, Реверс-инжиниринг, Разработка под Windows] Windows: достучаться до железа
- [Программирование, Интерфейсы, Гаджеты, Компьютерное железо, Научно-популярное] Попытка использовать Raspberry Pi 4 в качестве десктопа. Часть 2, Ubuntu
- [Программирование, Образование за рубежом, Здоровье] Школа 42 как павший воин в эпоху COVID
- [Поисковые технологии, PHP, MySQL, JavaScript, Функциональное программирование] Pick — самая маленькая поисковая система на PHP и MySQL
Теги для поиска: #_python, #_programmirovanie (Программирование), #_python, #_programmirovanie (программирование), #_data_science, #_decision_tree, #_tutorial, #_entropija (энтропия), #_python, #_programmirovanie (
Программирование
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 19:52
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Данная статья — пятая в серии. Ссылки на предыдущие статьи: первая, вторая, третья, четвертая 5.1 Информационная энтропия (Средний объем информации) При создании дерева решений из данных алгоритм ID3 использует индекс, называемый информационной энтропией, чтобы определить, какой атрибут следует использовать для ветвления с наиболее эффективным распределением данных. В начале, определимся с понятием объем информации. Интуитивно понятно, что объем данных = сложность, запутанность данных. Дерево решений собирает данные с одинаковыми значениями классов с каждого ветвления, таким образом снижая степень запутанности значений класса. Следовательно, при выборе атрибута, согласно которому лучше всего проводить ветвление, опираться стоит на то, насколько простыми стали данные после разветвления. 5.1.1 Определяем понятие объем информации Объем данных, по сути, это ценность полученной информации. Предположим, что информация о явлениях с низкой вероятностью возникновения (например, данные, согласно которым произойдет то или иное явление), встречается гораздо чаще, чем информация о событиях, которые произойдут с высокой вероятностью. Например, знание правильного ответа из пяти предложенных вариантов, по объему информации больше, чем знание правильного ответа из двух вариантов. И для того, чтобы передать это знание другому человеку, представим, что оно закодировано как двоичное число и отправлено по каналу связи. В данном случае объем такого сообщения (длина в битах) и будет определяться как объем информации. Когда вероятность того, что событие E произойдет, равна P (E), объем информации I (E), который знает, что событие E произошло, определяется следующим образом. I(E)=log2(1/P(E))=−log2P(E)
5.1.2 Что такое информационная энтропия (средний объем информации) У любого атрибута есть несколько значений. Например атрибут “Погода” представлен в 3 вариантах: “Ясно”, “Облачно”, “Дождь”. Среднее значение атрибутов того объема информации, который был получен из каждой вероятности появления события и называется энтропией (средним объемом информации). В следующей формуле она представления буквой Н. H=−∑E∈ΩP(E)log2P(E)
Например, рассчитать значение энтропии 2-ух представленных на рисунке атрибутов, можно следующим образом. Более смешанная, хаотичная левая сторона имеет высокое значение энтропии, по сравнению с черной правой стороной, имеющей низкое значение энтропии. Однако, даже не используя запутанные формулы, из примера сверху можно понять, что правой стороне не хватает сложности, если посмотреть на количество черных точек. Можно, например, рассмотреть случай с добавлением желтой точки, создав тем самым ситуацию с 3 значениями. Информационную энтропию можно вычислить одинаковым образом как для двух значений, так и для трех значений, что делает ее, можно сказать, унифицированной и простой в обращении. В примере ниже, несмотря на одинаковое количество черных точек с обеих сторон, значение энтропии будет выше на стороне, где присутствуют желтый и красный цвет, нежели чем на стороне, где оставшиеся точки только красные. И алгоритм ID3 ищет значения атрибутов, которые разделяют данные на группы с более низкой энтропией. 5.2 Вычисление информационной энтропии Информационная энтропия может быть вычислена с помощью следующего лямбда-выражения с DataFrame в качестве ввода и значением энтропии в качестве вывода. entropy = lambda df:-reduce(lambda x,y:x+y,map(lambda x:(x/len(df))*math.log2(x/len(df)),df.iloc[:,-1].value_counts()))
Так как в данном лямбда-выражении уже присутствует другое лямбда-выражение, можно все немного упорядочить, и получится следующее: entropy = lambda df:-reduce( #4.reduce создает одно значение из всех элементов массива.
lambda x,y:x+y,#5.Складываем значения энтропии, полученные из индивидуальных значений (9,5). map( #2.Преобразовываем число (9,5) частотного массива (["○": 9, "×": 5]) в энтропию согласно следующему лямбда-выражению lambda x:(x/len(df))*math.log2(x/len(df)),#3.Вычисляем P(E)log2(P(E)) df.iloc[:,-1].value_counts() #1.Частота последнего столбца DataFrame(например:["○":9,"×":5]) ) ) Данное выражение можно упорядочить следующим образом:
5.2.1 Вычисление информационной энтропии Информационная энтропия для следующих данных составляет 0,9402859586706309. d = {"Гольф":["×","×","○","○","○","×","○","×","○","○","○","○","○","×"]}
# Энтропия равна 0.9402859586706309 С другой стороны, в случае, если первые два x изменяются на ○, ○ станут доминирующими данными (сложность снизится), то энтропия будет равна 0,74959525725948. d = {"Гольф":["○","○","○","○","○","×","○","×","○","○","○","○","○","×"]}
# Энтропия равна 0.74959525725948 Ниже приведен список всех программ, вычисляющих информационную энтропию. import pandas as pd
from functools import reduce import math d = {"Гольф":["×","×","○","○","○","×","○","×","○","○","○","○","○","×"]} df0 = pd.DataFrame(d) entropy = lambda df:-reduce( lambda x,y:x+y, map( lambda x:(x/len(df))*math.log2(x/len(df)), df.iloc[:,-1].value_counts() ) ) print(entropy(df0)) # Вывод 0.9402859586706309 Спасибо за прочтение! Мы будем очень рады, если вы расскажете нам, понравилась ли вам данная статья, понятен ли перевод, была ли она вам полезна? =========== Источник: habr.com =========== =========== Автор оригинала: 豊久 中田 ===========Похожие новости:
Программирование ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 19:52
Часовой пояс: UTC + 5