决策树是一个树形结构,类似下面这样:
上图除了根节点外,有三个叶子节点和一个非叶子节点。
在解决分类问题的决策树中,叶子节点就表示所有的分类,比如这里的分类就有3种:无聊时阅读的邮件、需及时处理的邮件、无需阅读的邮件。
使用决策树来分类某个样本数据,就是利用根节点选取的特征,将当前输入样本划分到根节点下的某个子节点上,然后再利用子节点表示的特征来将当前样本划分到该子节点下的某个子节点上,以此继续,直到到达某个叶子节点,那么这个叶子节点表示的类别就是当前决策树对该样本数据所属的类别的预测。
对于上图,因为各个节点表示的特征和各个叶子节点表示的分类都已经给出了,所以给定一个数据很容易就能预测出对应的类别,但是在实际的分类场景中,我们手上有了标注好的训练样本数据后,要如何来构建一颗能够预测新样本类别的决策树呢?换句话说就是,我们如何知道这颗决策树的各个节点选取什么特征来划分数据才最合适呢?ok,你可能听过一些算法的名字,比如ID3、C4.5、CART等,它们其实就是用来解决这个问题的。
这里我们将介绍ID3算法。
我们选取划分数据集的特征的时候,需要考虑的标准是什么特征可以更好的将数据集分开,比如判断是男人还是女人,那么【是否穿高跟鞋】要比【是否带耳钉】更容易将人群划分开,或者说更能划分出纯度高的数据子集。
然而,其实很多时候我们都无法轻易的看出哪种特征能划分出更纯的数据子集,所以就需要一种方法能够帮助我们量化每种特征划分出的数据子集的信息纯度,以便筛选出更纯的划分方式。而其中一种方法就是使用信息论,信息论是量化处理信息的分支科学,可以用来度量信息,比如度量我们刚才说的数据子集的纯度。
所以阅读下面的内容之前,建议先了解一下信息论中的相关知识,包括信息量、信息熵,可以参考这篇文章:《信息熵为什么要定义成-Σp * log(p)》。
ID3决策树使用信息熵度量数据子集的纯度,信息熵越大,数据越混乱,纯度越低。
从ID3决策树的第一层开始,如果每一层的信息熵都是按照最大化的方式递减的,才能最快划分出纯度较高的数据子集(就像我们人工做分类,一定是从最显著的特征开始划分物品,才是最大程度利用了显著特征的优势,所以以这种方式做分类最快),然后根据叶子节点划分出的数据子集中的最多出现的类别来确认对应叶子节点的所属分类,从而得到一颗完整的分类决策树。
那么如何保证每一层的信息熵以最大化的方式递减呢?这就要说到信息增益了。
在划分数据集之前之后信息发生的变化称为信息增益, 所以计算出每个特征划分数据集获得的信息增益,然后获得信息增益最高的特征就是最好的选择。
信息增益的计算方式如下:
按某个特征划分当前节点数据集将得到的信息增益 =
?当前节点数据集的信息熵? ? -? ? 按该特征划分出来的各个数据子集的信息熵总和?
ok,对ID3决策树总结一下:
遍历每个特征,找出使得信息增益最大的特征,做为当前节点下数据子集的划分特征,直到所有属性遍历完毕,或者某个数据子集的所有数据都已经具有相同的分类,此时ID3决策树构建完成,可以用来预测新样本的类别了。
然而,ID3还是有缺陷的,比如会偏向选择特征值比较多的特征来划分数据子集,然而如果训练数据中符合这个特征值的数据只出现过很少,甚至是一次,那么将导致构建出的决策树对这个特征的偏见。另外,ID3无法处理含有连续型数值的特征以及处理回归问题,这类场景下,决策树需要另一种算法——CART,下一篇文章会具体介绍。
ok,本篇就这么多内容啦~,感谢阅读O(∩_∩)O。
原文地址:https://www.cnblogs.com/anai/p/12160785.html