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

Я пытаюсь реализовать 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 (Истинно).

Кусок дерева условий.


person Isabella Navarro    schedule 15.06.2018    source источник
comment
Просто для уточнения, коэффициент корреляции Пирсона в целом может принимать значения от -1 до 1, но ваши данные содержат только значения от 0 до 1?   -  person gyoza    schedule 15.06.2018
comment
Нет, извини, мой плохой. Это от -1 до 1, правильно. Поправлю в вопросе.   -  person Isabella Navarro    schedule 15.06.2018
comment
Одна из возможных идей заключается в том, что вы изменили масштаб функций, но, судя по фрагменту кода, это не так. Кстати, на графике также показано, сколько образцов удовлетворяло заданной цепочке условий, действительно ли это число равно 0 для False?   -  person Jan K    schedule 15.06.2018
comment
Нет... Оба дочерних узла для True/False дают образцы, удовлетворяющие условию. Это моя проблема. Если я реализую это в своем реальном коде, это не сработает, потому что я знаю, что никакое значение не может быть выше 1,0. Прямо сейчас он дает мне [7,53] для True и [34,7] для False... :/   -  person Isabella Navarro    schedule 15.06.2018
comment
Не могли бы вы опубликовать от 5 до 10 строк из вашего newtable.   -  person KRKirov    schedule 15.06.2018
comment
Я добавил часть этого в отредактированный вопрос сейчас   -  person Isabella Navarro    schedule 15.06.2018
comment
Это работает нормально. Я думаю, вы неправильно интерпретируете дерево решений. [7, 53] и [34, 7] — это количество положительных и отрицательных выборок в каждом листе, а не критерий разделения. Я могу показать вам, что я получил с вашими данными, если это необходимо.   -  person KRKirov    schedule 15.06.2018
comment
вы не понимаете, я думаю... Параметр корневого узла подобен коэффициенту Пирсона ›= 1,0, а затем есть два дочерних узла, для истинного и ложного... но это условие никогда не может быть истинным... тем не менее, в соответствующем дочернем узле True есть [7, 53] — 7 класса A и 53 класса B.   -  person Isabella Navarro    schedule 16.06.2018


Ответы (1)


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

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

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

person Isabella Navarro    schedule 17.06.2018