决策树之基 —— ID3 算法
决策树用来预测的是一个固定的对象,从根到叶节点的一条特定路线就是一个分类规则,决定这一个分类算法和结果。
决策树的生成算法是从根部开始,输入一系列带有标签分类的示例(向量),从而构造出一系列的决策节点。其节点又称为逻辑判断,表示该属性的某个分支(属性),供下一步继续判断,一般有几个分支就有几条有向的线作为类别标记。
决策树的理论基础——信息熵
信息熵指的是对事件中不确定的信息的度量。在一个事件或者属性中,信息熵越大,其含有的不确定信息越大,对数据分析的计算就越有益。因此总是选择当前事件中拥有最高信息熵的那个属性作为待测属性。
信息熵的计算
在一个事件中,计算各个属性的不同信息熵,需要考虑和掌握的是所有属性可能发生的平均不确定性。如果其中有种属性,其对应的概率为,且各属性之间出现时彼此相互独立无相关性,此时可以将信息熵定义为单个属性的对数平均值,即:
为了更好地解释信息熵的含义,这里举一个比较形象的例子。
大飞哥喜欢出去玩,大多数情况下他会选择天气好的条件下出去,但是有时候也会选择天气差的时候出去,而天气的标准又有如下4个属性:
- 温度(temperature)
- 起风(wind)
- 下雨(rain)
- 湿度(humidity)
为了简便起见,这里每个属性只设置两个值,0和1:温度高用1表示,低用0表示;起风是用1表示,没风用0;下雨用1表示,不下雨用0;湿度高用1表示,低用0。下表给出一个具体天气属性以及出行记录:
温度(temperature) | 起风(wind) | 下雨(rain) | 湿度(humidity) | 出去玩(out) |
---|---|---|---|---|
1 | 0 | 0 | 1 | 1 |
0 | 0 | 1 | 1 | 1 |
0 | 1 | 0 | 0 | 0 |
1 | 1 | 0 | 0 | 1 |
1 | 0 | 0 | 0 | 1 |
1 | 1 | 0 | 0 | 1 |
本例子需要计算各个属性的熵,这里以是否出去玩的熵计算为例演示计算过程。
根据公式首先计算出去玩的概率和不出去玩的概率:
即出去玩(out)的信息熵为0.918。与此类似,可以计算不同属性的信息熵,即:
E(t) = 0.809;
E(w) = 0.459;
E(r) = 0.602;
E(h) = 0.874
决策树的算法基础——ID3算法
ID3算法是一种贪心算法,用来构造决策树。ID3算法起源于概念学习系统(CLS),以信息熵的下降速度为选取测试属性的标准,即在每个节点选取还尚未被用来划分的具有最高信息增益的属性作为划分标准,然后继续这个过程,直到生成的决策树能完美分类训练样例。
一次可以说,ID3 算法的核心就是信息增益的计算。
信息增益指的是一个事件中前后发生的不同信息之间的差值。换句话说,在决策树的生成过程中,属性选择划分前和划分后不同的信息熵差值。用公式可以表示为:
前文表中构建的最终决策是要求确定小明是否出去玩,因此可以将出去玩的信息熵作为最后的数值,而每个不同的属性被其相减,从而获得对应的信息增益,其结果如下:
Gain(o,t) = 0.918 - 0.809 = 0.109;
Gain(o,w) = 0.918 - 0.459 = 0.459;
Gain(o,r) = 0.918 - 0.602 = 0.316;
Gain(o,h) = 0.918 - 0.874 = 0.044;
通过计算可得,其中信息增益最大的是“起风”,其首先被选中作为决策树的根节点,之后对每个属性,继续引入分支节点,从而得到一个新的决策树,其中,决策树左边节点是属性中 wind 为1的所有其他属性,而 wind 属性为 0 的被分成另外一个节点。之后继续仿照计算信息增益的方法依次对左右的节点进行递归计算,最终结果如下图所示:
从中可以看到,根据信息增益的计算,可以很容易地构建一个将信息熵降低的决策树,从而使得不确定性达到最小。
通过上述分析可以看到,对于决策树来说,其模型的训练是固定的,因此生成的决策树也是一定的;而其中不同的地方在于训练的数据集的不同,这点是需要注意的。