【问题标题】:sklearn min_impurity_decrease explanationsklearn min_impurity_decrease 解释
【发布时间】:2019-07-15 16:06:21
【问题描述】:

sklearn中min_impurity_decrease的定义是

如果这个分裂导致杂质减少,一个节点将被分裂 大于或等于此值。

使用 Iris 数据集,并设置 min_impurity_decrease = 0.0

How the tree looks when min_impurity_decrease = 0.0

设 min_impurity_decrease = 0.1,我们将得到:

How the tree looks when min_impurity_decrease = 0.1

看看gini指数(杂质)= 0.2041的绿色方块,为什么我们把min_impurity_decrease = 0.1虽然gini指数(杂质)left = 0.0和gini index(杂质)right = 0.375却没有分裂

这是否意味着修剪所有子节点,当修剪时,它们的父节点 节点基尼指数会变得小于 0.1 吗? 因为,如果是这样的话,那我们为什么不剪除大于 0.1 的 gini = 0.487) 的第二级节点?

【问题讨论】:

    标签: python scikit-learn decision-tree


    【解决方案1】:

    Steve,这个回复晚了,但在这里发帖以防其他人遇到这个问题,想了解更多关于最小杂质减少的信息。

    最小杂质减少函数公式见here。 公式定义为:

    N_t / N * (impurity - N_t_R / N_t * right_impurity
                    - N_t_L / N_t * left_impurity)
    

    其中N是样本总数,N_t是当前节点的样本数,N_t_L是左孩子的样本数,N_t_R是右孩子的样本数。

    N、N_t、N_t_R、N_t_L都是指加权和,如果通过了sample_weight。

    因此,在您的示例中:

    N_t = 26
    N = 90
    N_t_R = 4
    N_t_L = 22
    impurity = 0.2041
    right impurity = 0.375
    left impurity = 0
    

    我计算的杂质减少量为 0.04,不符合您指定的阈值 0.1。所以本质上,这个公式考虑了父节点占总树的多少(N_t / N)以及子节点的加权杂质减少。如果最终杂质减少量小于最小杂质减少量参数,则不进行拆分。

    【讨论】:

      猜你喜欢
      • 2021-12-01
      • 2019-12-09
      • 2018-05-02
      • 2019-08-13
      • 2016-04-16
      • 2016-05-10
      • 2019-11-13
      • 2017-05-14
      • 2020-04-06
      相关资源
      最近更新 更多