Ответ
Information Gain (IG, прирост информации) — это мера, используемая при построении деревьев решений (например, в алгоритмах ID3, C4.5). Она показывает, насколько эффективно тот или иной признак разделяет данные по целевым классам.
Суть: IG измеряет уменьшение энтропии (или неопределенности) в системе после того, как мы разделили набор данных по значениям данного признака.
IG(T, a) = Entropy(T) - Σ_{v in Values(a)} (|T_v| / |T|) * Entropy(T_v)
Где:
T— исходный набор данных.a— признак, по которому происходит разбиение.T_v— подмножество данных, где признакaимеет значениеv.Entropy(T) = - Σ_{c in Classes} p(c) * log2(p(c))— мера неупорядоченности.
Интерпретация: Чем выше значение IG для признака, тем больше "информации" он дает для классификации, и тем выше он должен быть в дереве для оптимального разбиения.
Практический пример с scikit-learn:
В DecisionTreeClassifier с критерием criterion='entropy' на каждом шаге выбирается признак с максимальным IG.
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier, plot_tree
import matplotlib.pyplot as plt
# Загрузка данных
iris = load_iris()
X, y = iris.data, iris.target
# Обучение дерева с использованием энтропии (и, следовательно, IG)
clf = DecisionTreeClassifier(criterion='entropy', max_depth=3, random_state=42)
clf.fit(X, y)
# Важность признаков (в данном контексте — усредненный IG по всем разбиениям)
print("Важность признаков (на основе IG):")
for name, importance in zip(iris.feature_names, clf.feature_importances_):
print(f" {name}: {importance:.3f}")
# Визуализация дерева (можно увидеть, по какому признаку и значению происходит первое разбиение)
plt.figure(figsize=(12,8))
plot_tree(clf, feature_names=iris.feature_names, class_names=iris.target_names, filled=True)
plt.show()
Визуализация дерева наглядно покажет, что корневой узел (первое разбиение) соответствует признаку с наибольшим IG.
Ответ 18+ 🔞
Давай разберём эту штуку, Information Gain, без всяких заумных соплей. Представь, что у тебя куча разноцветных шариков в одном мешке — полный хаос, хуй поймёшь, где красный, где синий. Это и есть энтропия, ёпта, мера беспорядка, пиздец полный.
А теперь ты берёшь и говоришь: «А давайте-ка я разделю эти шарики по размеру: большие — в одну кучу, маленькие — в другую». И вот смотришь: в куче с большими шариками стало больше красных, а в куче с маленькими — больше синих. Беспорядок-то уменьшился, ядрёна вошь! Вот насколько он уменьшился — это и есть твой «прирост информации», он же Information Gain. По сути, IG показывает, насколько хорошо признак (в нашем примере — размер) раскидывает данные по нужным нам классам (цветам).
Формула, если вдруг кому-то надо:
IG(Исходный_мешок, Признак) = Энтропия(Исходный_мешок) - [Взвешенная_средняя_энтропия_всех_новых_кучек]
Перевожу на русский: из общего бардака вычитаем средний бардак после разделения. Чем больше вычтешь — тем круче признак. Всё, блядь, просто.
А на практике это выглядит вот так (код не трогаю, он святой):
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier, plot_tree
import matplotlib.pyplot as plt
# Берём классические ирисы, с которыми все ноги вытирают
iris = load_iris()
X, y = iris.data, iris.target
# Дерево решений учим, используя энтропию (то есть считаем IG на каждом шагу)
clf = DecisionTreeClassifier(criterion='entropy', max_depth=3, random_state=42)
clf.fit(X, y)
# Смотри, какие признаки оказались самыми важными (по сути, у кого IG в среднем был выше)
print("Важность признаков (на основе IG):")
for name, importance in zip(iris.feature_names, clf.feature_importances_):
print(f" {name}: {importance:.3f}")
# А это чтобы глазами увидеть, с какого признака дерево начало долбить
plt.figure(figsize=(12,8))
plot_tree(clf, feature_names=iris.feature_names, class_names=iris.target_names, filled=True)
plt.show()
Когда запустишь, увидишь, что самый первый, корневой вопрос в дереве — это и есть признак с самым большим IG на тот момент. Дерево, как хитрая жопа, всегда выбирает тот признак, который сильнее всего проредит эту чащу неопределённости. Если IG высокий — значит, признак годный, ведро информации вычерпнул. Если низкий — ну, хуй с горы, мимо кассы, ищем дальше.
Короче, IG — это просто способ измерить, какой вопрос задать, чтобы быстрее всего докопаться до сути. Вместо того чтобы тупо перебирать всё подряд, умные алгоритмы так и работают: нашли признак с максимальным IG — бац, разбили данные пополам, и пошло-поехало. Эффективно, блядь.