代码之家  ›  专栏  ›  技术社区  ›  Bella

sklearn decisiontreeclassifier返回不可能的分割值

  •  1
  • Bella  · 技术社区  · 6 年前

    我试图用一个dataframe(pandas)实现sklearn中的decisiontreeclassifier,但它在分割数据时返回一些奇怪的值。我的数据集包含3列pearsons相关系数,它们只能介于-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
    

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

    Condition tree piece.

    1 回复  |  直到 6 年前
        1
  •  2
  •   Bella    6 年前

    好啊。我找到了问题所在。 树的graphviz可视化对十进制数有一个限制,如果太大,则对它们进行四舍五入。我使用了一种算法来自动为我的决策树提供伪代码,并且在代码输出中显示“真值”。在graphviz的图形树中,根节点的1.0实际上是“0.99997499660491943”。

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

    感谢每一个花时间帮助我解决问题的人。:)