Интерпретация дерева решений в контексте важности функций

9

Я пытаюсь понять, как полностью понять процесс принятия решений модели классификации дерева решений, построенной с использованием sklearn. Два основных аспекта, на которые я смотрю, - это графическое представление дерева и список важных функций. Что я не понимаю, так это то, как важность функции определяется в контексте дерева. Например, вот мой список функций:

Рейтинг функций: 1. FeatureA (0.300237)

  1. FeatureB (0.166800)

  2. FeatureC (0.092472)

  3. FeatureD (0.075009)

  4. FeatureE (0.068310)

  5. FeatureF (0.067118)

  6. FeatureG (0.066510)

  7. FeatureH (0.043502)

  8. FeatureI (0.040281)

  9. FeatureJ (0.039006)

  10. FeatureK (0.032618)

  11. FeatureL (0.008136)

  12. FeatureM (0,000000)

Однако, когда я смотрю на верхушку дерева, это выглядит так:Фрагмент дерева

На самом деле, некоторые из функций, которые ранжируются как «наиболее важные», появляются не намного дальше вниз по дереву, а верхняя часть дерева - FeatureJ, которая является одной из функций с самым низким рейтингом. Мое наивное предположение состояло бы в том, что наиболее важные элементы будут располагаться в верхней части дерева, чтобы иметь наибольшее влияние. Если это неверно, то что делает функцию «важной»?

Тим Линдси
источник
1
сколько сэмплов назначено слева и справа от первого узла?
oW_

Ответы:

4

Нет необходимости, чтобы чем важнее была функция, тем выше ее узел в дереве решений.

Это просто потому, что разные критерии (например, примеси Джини, энтропийно-информационное усиление, MSE и т. Д.) Могут использоваться в каждом из двух этих случаев (разделение по важности).

Например, SkLearnвы можете выбрать разделение узлов в дереве решений в соответствии с критерием энтропийно-информационного усиления (см. criterionИ 'entropy'в SkLearn), в то время как важность функций определяется значением Gini, которое является средним уменьшением Gini. Примеси для данной переменной во всех деревьев случайного леса (см feature_importances_в SkLearnи здесь ).

Если я прав, SkLearnто же самое применимо, даже если вы решите разделить узлы в дереве решений в соответствии с критерием загрязненности Джини, в то время как важность функций определяется Важностью Джини, потому что примеси Джини и Важность Джини не идентичны (см. также это и это в Stackoverflow о важности Gini).

отверженный
источник
Уже @oW_ дал довольно правильный ответ на первоначальный вопрос, но я подумал, что было бы хорошо написать его более кратким и ясным способом для читателя.
Изгой
3

В scikit-learn важная особенность - это уменьшение примеси в узле. Ключ в том, что он измеряет важность только на уровне узла. Затем все узлы взвешиваются по количеству выборок, достигающих этого узла.

Таким образом, если только несколько выборок окажутся в левом узле после первого разделения, это может не означать, что J является наиболее важной особенностью, поскольку усиление на левом узле может повлиять только на очень небольшое количество выборок. Если вы дополнительно распечатаете количество сэмплов в каждом узле, вы можете получить лучшее представление о том, что происходит.

oW_
источник
2

Тот факт, что узел ниже в дереве, не обязательно означает, что он менее важен. Важность функции в sci-kitlearn рассчитывается по тому, насколько чисто узел разделяет классы (индекс Джини). Даже в вашем обрезанном дереве вы заметите, что A делится три раза по сравнению с J один раз, и показатели энтропии (аналогичная мера чистоты, как у Джини) несколько выше в узлах A, чем у J.

Однако, если бы вы могли выбрать только один узел, вы бы выбрали J, потому что это привело бы к лучшим прогнозам. Но если бы у вас была возможность иметь множество узлов, принимающих несколько разных решений, A было бы лучшим выбором.

J_Heads
источник
Таким образом, с точки зрения непрофессионала, предполагая, что существует только 2 возможные классификации (назовем их 0 и 1), функция в основе дерева будет той, которая лучше всего разбивает выборки на 2 группы (то есть лучшая работа разделения 1 на одну сторону дерева и 0 на другую). Это точно? Я до сих пор не до
Тим Линдси
-2

Важность переменной измеряется снижением точности модели при удалении переменной. Новое дерево решений, созданное с новой моделью без переменной, может сильно отличаться от исходного дерева. Решение о расщеплении в вашей диаграмме принимается с учетом всех переменных в модели.

Какая переменная для разделения в корне (и других узлах) измеряется примесями. Хорошая чистота (например, все в левой ветви имеет одинаковое целевое значение) не является гарантией хорошей точности. Ваши данные могут быть искажены, ваша правая ветвь имеет больше ответов, чем левая. Следовательно, нехорошо просто правильно классифицировать левую ветвь, мы также должны рассмотреть и правую ветвь. Следовательно, переменная расщепления может быть или не быть важной переменной для общей точности модели.

Важность переменной является лучшей мерой для выбора переменной.

Привет мир
источник
2
Я не думаю, что так это реализовано в scikit-learn. Там важность характеристики измеряется как «важность Джини», то есть общее уменьшение примеси в узле, взвешенное по пропорции выборок, достигающих этого узла.
oW_
«Важность функции вычисляется как (нормализованное) общее уменьшение критерия, введенного этой функцией. Она также известна как важность Джини». - scikit-learn.org/stable/modules/generated/...
Afflatus