Я пытаюсь понять, как полностью понять процесс принятия решений модели классификации дерева решений, построенной с использованием sklearn. Два основных аспекта, на которые я смотрю, - это графическое представление дерева и список важных функций. Что я не понимаю, так это то, как важность функции определяется в контексте дерева. Например, вот мой список функций:
Рейтинг функций: 1. FeatureA (0.300237)
FeatureB (0.166800)
FeatureC (0.092472)
FeatureD (0.075009)
FeatureE (0.068310)
FeatureF (0.067118)
FeatureG (0.066510)
FeatureH (0.043502)
FeatureI (0.040281)
FeatureJ (0.039006)
FeatureK (0.032618)
FeatureL (0.008136)
FeatureM (0,000000)
Однако, когда я смотрю на верхушку дерева, это выглядит так:
На самом деле, некоторые из функций, которые ранжируются как «наиболее важные», появляются не намного дальше вниз по дереву, а верхняя часть дерева - FeatureJ, которая является одной из функций с самым низким рейтингом. Мое наивное предположение состояло бы в том, что наиболее важные элементы будут располагаться в верхней части дерева, чтобы иметь наибольшее влияние. Если это неверно, то что делает функцию «важной»?
Ответы:
Нет необходимости, чтобы чем важнее была функция, тем выше ее узел в дереве решений.
Это просто потому, что разные критерии (например, примеси Джини, энтропийно-информационное усиление, MSE и т. Д.) Могут использоваться в каждом из двух этих случаев (разделение по важности).
Например,
SkLearn
вы можете выбрать разделение узлов в дереве решений в соответствии с критерием энтропийно-информационного усиления (см.criterion
И'entropy'
вSkLearn
), в то время как важность функций определяется значением Gini, которое является средним уменьшением Gini. Примеси для данной переменной во всех деревьев случайного леса (смfeature_importances_
вSkLearn
и здесь ).Если я прав,
SkLearn
то же самое применимо, даже если вы решите разделить узлы в дереве решений в соответствии с критерием загрязненности Джини, в то время как важность функций определяется Важностью Джини, потому что примеси Джини и Важность Джини не идентичны (см. также это и это в Stackoverflow о важности Gini).источник
В scikit-learn важная особенность - это уменьшение примеси в узле. Ключ в том, что он измеряет важность только на уровне узла. Затем все узлы взвешиваются по количеству выборок, достигающих этого узла.
Таким образом, если только несколько выборок окажутся в левом узле после первого разделения, это может не означать, что J является наиболее важной особенностью, поскольку усиление на левом узле может повлиять только на очень небольшое количество выборок. Если вы дополнительно распечатаете количество сэмплов в каждом узле, вы можете получить лучшее представление о том, что происходит.
источник
Тот факт, что узел ниже в дереве, не обязательно означает, что он менее важен. Важность функции в sci-kitlearn рассчитывается по тому, насколько чисто узел разделяет классы (индекс Джини). Даже в вашем обрезанном дереве вы заметите, что A делится три раза по сравнению с J один раз, и показатели энтропии (аналогичная мера чистоты, как у Джини) несколько выше в узлах A, чем у J.
Однако, если бы вы могли выбрать только один узел, вы бы выбрали J, потому что это привело бы к лучшим прогнозам. Но если бы у вас была возможность иметь множество узлов, принимающих несколько разных решений, A было бы лучшим выбором.
источник
Важность переменной измеряется снижением точности модели при удалении переменной. Новое дерево решений, созданное с новой моделью без переменной, может сильно отличаться от исходного дерева. Решение о расщеплении в вашей диаграмме принимается с учетом всех переменных в модели.
Какая переменная для разделения в корне (и других узлах) измеряется примесями. Хорошая чистота (например, все в левой ветви имеет одинаковое целевое значение) не является гарантией хорошей точности. Ваши данные могут быть искажены, ваша правая ветвь имеет больше ответов, чем левая. Следовательно, нехорошо просто правильно классифицировать левую ветвь, мы также должны рассмотреть и правую ветвь. Следовательно, переменная расщепления может быть или не быть важной переменной для общей точности модели.
Важность переменной является лучшей мерой для выбора переменной.
источник