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