Sklearn DecisionTreeclassifier 返回不可能的拆分值

Sklearn DecisionTreeclassifier returning impossible value for split

我正在尝试使用 DataFrame (pandas) 从 sklearn 实现 DecisionTreeClassifier,但它 returns 在拆分我的数据时出现了一些奇怪的值。我的数据集包含 3 列 Pearsons 相关系数,只能在 -1.0 和 1.0 之间。然而,根节点在 Pearsons <= 1.0 时已经开始按这些列之一进行拆分,并显示 True 和 False 的两个子节点。但是这是不可能的!!所有值 <= 1.0。不可能在那里进行分裂。有人知道这里发生了什么吗?

在我的代码中,我尝试了 Gini 和 Entropy 标准,分离器和其他可能参数的不同组合。现在或多或少是我的代码,但我仍在使用参数:

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

这是树的第一个节点的样子。所以,我的意思是在根节点(Pearson 350nm <= 1.0)条件下False的子节点不可能存在, 因为所有样本 <= 1.0 (True).

好的。我发现了问题所在。 树的 graphviz 可视化对小数有限制,如果太大则四舍五入。我使用一种算法自动为我的决策树提供伪代码,并且在代码输出中出现了 'true values'。在 graphviz 的图形树中,根节点的 1.0 实际上是“0.9999749660491943”。

我认为对于每个使用具有大量数字的科学数字的人来说,了解这一点很重要。 :) 如果您使用这样的数字,请记住从您的树中获取决策代码,不要只选择漂亮的彩色树。

感谢所有花时间帮助我解决问题的人。 :)