Как заставить дерево решений разбиваться на разные классы - PullRequest
0 голосов
/ 07 ноября 2019

Я делаю дерево решений и хотел бы заставить алгоритм разбивать результаты на разные классы после одного узла. Проблема в том, что в деревьях, которые я получаю, после оценки условия (если X <чем определенное значение), я получаю два результата одного и того же класса (например, да и да). Я хочу иметь «да» и «нет» в качестве результатов для оценки узла. Вот пример того, что я получаю: </p>

1

Это код, генерирующий дерево и график:

clf = tree.DecisionTreeClassifier(max_depth=2)
clf = clf.fit(users_data, users_target)

dot_data = tree.export_graphviz(clf, out_file=None, 
                     feature_names= feature_names,  
                     class_names= target_names,  
                     filled=True, rounded=True,  
                     special_characters=True) 

graph = graphviz.Source(dot_data)  
graph

Я ожидаю найтиКлассы «ДА» и «НЕТ» после узлов. Теперь я получаю те же классы на последних уровнях после соответствующих условий.

Спасибо!

1 Ответ

1 голос
/ 07 ноября 2019

Таким образом, ваша модель действительно выглядит так, как будто она не предлагает никакого дополнительного различия между узлами первого и второго уровня;поэтому, если вы уверены , что это (своего рода) оптимально для вашего случая, вы можете просто попросить его остановиться там, используя max_depth=1 вместо 2:

clf = tree.DecisionTreeClassifier(max_depth=1)

Keepоднако помните, что в действительности это может быть далеко не оптимальным;взгляните на дерево для набора данных радужной оболочки от scikit-learn docs :

enter image description here

, где вы можете увидеть это,далее вниз по уровням дерева узлы с class=versicolor выходят из того, что выглядит как "чистые" узлы class=virginica (и наоборот).

Итак, прежде чем принять решение заранее обрезать дерево до max_depth=1,Возможно, вы захотите проверить, может ли быть лучше, если оставить его для дальнейшего роста (то есть, не указав аргумент max_depth, оставив его в его значении по умолчанию из None),

Все зависит от , почему именно вы делаете это (т. Е. Ваш бизнес случай): если это исследовательский случай, вы вполне можете остановиться на max_depth=1;если он является прогнозирующим, вы должны рассмотреть, какая конфигурация максимизирует соответствующую метрику (скорее всего здесь, точность).

...