决策树简单介绍
决策树是一种基于树状结构来做决策的。是一种常见的机器学习方法。主要做分类,也可以做回归。一棵决策树含有一个根结点(样本全集),若干个内部结点和若干个叶结点(最终结论)。
简单的一个例子。比如我们相亲的时候,老母亲甩出来一沓照片来让你做选择。这时候我们会问一些问题来做一下筛选,比如对方的年龄,相貌,工作收入,家庭住址等等等,然后最终确定选择两个或三个人去见。
这一系列问题和层层的筛选判断就是在做决策,这些问题为“子决策”。其中那一沓照片是根结点(样本全集),年龄要小于三十的,家要离得近的等判定是内部结点,最终选出来符合所有要求的人就是叶结点。
看图理解,左边是问题描述,右边是该事件的决策树。其中绿色的为内部节点,橙色的为叶结点。
决策树学习目的是要产生一棵泛化能力强的树,通俗地说就是要学习出来一棵决策树,这个树可以很强的处理陌生的示例
在决策树中,每个内部结点的判定问题都是基于上一层的决策结果。比如长相这个结点在做决策时,是基于年龄小于30的人做出的决策;收入这个结点做决策时是基于长相在中等或者帅气时做出的决策。
决策分类的停止条件有三个,当这三个条件其一出现时,决策分类停止。
1.这个结点中的样本都是同一类别,这时就不用再往下一层进行划分了。
比如:相亲照片中所有人的年龄都小于30,就不用再分了。又或者所有的人长的都帅,那这一层也就不用再划分帅或者丑了。
2.这个结点的属性集为空,或者所有样本在所有属性上取值相同,没办法划分。
比如:相亲照片中,所有人的收入都一样,都是一个月100万。那么这个样本中所有人在收入这个属性上的取值就是相同的,没办法划分高低。
这个时候我们就把当前结点,即【收入】这个结点标记为叶结点,并把其类别设定为所含样本最多的类别。反正收入都一样,没办法划分高低那就都见见面。
3.这个结点包含的样本集为空,不能进行划分。
比如:给了一沓照片,知道都是男的,但是每张照片上的脸都被扣掉了,媒人也不说对方各方面条件。那还见个毛线。决策树就终止在"男"这个结点上,当然假设女主如饥似渴,那么此决策树的叶结点就是“见”。
信息量
信息量是求取信息熵的要点,信息熵是求取信息增益的基础,信息增益是来判断哪个样本集合纯度最高的,信息增益最大的属性被选为划分属性。
决策树学习的关键就是如何选择最优属性划分
那信息量是什么东西?顾名思义,它其实就是一个事件所能提供的信息多少。(信息量用 I I I来表示)
比如有人告诉我,太阳是东升西落的,那么这句话的信息量几乎为0,人人都知道的一个自然规律,说出来价值不大,且这个事件发生概率为1。但是如果有人告诉我说,国足踢进了世界杯。这是个几乎不可能的小概率事件,那么这句话的信息量就很大了。我会关注是哪天,哪场,哪个人
从上面的例子就不难得出一个结论:一个事件的信息量( I I I)与该事件所发生的概率( P P P)呈负相关。这是信息量的第一个特点。
信息量的第二个特点是:若两个互不相关的事件X,Y的发生没有相互影响的关系,那么 I ( X , Y ) = I ( X ) + I ( Y ) I(X,Y)=I(X)+I(Y) I(X,Y)=I(X)+I(Y)。也是概率论的一个知识点。
能够同时满足这两个特点的函数必然是一个单调递减函数。这个函数刚好满足: I = − l o g ( P ( x ) ) I=-log(P(x)) I=−log(P(x))。把负号去掉就是我们熟悉的对数函数,不过不加负号的图像是一个单调递增的正相关函数, 要变成负相关,加个负号就正好满足。
信息熵
信息熵用Ent来表示。信息熵可以理解为平均信息量,就是信息量的期望值。信息是个很抽象的概念,我们平时说信息多,信息少,但是不知道信息到底是有多少,比如我说一句话,这句话中到底有多少信息量。信息熵从另一方面理解也可以说是对信息的一种量化。
信息熵是度量样本集合纯度时最常用的一种指标。关于纯度的概念,可以理解为当前样本集合中的某类别占比最大时最好是不用进行分类时,它就越纯。看个图帮助理解。
这个图是一个根据天气判断要不要去打球的决策树。看看,overcast阴天的时候,也不下雨,没有大太阳,还有点儿小凉风,打球最爽,果断去。其他的就是分晴天的空气湿度啊,雨天的风力如何等等等。这里面的overcast就是这棵决策树中最纯的一个集合。
我们假设一个样本集合D中第 k k k类样本所占比例为 p ( k ) p(k) p(k)(k=1,2,3… ∣ y ∣ \lvert y \rvert ∣y∣),则D的信息熵可定义为:
E n t ( D ) = − ∑ k = 1 ∣ y ∣ ( p k ∗ l o g 2 p k ) Ent(D)=-\sum\limits_{k=1}^{\lvert y \rvert}(p_{k}*log_{2}p_{k}) Ent(D)=−k=1∑∣y∣(pk∗log2pk)
此为信息熵的计算公式,信息熵越小,数据就越纯。
看个信息熵的计算例子:左右两个集合,左边集合中有两类,右边集合就一类,这样看是右边的集合纯度最纯。那来计算一下信息熵,看看是不是数据越纯的信息熵就越小。
根据信息熵计算公式先来计算左边的信息熵:一共两类,叉叉和圈圈各占一半,则他们的概率都一样: p ( k ) = 1 2 p(k)=\dfrac{1}{2} p(k)=21
带入公式中:
E n t ( D ) = − ∑ k = 1 ∣ y ∣ ( p k ∗ l o g 2 p k ) Ent(D)=-\sum\limits_{k=1}^{\lvert y \rvert}(p_{k}*log_{2}p_{k}) Ent(D)=−k=1∑∣y∣(pk∗log2pk)
= − ( 1 2 ∗ l o g 2 1 2 ) − ( 1 2 ∗ l o g 2 1 2 ) =-(\dfrac{1}{2}*log_{2}\dfrac{1}{2})-(\dfrac{1}{2}*log_{2}\dfrac{1}{2}) =−(21∗log22