持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第15天,点击查看活动详情
上一篇简单的了解了决策树,然后也有一个小例子看了决策树的分类流程。下面我们还继续了解CART训练算法,怎么使用熵测量,正则化和最后在回归中举个小例子。
CART算法
上一篇中我们有一个决策树的图片(图1),展示了决策树如何将一个iris数据集分成三类。但是我们在其中节点的选择判断的依据没说,也就是为什么根节点选择了花瓣长度要小于2.45厘米呢?
图1 iris数据集的决策树
这里就是使用一个叫分类和回归树(Classification and Regression Tree,CART)算法。例如我们使用了gini不纯度作为判断依据,那么CART就会找出最纯子集(按其大小加权),找出一对特征K和他的阈值。成本函数如下:
然后CART就会用这个模式一个一个分割节点的左右子集。如果我们设置了最大深度(max_depth),算法就会在最大深度停止。
这里的CART算法也是一个贪心算法:顶层的根处会找到最优分类,以此类推。但是几层之后,他就不会继续找最纯的。因此这个算法下会有不错的解,但不是最优解。因为如果要找一个最优树,则会编程NP完全问题。
简单提一下什么是NP完全(NP-C)问题:
- 首先要先了解P类问题:所有可以在多项式时间内求解的判定问题构成P类问题。
- 什么是多项式时间呢?我们在估算时间复杂度的时候一般是不是会用到O(1),O(N)和O()等类似的叫多项式时间。如果是这样的就不是了。
- NP(Non-deterministic Polynomial)类问题:所有的非确定性多项式时间可解的判定问题构成NP类问题。 这里就不需要规定时间,只要能够求解和验证就行。
- NPC问题,又是NP问题中的特殊一类问题:NP中的某些问题的复杂性与整个类的复杂性相关联。这些问题中任何一个如果存在多项式时间的算法,那么所有NP问题都是多项式时间可解的。 这些问题被称为NP-完全问题(NPC问题)。
也就是我们的决策树,就是无法在有限的多项式时间内找出最优解来。 但是能找出来的解不错了,也可以凑合着用了。
熵
之前我们看到在DecisionTreeClassifier()中有一个超参数criteria,我们修改他的值为entropy之后,就可以选择熵来作为测量方式。
这里解释一下熵怎么测量的:如果数据集中仅包含一个类别的实例,其熵为0。也就是数据类别越不相同,熵越高。公式如下:
如果求深度为2的右边子节点的熵值=
正则化
如果让决策树很随意的去训练数据,他会严密拟合数据,最后很容易产生过拟合。也就是我们需要降低一下自由度,这时候我们就需要给DecisionTreeClassifier()在增加几个超参数了。
min_samples_split分裂前的节点必须有的最小样本数min_samples_leaf叶子节点必须有的最小样本数max_leaf_nodes最大叶节点数量- 等等其他的可以参考官网DecisionTreeClassifier—documentation
OK,我们如果增加min开头的超参数,或者减小max开头的超参数,都会使得样本更加的正则化。以防止过拟合,而泛化的效果不足。
应用回归例子
回归和分类比较类似,我就简单说几点:
-
我们只需要导入DecisionTreeRegressor,基本上超参数和DecisionTreeClassifier差不多。回归产生的树也和图1类似,只不过不是分成了什么类,而是根据特征值和阈值,划分出许多节点,最后返回叶子节点上所有样本的平均值。
-
也要注意不要忘了正则化,如果不加限制,那么最后决策树会根据数据分出大量的叶子来,极端的来讲,可能每一个实例都是一个叶子,那么预测就是根据每个数来一一匹配了,这样就是严重过拟合。