一.什么是决策树
决策树 听名字就是如何做决策的树。比如生活中我们判断明天是否带雨伞。
明天早上下雨,那么就带雨伞,早上不下雨就待定。
明天中午下雨,那么就带伞,早上中午都不下雨就待定。
明天晚上下雨,那么久带伞,早上中午晚上都不下雨就待定。
我们画出如下的例子:
图一.决策树例子
这就是决策树的过程,现在我们在有几个特征与结果的数据情况下,如何去决定特征的重要性与如何使用决策树去判断结果这就是我们的目的。
二.信息熵
我们首先需要知道熵的概念,熵在化学中表示混乱度,在信息论中也是表示一混乱度。具体的,我们将随机变量X的熵的表达式如下:
如抛一枚硬币为事件T,P(正)=1/2,P(负)=1/2
那么:
那么同理投掷一颗色子事件G的熵为H(G)=log6
又因为
那么我们认为T事件的不确定性比G事件的不确定性低。
类比联合概率,联合熵表达式如下:
继续类比条件概率,条件熵表达式如下:
用H(X)认定为X的不确定性,条件熵H(X|Y)度量了我们在知道Y以后X剩下的不确定性,我们最后定义互信息I(X,Y):
这个度量我们认为是在度量X再知道Y以后不确定的减少程度。
上述一些关系如下图:
图二.熵
三. ID3算法
在决策树的ID3算法中,互信息I(X,Y)被称为信息增益。ID3算法就是用信息增益来判断当前节点应该用什么特征来构建决策树。信息增益大,则越适合用来分类。
我们给定又如下信息集,并且以账号是否真实作为训练目标
设L、F、H和D表示日志密度、好友密度、是否使用真实头像和账号是否真实,下面计算各属性的信息增益:
因此日志密度的信息增益是0.276。用同样方法得到H和F的信息增益分别为0.033和0.553。因为F具有最大的信息增益,所以第一次分裂选择F为分裂属性,分裂后的结果图3表示:
在上图的基础上,再递归使用这个方法计算子节点的分裂属性,最终就可以得到整个决策树。
但是ID3算法中还存在着一些不足之处:
- ID3没有考虑连续特征,比如长度,密度都是连续值
- ID3算法的熵增益随取特征值越多则信息增益大。
四. C4.5算法
C4.5需要解决ID3算法中的2个问题
第一个问题:
1.连续特征离散化
C4.5的思路是将连续的特征离散化。比如m个样本的连续特征A有m个,从小到大排列为a1,a2,...,am,则取相邻两样本值的平均数,一共取得m-1个划分点,其中第i个划分点Ti为:
对于这m-1个点,分别计算以该点作为二元分类点时的信息增益。选择信息增益最大的点作为该连续特征的二元离散分类点。比如取到的增益最大的点为at,取大于at为类别1,小于at为类别2 ,这样就完成了连续特征的离散化。
2.信息增益问题
用信息增益比替代信息增益
信息增益比的定义如下:
因为F具有最大的信息增益比,所以第一次分裂选择F为分裂属性,分裂后的结果图3表示。
再递归使用这个方法计算子节点的分裂属性,最终就可以得到整个决策树。
五.CART算法
无论ID3算法还是C4.5算法,都用了大量的对数运算,对运算量是很大的,所以CART算法使用了基尼系数取替代熵。基尼系数如下定义:
再递归使用这个方法计算子节点的分裂属性,最终就可以得到整个决策树。
六.XGBoost和LightGBM
这两种都是CART决策树的具体应用
使基于多重决策树的开发,这两个算法的具体实现以及py使用介绍todo