持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情
决策树类似我们生活中的做决定过程。一个决策两个分支。或者用我们程序设计的想法来考虑,它相当于是条件分支。 类似如下的效果 if xx: class a else: class b
但我们在使用分支语句时,常常会尽可能的将分支限制到一级,形成多分支。决策树则不是这样。它类似于分支内再嵌套分支。所以决策树也是一颗二叉树,不过这不重要。
要利用这样的分支来实现判定其实很简单(bushi,只要把分支按照给定的数据集写死就完成了,这就是过拟合了。为此科学家们提出了很多种方法来构造更好的决策树。
如果确实简单按照特征一个个划分分支,且不说复杂度。有一个比较大的问题就是,这个特征不一定适合划分分支。
一个朴素的观点是尽量使用区别大一些的特征划分。
以经典的ID3为例,它使用条件熵来计算划分的最优属性。更准确来说,他需要的是信息增益最大的属性。而大的信息增益等价于小的条件熵。
具体来说分为两个部分计算。 一是计算特征内部不同的类别(目标分类)的信息熵。
其中p 指的是某类别(目标分类)的概率。
二是计算条件熵。
其实就是求前面信息熵的加权和。权为这个特征上的特征类别的概率。
最终在每一层按照这个方式无放回的抽取特征,得到决策树。
值得注意的是没划分一层,样本数量会变少。也意味着即使没有成为被选择的特征,在下一层时还要继续运算。
类似的其他的选择指标时信息增益率和基尼指数。分别用于C4.5和CART。
它们为决策树提供了处理连续属性和回归预测的能力。
但是仍然有较大的过拟合风险。
可以采取一种的方式是剪枝,又分为两种:预剪枝和后剪枝。 另一种更好的方法是使用随机森林,其中的原理是所谓的集成学习。