上面这种朴素的算法很容易想到,但是太容易得到的它往往不够美好。如果自变量很多的时候,我们该选哪个作为根节点呢?
选定了根节点后,树再往下生长接下来的内部节点该怎么选呢?针对这些问题,衍生了很多决策树算法,他们处理的根本问题是上面流程的第四步——训练算法,实际上也就是划分数据集方法。
我们来看看代表之一——ID3算法。
在划分数据集之前之后信息发生的变化称为信息增益,知道如何计算信息增益,我们就可以计算每个特征值划分数据集获得的信息增益,获得信息增益最高的特征就是最好的选择。
这里又引入了另一个概念——熵。这里先不展开说了,我们记住他的概念:一个事情它的随机性越大就越难预测。
具体来说这个概率p越小,最后熵就越大(也就是信息量越大),如果极端情况一件事情概率为1,它的熵就变成0了。
比如,你如果能预测一个彩票的中奖号码就发达了。但是,如果你能预测明天太阳从东边升起来则毫无价值。这样衡量一个信息价值的事,就可以由熵来表示。
聪明的你或许已经发现了,决策树算法其实就是为了找到能够迅速使熵变小,直至熵为0的那条路径,这就是信息增益的那条路。我们将对每个特征划分数据集的结果计算一次信息熵,然后判断按照哪个特征划分数据集是最好的划分方式。
举个容易理解的例子:
解决问题:预设4个自变量:天气、温度、湿度、风速,预测学校会不会举办运动会?
步骤一:假设我们记录了某个学校14届校运会按时举行或取消的记录,举行或者取消的概率分别为:9/14、5/14,那么它的信息熵,这里也叫先验熵,为:
步骤二:我们同时记录了当天的天气情况,发现天气好坏和校运会举行还是取消有关。14天中,5次晴天(2次举行、3次取消)、5次雨天(3次举行、2次取消)、4次阴天(4次举行)。相对应的晴天、阴天、雨天的后验熵。
步骤三:我们计算知道天气情况后的条件熵。
步骤四:我们计算在有没有天气情况这个条件前后的信息增益就是。
步骤五:我们依次计算在有没有温度、湿度、风速条件前后的信息增益。
步骤六:根据设置的阈值,若信息增益的值大于设置的阈值,选取为我们的特征值,也就是我们上图中的矩形节点。
步骤七:生成决策树。选取信息增益最大的自变量作为根节点。其他的特征值依次选取为内部节点。
比如上面的例子是这样的过程: