Что такое критерий Джини (Gini impurity) в контексте деревьев решений?

«Что такое критерий Джини (Gini impurity) в контексте деревьев решений?» — вопрос из категории Деревья и ансамбли, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Критерий Джини (Gini impurity) — это мера неоднородности или «загрязненности» узла в дереве решений, используемая для оценки качества разбиения. Он показывает вероятность неправильной классификации случайно выбранного элемента из узла, если его метка определяется согласно распределению классов в этом узле.

Формула: Gini = 1 - Σ(p_i)², где p_i — доля (вероятность) класса i в узле.

Пример расчета для узла:

  • Узел содержит 10 объектов: 7 класса A и 3 класса B.
  • p_A = 0.7, p_B = 0.3
  • Gini = 1 - (0.7² + 0.3²) = 1 - (0.49 + 0.09) = 0.42

Ключевые свойства:

  • Диапазон: от 0 (узел чист, содержит объекты одного класса) до максимума, который зависит от числа классов. Для двух классов максимум — 0.5.
  • Цель разбиения: алгоритм выбирает такое разбиение, которое максимально уменьшает средневзвешенную неоднородность дочерних узлов (снижает критерий Джини).
  • Сравнение с энтропией: Джини вычислительно немного эффективнее, так как не требует вычисления логарифмов. На практике разница в качестве моделей между использованием Джини и энтропии (information gain) часто незначительна.

Пример использования в scikit-learn:

from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import make_classification

X, y = make_classification(n_samples=100, n_features=4, random_state=42)
# Создание дерева решений с использованием критерия Джини
model = DecisionTreeClassifier(criterion='gini', max_depth=3)
model.fit(X, y)

# Можно посмотреть важность признаков, рассчитанную на основе уменьшения неоднородности
print("Feature importances:", model.feature_importances_)