首先决策树是一棵树,那么我们只要知道了一个结点如何分成数个子节点,就可以使用递归的方法将整棵树构造完成;有了一棵树,通过一些外围算法,就可以构造整个随机森林。问题的关键就是如何将一个节点分成数个子节点,举一个形象的例子。
这个图中有一些绿点和红点,如果我们像图中一样竖着切一刀,左边的红绿比可能是9:1,右边是1:9.如果我们横着切一刀,那上边的红绿比可能是6:4,下边的可能是4:6.也就是说,一个结点分成数个节点的过程中,有好几种分法,我们如何确定竖着切就比横着切好呢,香农提出了信息熵的概念。
信息熵
通常,一个信源发送出什么符号是不确定的,衡量它可以根据其出现的概率来度量。概率大,出现机会多,不确定性小;反之不确定性就大。
不确定性函数f是概率P的减函数;两个独立符号所产生的不确定性应等于各自不确定性之和,即f(P1,P2)=f(P1)+f(P2),这称为可加性。同时满足这两个条件的函数f是对数函数,即
在信源中,考虑的不是某一单个符号发生的不确定性,而是要考虑这个信源所有可能发生情况的平均不确定性。若信源符号有n种取值:U1…Ui…Un,对应概率为:P1…Pi…Pn,且各种符号的出现彼此独立。这时,信源的平均不确定性应当为单个符号不确定性-logPi的统计平均值(E),可称为信息熵,即
,式中对数一般取2为底,单位为比特。但是,也可以取其它对数底,采用其它相应的单位,它们间可用换底公式换算。
一个系统越是混乱,信息熵就越高
条件熵
条件熵,是指在给定某个数(某个变量为某个值)的情况下,另一个变量的熵是多少,变量的不确定性是多少?
因为条件熵中X也是一个变量,意思是在一个变量X的条件下(变量X的每个值都会取),另一个变量Y熵对X的期望。
举例可以看一下这里:https://zhuanlan.zhihu.com/p/26551798
H(Y|X) = H(X,Y) - H(X)
推导公式
由上式再进行推导
所以条件熵可以看成是对于H(Y|X=x)求p(x)的期望,可以从以上这两种角度思考条件熵的概念。
理解了信息熵的概念,我们回过头来到决策树上。当我们从一个节点做出选择时,要选的是熵下降最快的那个结点,也就是说,决策树是一个贪心算法,每次都选熵下降最快的那个划分方法。
举个例子也就是说,假设我们去球场打球, 我们需要考虑很多因素,比如天是否下雨、球场是否有人等等,首先选的特征肯定是熵下降最快的特征作为测试,然后再用其他特征测试形成决策树。
接下来我们可以给决策树下一个结论
决策树是一种树形结构,其中每个内部节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶节点代表一种类别,
决策树学习是以实例为基础的归纳学习。
决策树学习采用的是自顶向下的递归方法,基本思想是以信息熵为度量构造一棵熵值下降最快的树,到叶子节点熵值为0,此时每个叶子结点中的实例都属于同一类。
决策树属于无监督自学习的算法。
下面介绍决策树的算法
互信息
互信息(Mutual Information)是信息论里一种有用的信息度量,它可以看成是一个随机变量中包含的关于另一个随机变量的信息量,或者说是一个随机变量由于已知另一个随机变量而减少的不肯定性。
设两个随机变量的联合分布为,边缘分布分别为 ,互信息是联合分布 与边缘分布的相对熵, [2] 即
根据熵的连锁规则,有
因此,互信息就等于
信息增益
经验熵与经验条件熵:当熵和条件熵中的概率由数据估计(特别是极大似然估计)得到时,所对应的熵和条件熵称为经验熵与经验条件熵。
信息增益表示得知特征A的信息而使得类X的信息的不确定性减少的程度。
定义:特征A对训练数据集D的信息增益g(D,A).定义为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差,即
显然,这就是训练集D和特征A的互信息。
下面再介绍一些基本的记号
设训练集数据集为D,|D|为样本个数
设训练集有K个类别Ck,k=1,2、、、K,|Ck|为属于类别Ck的样本个数,有
设特征A有n个不同的取值{a1,a2,a3...an},根据特征A的取值将D划分为n个子集D1,D2,...Dn,|Di|为Di的样本个数,有
设子集Di中属于类别Ck的样本集合为Dik,|Dik|为Dik的样本个数。
那么经验熵就可以用以下公式表示
经验条件熵则可以由以下推导
由以上我们知道,经验熵和经验条件熵可以由给出的数据算出
那么在选择特征时,我们就可以遍历所有特征,计算特征A对数据集的经验条件熵,计算特征A的信息增益,选择信息增益最大的特征为当前特征的分裂特征。这就是ID3的算法思想。
信息增益率
当我们使用信息增益率而不是信息增益作为度量的时候,就是算法C4.5
Gini系数
基尼系数在决策树中可以理解为类似熵的一个度量。
详细的基尼系数与熵的理解可以看这个https://blog.csdn.net/yeziand01/article/details/80731078
使用基尼系数作为度量的算法是CART算法
决策树的评价
对所有叶节点的熵求和,该值越小说明对样本的分类越精确,由于各叶节点包含的样本数目不同,可使用样本数加权求熵和
由于该评价函数越小越好,所以可称之为损失函数。
剪枝
为了防止过拟合,一般需要剪枝。
后剪枝的基本思路:由完全树T0开始,剪枝一部分得到T1,再剪枝部分节点得到T2...直到仅剩下树根的Tk;在验证数据集上对这k个树分别评价,选择损失函数最小的树Ta。
我们考虑,叶节点越多,决策树就越复杂,那么损失越大,越容易过拟合,我们将损失函数修正以下:
T是叶子节点的个数,α是一个修正参数,取值范围在0到正无穷。
我们考虑以r结点为根的子树,对这棵子树剪枝,剪枝后只剩下r结点,同时我们假设未剪枝的时候用R表示。
令二者相等,求得
α称为结点r的剪枝系数。
根据前面的后剪枝思路,可以计算所有内部节点的剪枝系数,每次选取最小的α剪枝,直到最后剩下根节点。然后使用评价函数验证得到最优的决策树。
有后剪枝肯定也有预剪枝,预剪枝就是在生成决策树的时候,给定一些判定条件,比如树的深度啥的决定剪枝,比较简单。
随机森林
bagging
从样本中重采样(有放回的)选出n个样本
在所有属性上,对着n个样本建立分类器(ID3、C4.5、CART、SVM等)
重复以上两步m次,获得m个分类器。
将数据放在这m个分类器上,最后根据这m个分类器的投票结果,决定数据属于哪一类。
随机森林是在bagging基础上做了修改
从样本集中用Bootstrap(自举采样)采样出n个样本;
从所有属性中随机选择K个属性,选择最佳分割属性作为结点建立CRAT决策树
重读以上步骤m次,建立m课CRAT决策树
这m棵CRAT形成随机森林,通过投票表决,决定数据属于哪一类。