Sklearn DecisionTreeclassifier返回拆分的不可能值

时间:2018-06-15 12:06:23

标签: python pandas decision-tree sklearn-pandas

我尝试使用DataFrame(pandas)从sklearn实现DecisionTreeClassifier,但在拆分数据时会返回一些奇怪的值。我的数据集包含3列Pearsons Correlation系数,它们只能在-1.0和1.0之间。但是,根节点已经开始通过Pearsons&lt; = 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 的子节点不可能存在,因为所有样本都是&lt; = 1.0(真)。

Condition tree piece.

1 个答案:

答案 0 :(得分:2)

确定。我发现了什么问题。 树的graphviz可视化对十进制数有限制,如果太大则对它们进行舍入。我使用算法自动为我的决策树提供伪代码,并在代码输出中给出了真正的值&#39;出现了。在来自graphviz的图形树中,来自根节点的1.0实际上是&#39; 0.9999749660491943&#39;。

我认为,对于那些使用具有大量数字的科学数字的人来说,了解这一点非常重要。 :)如果您使用这样的数字,请记住从您的树中获取决策代码并且不要仅仅使用漂亮的彩色树。

感谢大家用他们的时间来帮助解决我的问题。 :)