Вопрос или проблема
В пакете ranger для R нечистота узла измеряется с помощью индекса Джини для деревьев классификации. Я ожидаю, что индекс Джини будет находиться в диапазоне от 0 до 1, так как
$$ Gini = 1-\sum_{i=1}^C p_i^2$$,
где $p_i$ — это доля образцов, принадлежащих классу i, а C — общее количество классов в этом узле.
Однако, когда я обучаю случайный лес, например
ranger(Species ~ ., iris, num.trees = 5, node.stats = TRUE)
я получаю значения разбиений с помощью rf$forest$split.stats[1]
, которые больше 1.
Я ожидал бы значения в пределах от 0 до 1 для rf$forest$split.stats[1]
.
Ответ или решение
В пакете ranger для R, действительно, Gini индекс используется для измерения чистоты узлов в классификационных деревьях. Ваше ожидание, что значение Gini должно находиться в диапазоне от 0 до 1, основано на его определении, где:
$$ Gini = 1 – \sum_{i=1}^C p_i^2 $$
Здесь ( p_i ) — это доля образцов, принадлежащих классу ( i ), а ( C ) — это общее количество классов в узле. Это определение верно, когда мы говорим о чистоте узлов, но важно понимать, как функция ranger обрабатывает статистику сплитов.
При использовании функции ranger()
с параметром node.stats = TRUE
, вы получаете объект, который включает в себя различную статистику для узлов. split.stats представляет собой значения, относящиеся к улучшению извлеченной информации на каждом разбиении, а не просто Gini индекс для узлов.
Когда вы видите значения, превышающие 1, это связано с тем, что статистика сплита рассчитывается как разница между нечистотой узла до разбиения и средней нечистотой узлов, возникающих после разбиения. Поэтому представляемые значения могут иметь шкалу, которая превышает 1, поскольку они могут представлять собой величины, основанные на абсолютном улучшении, а не относительном.
Если вы хотите получить Gini индекс, который лежит в диапазоне от 0 до 1, вам нужно сосредоточиться на значениях, относящихся строго к чистоте узлов (например, используя значения impurity в node.stats
), а не на расчетах, связанных со статистикой сплита.
В заключение, значения в split.stats
могут превышать 1, поскольку это не просто Gini индекс, а измерение улучшения, которое может быть больше 1 в зависимости от разницы в нечистоте узлов до и после сплита.