Алгоритм работы дерева решений является одним из наиболее эффективных и легко интерпретируемых среди инструментов машинного обучения. В этой статье разберем способы получения его ключевых метрик, для лучшего понимания и повышения его результативности.
Ранее мы рассмотрели способ классификации с использованием дерева решений, заключающийся в серии разбиений данных на два поднабора по некоторому признаку (k) и порогу (tk), чтобы члены в группах были максимально "похожими".
Математической интерпретацией этого выступает максимизация прироста информации на каждом шаге:
В качестве меры загрязненности узла для задачи классификации использовалась энтропия:
Теперь посмотрим, какие существуют в библиотеках Python инструменты для упрощения понимания дерева решений и извлечения его ключевых метрик.
Сначала напишем простой сценарий, обучающий дерево классифицировать, есть или нет у пациента заболевание сердца (переменная num), основываясь на двух признаках: пол (sex) и наличие/отсутсвие стенокардии (exang) из игрушечного набора (сохранен локально как desease.csv):
Визуализация
Для визуализации дерева можно воспользоваться функцией plot_tree из модуля sklearn.tree:
Загрязненность
Энтропию каждого узла можно получить через свойство tree_.impurity классификатора с указанием в квадратных скобках номера узла. Вот как это сделать для корня дерева:
Дочерние узлы
Энтропии узлов следующего уровня можно получить после извлечения их номеров с помощью свойств классификатора tree_.children_left tree_.children_right с указанием в квадратных скобках индекса родителя:
Количество наблюдений в узле и прирост информации
Теперь посчитаем прирост информации IG после первого разбиения. Предварительно нам понадобится узнать количество наблюдений в корне и двух последующих узлах с помощью свойства классификатора tree_.n_node_samples с указанием в квадратных скобках номера узла:
Таким образом, IG в соответствии с приведенной выше формулой получилась равной 0.119.