本文主要根据Mitchell的机器学习总结归纳,图片大多来源于此,同时结合网上搜索到的资料和几篇较新的文献,自己写的决策树总结,当中的python算法摘自《集体智慧编程》,算法可在python2.7环境下运行。(本来想自己写的。。可是不懂数据结构的树,写的太不像样了,所以就看完智慧编程自己盲打了一遍,顺便了解了下树这种数据结构)
首先:
# define 结点 节点 //咳咳,本文中的所有'结点'的正确写法都是'节点',懒得改了 =_= 大家应该懂的。。。
决策树是目前应用最广的归纳推理算法之一,属于归纳学习的一种。主要用于分类离散值,不过改进后的算法也能对连续型数值进行分类。决策树对噪声具有很好的鲁棒性,常见的决策树算法形式主要有ID3,C4.5,CART等。
考虑训练数据如下:
其决策树形式如下:
如图:从上到下,把样本从最上的根节点排列到最后的叶子节点,叶子节点的值即代表了样本所属的分类。每个方框节点代表了样本的属性,其下的各个分叉线上的字母即为该属性的各个可能值,不断向下分叉直到分完所有训练数据。
接下里说下决策树用的算法。
一、决策树常见算法
ID3
ID3是最简单的决策树形式。回顾上面的决策树形式,你应该会发现一个疑点,那就是为什么我们选取了outlook作为根节点,而不选用其他的,或者说其实选哪个根节点都没事呢?
这就涉及到一个概念,那就是最优分类属性。算法判断outlook是最优分类属性,他能使得这个决策树长的最简单。
最优分类属性是通过信息增益比率来判断的。介绍前先引入一个概念,叫信息熵。如下:
如公式,S表示训练数据集合,i=1→c是目标概念可能的取值,如上面就是两个no和yes,Pi表示属于目标概念i的训练数据个数占S的比率。
信息熵是从热力学的熵中引申来的,我们知道在热力学中,熵表示的是一种无序状态,即越无序熵越大,有序结构的熵为0。而信息熵表示,一个东西他的不确定性越高,他的熵就越大,当他完全确定时,他的信息熵为0。
举个例子:
(前提:我们假设天气预报给出的预测概率是绝对正确的。)
天气预报说明天100%会下雨,好的那这句话所对应的信息熵就是 -1*log1=0,
天气预报说明天50%的可能会下雨,50%的可能会是晴天,那他的信息熵就是-0.5*log0.5-0.5*log0.5=1,
天气预报说明天25%可能下雨,25%可能晴天,50%可能阴天,那么可以计算其信息熵为1.5
从这个例子可以看出,当事物的不确定性上升的时候,他的信息熵会变大。
然后给出信息增益的定义:
公式中的第二项是S按照属性A进行分类后,整体所具有的信息熵。value(A)表示A中具有的所有属性的值,计算各个属性值下的信息熵Sv在乘上Sv所含的样本数比例,相加得到按A分类后的信息熵。两者相减即为信息增益Gain(S,A)。
在这里还是举个例子:
计算最上面的表格Enjoysport按属性wind划分后的信息增益如下:
然后说下我们为什么要引入信息增益的概念。从信息增益的公式就可以看出,当第二项的值很小的时候,即按照A属性划分后,整体的熵很小时,信息增