快来看看,什么是决策树(二)

201 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第15天,点击查看活动详情

上一篇简单的了解了决策树,然后也有一个小例子看了决策树的分类流程。下面我们还继续了解CART训练算法,怎么使用熵测量,正则化和最后在回归中举个小例子。

CART算法

上一篇中我们有一个决策树的图片(图1),展示了决策树如何将一个iris数据集分成三类。但是我们在其中节点的选择判断的依据没说,也就是为什么根节点选择了花瓣长度要小于2.45厘米呢?

图1 iris数据集的决策树

这里就是使用一个叫分类和回归树(Classification and Regression Tree,CART)算法。例如我们使用了gini不纯度作为判断依据,那么CART就会找出最纯子集(按其大小加权),找出一对特征K和他的阈值tkt_k。成本函数如下:

J(k,tk)=mleftmGleft+mrightmGright{Gleft/Gright左右子集的不纯度mleft/mright左右子集的实例数 J(k,t_{k}) = \frac{m_{left}}{m}G_{left} + \frac{m_{right}}{m}G_{right} \\ \left\{\begin{matrix} G_{left}/G_{right} 左右子集的不纯度 \\ m_{left}/m_{right} 左右子集的实例数 \\ \end{matrix}\right.

然后CART就会用这个模式一个一个分割节点的左右子集。如果我们设置了最大深度(max_depth),算法就会在最大深度停止。

这里的CART算法也是一个贪心算法:顶层的根处会找到最优分类,以此类推。但是几层之后,他就不会继续找最纯的。因此这个算法下会有不错的解,但不是最优解。因为如果要找一个最优树,则会编程NP完全问题。

简单提一下什么是NP完全(NP-C)问题:

  • 首先要先了解P类问题:所有可以在多项式时间内求解的判定问题构成P类问题。
    • 什么是多项式时间呢?我们在估算时间复杂度的时候一般是不是会用到O(1),O(N)和O(N2N^{2})等类似的叫多项式时间。如果是O(2N)O(2^{N})这样的就不是了。
  • NP(Non-deterministic Polynomial)类问题:所有的非确定性多项式时间可解的判定问题构成NP类问题。 这里就不需要规定时间,只要能够求解和验证就行。
  • NPC问题,又是NP问题中的特殊一类问题:NP中的某些问题的复杂性与整个类的复杂性相关联。这些问题中任何一个如果存在多项式时间的算法,那么所有NP问题都是多项式时间可解的。 这些问题被称为NP-完全问题(NPC问题)。

也就是我们的决策树,就是无法在有限的多项式时间内找出最优解来。 但是能找出来的解不错了,也可以凑合着用了。

之前我们看到在DecisionTreeClassifier()中有一个超参数criteria,我们修改他的值为entropy之后,就可以选择熵来作为测量方式。

这里解释一下熵怎么测量的:如果数据集中仅包含一个类别的实例,其熵为0。也就是数据类别越不相同,熵越高。公式如下:

Hi=k=1,Pi,k0nPi,klog2(Pi,k)H_{i} = -\sum_{k=1 ,P_{i,k} \neq 0 }^{n} P_{i,k} log_{2}(P_{i,k})

如果求深度为2的右边子节点的熵值=146log2(146)4546log2(4546)0.151-\frac{1}{46} log_2(\frac{1}{46})- \frac{45}{46}log_2(\frac{45}{46}) \approx 0.151

正则化

如果让决策树很随意的去训练数据,他会严密拟合数据,最后很容易产生过拟合。也就是我们需要降低一下自由度,这时候我们就需要给DecisionTreeClassifier()在增加几个超参数了。

  • min_samples_split 分裂前的节点必须有的最小样本数
  • min_samples_leaf 叶子节点必须有的最小样本数
  • max_leaf_nodes 最大叶节点数量
  • 等等其他的可以参考官网DecisionTreeClassifier—documentation

OK,我们如果增加min开头的超参数,或者减小max开头的超参数,都会使得样本更加的正则化。以防止过拟合,而泛化的效果不足。

应用回归例子

回归和分类比较类似,我就简单说几点:

  • 我们只需要导入DecisionTreeRegressor,基本上超参数和DecisionTreeClassifier差不多。回归产生的树也和图1类似,只不过不是分成了什么类,而是根据特征值和阈值,划分出许多节点,最后返回叶子节点上所有样本的平均值。

  • 也要注意不要忘了正则化,如果不加限制,那么最后决策树会根据数据分出大量的叶子来,极端的来讲,可能每一个实例都是一个叶子,那么预测就是根据每个数来一一匹配了,这样就是严重过拟合。