【问题标题】:How do I get all Gini indices in my decision tree?如何获取决策树中的所有基尼指数?
【发布时间】:2019-05-10 23:12:05
【问题描述】:

我使用 sklearn 制作了一个决策树,在这里,在 SciKit 学习 DL 包下,即。 sklearn.tree.DecisionTreeClassifier().fit(x,y)

如何在每一步获取所有可能节点的基尼指数? graphviz 只给我基尼指数最低的节点的基尼指数,即用于拆分的节点。

例如,下图(来自graphviz)告诉我 Pclass_lowVMid 右指数的基尼指数为 0.408,但不是 Pclass_lower 或 Sex_male 在该步骤的基尼指数。我只知道 Pclass_lower 和 Sex_male 的基尼指数必须大于 (0.408*0.7 + 0) 但仅此而已。

【问题讨论】:

    标签: python machine-learning scikit-learn decision-tree


    【解决方案1】:

    使用export_graphviz 显示所有节点的杂质,至少在版本0.20.1 中。

    from sklearn.datasets import load_iris
    from sklearn.tree import DecisionTreeClassifier, export_graphviz
    from graphviz import Source
    
    data = load_iris()
    X, y = data.data, data.target
    
    clf = DecisionTreeClassifier(max_depth=2, random_state=42)
    clf.fit(X, y)
    
    graph = Source(export_graphviz(clf, out_file=None, feature_names=data.feature_names))
    graph.format = 'png'
    graph.render('dt', view=True);
    

    所有节点的杂质值也可以在treeimpurity 属性中访问。

    clf.tree_.impurity
    array([0.66666667, 0.        , 0.5       , 0.16803841, 0.04253308])
    

    【讨论】:

      【解决方案2】:

      pclass节点的基尼指数=左节点的基尼指数*(左节点的样本数/左节点的样本数+右节点的样本数)+右节点的基尼指数*(个数左节点的样本数/左节点的样本数 + 右节点的样本数) 所以就在这里

      Gini index of pclass = 0 + .408 *(7/10) = 0.2856
      

      【讨论】:

      • 或许,0.408(?)
      • 对不起,我是在手机上,所以有很多错字。
      • 你是对的。糟糕的是它的 0.408 不是 0.48。我已经纠正了。希望你我理解正确。
      • 哦,我在输入问题时也打错了哈哈。实际上,我知道那个公式并且知道如何手动获取索引。我希望 scikitlearn 可以为我做这件事哈哈。
      猜你喜欢
      • 2016-02-08
      • 2020-01-03
      • 2016-04-10
      • 2017-05-13
      • 2017-03-18
      • 1970-01-01
      • 2020-04-06
      • 2022-11-05
      • 2017-06-27
      相关资源
      最近更新 更多