Sklearn DecisionTreeclassifier возвращает невозможное значение для разделения

1

Я пытаюсь реализовать DecisionTreeClassifier из sklearn с помощью DataFrame (pandas), но при расщеплении моих данных он возвращает некоторые странные значения. Мой набор данных содержит 3 столбца с коэффициентами корреляции Пирсона, которые могут быть только между -1.0 и 1.0. Корневой узел, однако, уже начинает разделение одним из этих столбцов на Pearsons <= 1.0 и показывает два дочерних узла для True и False. Но это невозможно! Все значения <= 1.0. Там не было никакого раскола. Кто-нибудь знает, что здесь происходит?

В моем коде я попробовал как критерий Джини, так и Энтропию, как разделители, так и другие комбинации возможных параметров. Вот более или менее мой код сейчас, но я все еще играю с параметрами:

newtable = table_of_pickle_ptptnew.loc[:,('Pearsons Ratio', 'Pearsons 330nm', 'Pearsons 350nm', 'Ratio Space', '330nm Similarity', '350nm Similarity')]

x = newtable.values
y = table_of_pickle_ptptnew['Binding Known'].values

dtree=DecisionTreeClassifier(max_features='auto',
                             max_depth=3,
                             criterion ='entropy',
                             min_impurity_decrease=0.09
                            )
fittree = dtree.fit(x, y.astype('str'))

dot_data = tree.export_graphviz(fittree, out_file=None,
                               class_names=['No Interaction', 'Interaction'],
                               feature_names=['Pearsons Ratio', 'Pearsons 330nm', 'Pearsons 350nm', 'Ratio Space', '330nm Similarity', '350nm Similarity'],
                               filled=True) 
graph = graphviz.Source(dot_data) 
graph



          Pearsons Ratio    Pearsons 330nm  Pearsons 350nm  Ratio Space     330nm Similarity    350nm Similarity
Elem a     0.94856          0.99999         0.99999        0.000725507      0.157209             0.0572688
Elem b     0.99234          1               0.99999        0.00657003       0.0568281            0.0465139
Elem c     0.98525          0.99999         0.99999        0.0114932        0.0226809            0.133452
Elem d     0.99793          0.99999         0.99999        0.000643209      0.154585             0.0914759
Elem e     0.99849          0.99999         0.99999        0.00128532       0.0932893            0.0464462

Вот как выглядят первые узлы дерева. Итак, я имею в виду, что дочерний узел для False в состоянии корневого узла (Pearson 350nm <= 1.0) невозможно существовать, поскольку все образцы <= 1.0 (True).

Изображение 174551

Теги:
pandas
sklearn-pandas
decision-tree

1 ответ

2
Лучший ответ

Хорошо. Я узнал, в чем проблема. Графическая визуализация дерева имеет предел десятичным числам и округляет их, если они слишком большие. Я использовал алгоритм, чтобы дать мне псевдокод для моего дерева решений автоматически, и в выводе кода появились "истинные значения". В графическом дереве из graphviz 1.0 из корневого узла фактически "0.9999749660491943".

Я думаю, что важно знать это для всех, кто работает с научными цифрами, которые имеют много цифр. :) Если вы работаете с такими цифрами, не забудьте получить код решения с вашего дерева и не ходите только за красивое дерево.

Спасибо всем, кто использовал немного своего времени, чтобы попытаться помочь мне в моей проблеме. :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню