Ответ
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.