Что показывает критерий информативности?
Комментарии (2)
Ответ сгенерирован нейросетью и может содержать ошибки
Критерий информативности: глубокий разбор
Это фундаментальное понятие в ML и информационной теории. Объясню с нуля.
Определение
Критерий информативности показывает, насколько хорошо признак (признаки) разделяют классы или помогают предсказывать целевую переменную.
Другими словами: какое количество информации о целевой переменной содержит этот признак?
Главная идея: Энтропия
Центральная концепция - энтропия (мера неопределённости).
Без информации (классы равномерны):
- 50% класс A, 50% класс B
- Энтропия = максимальная (1.0)
- Неуверенность максимальна
С информацией (классы разделены):
- 95% класс A, 5% класс B
- Энтропия = минимальная (близко к 0)
- Мы знаем, что вероятнее всего класс A
Формула энтропии:
H = -Σ(p_i * log2(p_i))
где p_i = доля класса i
Пример:
До разделения признаком:
- Класс 1: 50%, Класс 2: 50%
- H = -(0.5*log2(0.5) + 0.5*log2(0.5)) = 1.0
После разделения признаком (например, age > 30):
- Левая часть: 90% Класс 1, 10% Класс 2 → H = 0.47
- Правая часть: 10% Класс 1, 90% Класс 2 → H = 0.47
Информационный выигрыш = 1.0 - (средняя энтропия) = большой!
Этот признак информативен.
Меры информативности
1. Information Gain (Информационный выигрыш)
Используется в деревьях решений.
IG = H(parent) - weighted_average(H(children))
Что показывает: на сколько снижается неопределённость после разделения по этому признаку?
Пример в коде:
from sklearn.tree import DecisionTreeClassifier
import numpy as np
X = np.array([[30, 1], [25, 1], [45, 0], [50, 0]])
y = np.array([1, 1, 0, 0])
dt = DecisionTreeClassifier(max_depth=1)
dt.fit(X, y)
# feature_importances_ показывает информационный выигрыш
print(dt.feature_importances_)
# [0.7, 0.3] - первый признак важнее
2. Gain Ratio (Коэффициент выигрыша)
Учитывает количество разделений (intrinsic value).
Проблема Information Gain: признак с 100 уникальными значениями всегда выигрывает (переобучение).
Решение: разделить на intrinsic value.
Gain Ratio = IG / split_info
3. Gini Impurity (Примесь Джини)
Используется в CART (другой тип деревьев).
Gini = 1 - Σ(p_i)²
Примеры:
- Чистый класс (100% одного) → Gini = 0 (идеально)
- Смешанный (50/50) → Gini = 0.5 (максимально плохо)
4. Chi-Square для категориальных признаков
Проверяет, есть ли статистическая зависимость между признаком и классом.
from sklearn.feature_selection import chi2
from sklearn.preprocessing import LabelEncoder
X = ... # категориальные признаки
y = ... # целевая переменная
chi2_scores, p_values = chi2(X, y)
for i, (score, p_val) in enumerate(zip(chi2_scores, p_values)):
if p_val < 0.05: # статистически значимо
print(f"Признак {i} информативен (p={p_val:.3f})")
5. Mutual Information (Взаимная информация)
Показывает, сколько информации одна переменная содержит о другой.
MI(X, Y) = H(X) + H(Y) - H(X, Y)
Если X и Y независимы → MI = 0 Если X и Y идентичны → MI = H(X)
6. Корреляция (для численных признаков)
Пирсонова корреляция показывает линейную зависимость.
import pandas as pd
df = pd.DataFrame({
'age': [25, 30, 35, 40],
'purchased': [0, 0, 1, 1]
})
corr = df['age'].corr(df['purchased'])
print(f"Корреляция: {corr:.2f}") # близко к 1 = информативна
Практический пример: Выбор признаков
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import LabelEncoder
# Данные: предсказываем покупку
df = pd.DataFrame({
'age': [25, 30, 35, 40, 28, 32],
'income': [30000, 50000, 80000, 100000, 45000, 75000],
'color_preference': ['red', 'blue', 'red', 'blue', 'red', 'blue'],
'shoe_size': [42, 43, 44, 45, 42, 43],
'purchased': [0, 0, 1, 1, 0, 1]
})
# Random Forest даёт feature importance
rf = RandomForestClassifier(n_estimators=100)
rf.fit(df[['age', 'income', 'shoe_size']], df['purchased'])
print("Feature Importance:")
for feat, imp in zip(['age', 'income', 'shoe_size'], rf.feature_importances_):
print(f"{feat}: {imp:.3f}")
# Результат:
# age: 0.400
# income: 0.500 <- самый информативный
# shoe_size: 0.100 <- почти нет информации
# Вывод: shoe_size можно удалить
Интерпретация
Высокая информативность признака означает:
- Признак сильно коррелирует с целевой переменной
- Признак разделяет классы хорошо
- Удаление этого признака значительно ухудшит модель
- Этот признак должен быть в финальной модели
Низкая информативность означает:
- Признак почти не влияет на целевую переменную
- Удаление этого признака не повлияет на качество
- Признак может быть шумом
- Лучше удалить для уменьшения переобучения
Почему это важно?
1. Feature Selection (выбор признаков)
Не все признаки одинаково полезны. Удаление неинформативных признаков:
- Улучшает обобщаемость модели (меньше переобучение)
- Снижает размерность (быстрее обучение)
- Упрощает интерпретируемость
2. Understanding Data
Высокая информативность признака - это сигнал:
- "Этот признак действительно влияет на результат"
- "Нам стоит его лучше понимать"
3. Model Selection
Если информативные признаки очень немного:
- Может быть, это очень сложная задача
- Нужны новые признаки (feature engineering)
- Может быть, задача нерешаема
Практический совет
В своей практике я использую эту иерархию:
-
Для деревьев → Information Gain / Gini
- Встроено в sklearn
- Автоматически используется при обучении
-
Для линейных моделей → Корреляция
- Быстро вычислить
- Хорошо интерпретировать
-
Для категориальных признаков → Chi-Square
- Статистически обоснованно
- Работает для категорий
-
Для сложных зависимостей → Mutual Information
- Ловит нелинейные связи
- Дороже вычислительно
Заключение
Критерий информативности - это инструмент для понимания, какие признаки действительно помогают предсказывать целевую переменную. Высокая информативность = высокий потенциал улучшить модель. Низкая информативность = шум, лучше удалить.