决策树算法
1. 决策树算法
1.1 背景知识
- 信息量\(I(X)\):指一个样本/事件所蕴含的信息,如果一个事情的概率越大,那么就认为该事件所蕴含的信息越少,确定事件不携带任何信息量
- \(I(X)=-log(p(x))\)
- 信息熵\(H(X)\):用来描述系统信息量的不确定度(均值),熵只依赖于随机变量X的分布,与取值无关
- \(H(X) = -\sum^m_{i=1}p_ilog_2p_i\)
- 高信息熵:表示随机变量取值等概率出现,是均匀分布的
- 条件熵\(H(Y|X)\):变量X的发生下(变量X的每个值都会取),Y的发生带来的熵(不确定度)。
- \(H(Y|X)=\sum_xp(x)H(Y|X=x)\)
- \(=-\sum_xp(x)\sum_yp(y|x)log p(y|x)\)
- \(=-\sum_x\sum_y p(x,y)plog p(y|x)\)
- \(=-\sum_{x,y}p(x,y)logp(y|x)\)
- 联合熵\(H(X,Y)\):度量一个联合分布的随机系统的不确定度,即观察一个多个随机变量的随机系统获得的信息量
- \(H(X,Y)=-\sum_x\sum_yp(x,y)logp(x,y)\)
- \(=-\sum_x\sum_yp(x,y)logp(x)p(y|x)\)
- \(=-\sum_x\sum_yp(x,y)logp(x)-\sum_x\sum_yp(x,y)logp(y|x)\)
- \(=H(x)+H(Y|X)\)
- 对一个两个随机变量的随机系统,可以先观察一个随机变量获取信息量,观察完后,在拥有这个信息量的基础上观察第二个随机变量的信息量
- 如果有n个随机变量处于一个随机系统中,获取其联合熵也是无关观察先后
互信息:一个随机变量中包含的关于另一个随机变量的信息量,或者说是一个随机变量由于已知另一个随机变量而减少的不肯定性
- \(I(X;Y)=H(X)-H(X|Y)\)
- \(=H(Y)-H(Y|X)\)
- \(=H(X,Y)-H(X|Y)-H(Y|X)\)
相对熵(KL散度):如果我们对于同一个随机变量x有两个单独的概率分布P(x)()和 Q(x),我们可以使用KL散度来衡量这两个分布的差异
-
\(D_{KL}(p||q)=\sum_{i=1}^np(x_i)log(\frac{p(x_i)}{q(x_i)})\)
- n为事件的所有可能性
- \(D_{KL}\)的值越小,表示q分布和p分布越接近
- \(p(x_i)\)为真实事件概率分布
- \(q(x_i)\)为理论拟合出来的该事件的概率分布
交叉熵(\(H(p,q)\)):用来衡量在给定的真实分布下,使用非真实分布所指定的策略消除系统的不确定性所需要付出成本的大小
- 越优的策略, 最终的交叉熵越低
- 由相对熵推导:
- \(D_{KL}(p||q)=\sum_{i=1}^np(x_i)log(\frac{p(x_i)}{q(x_i)})\)
- \(=\sum_{i=1}^np(x_i)logp(x_i)-\sum_{i=1}^np(x_i)logq(x_i)\)
- \(=-H(p(x))+[-\sum_{i=1}^np(x_i)logq(x_i)]\)
- 因前一部分不变,故在优化中中关注交叉熵即可
- 交叉熵:\(H(p,q)=-\sum_{i=1}^np(x_i)logq(x_i)\)
1.2 决策树
- 基本思想:是以信息熵为度量构造一颗熵值下降最快的树,到叶子节点处,熵值为0;
- 分类:分类树和回归树,前者用于分类标签值,后者用于预测连续值,常用的算法有ID3、C4.5、CART等
- 过程:给定的训练数据集中,依据特征选择的准则,递归的选择最优划分特征,并根据此特征将训练数据进行分割,使得各子数据集有一个最好的分类的
- 三要素:
- 特征选择
- 决策树生成
- 决策树剪枝
1.2.1 特征选择
本质:使用某特征对数据集划分之后,各数据子集的纯度要比划分前的数据集D的纯度高(不确定性要比划分前数据集D的不确定性低)
- 划分后的纯度为各数据子集的纯度的加和(子集占比*子集的经验熵)
- 度量划分前后的纯度变化 用子集的纯度之和与划分前的数据集D的纯度 进行对比
信息增益(ID3):根据某特征划分使的数据集前后的熵的差值最大
-
\(gain(D,a)=H(D)-\sum_{v=1}^V\frac{|D^v|}{D}H(D^v)\)
- a的可能取值:\(a^1,a^2,\cdots,a^v\)
- \(D^v\)在第v个节点,包含D中在属性a上所有取值\(a^v\)的样本
- 优点:
- 决策树构建速度快,实现简单
- 缺点:
- 计算依赖于特征数目较多的特征,而属性值最多的属性不一定最优
- ID3算法不是递增算法
- ID3算法是单变量决策树,对于特征属性之间的关系不会考虑
- 抗躁性差
- 只适合小规模数据集,需要将数据放到内存中
信息增益比(C4.5):是在信息增益的基础之上乘上一个惩罚参数。特征个数较多时,惩罚参数较小;特征个数较少时,惩罚参数较大
-
\(gain_ratio(D,a)=\frac{gain(D,a)}{IV(a)}\)
- \(IV(a)=-\sum^V_{v=1}\frac{|D^v|}{|D|}log_2\frac{|D^v|}{|D|}\)
- 优点:
- 产生的规则易于理解
- 准确率较高
- 实现简单
- 缺点:
- 对数据集需要进行多次顺序扫描和排序,所以效率较低
- 只适合小规模数据集,需要将数据集放到内存中
基尼指数(CART算法–分类树):表示在样本集合中一个随机选中的样本被分错的概率,越小表示被分错的概率小,集合纯度高
-
\(gini(D)=1-\sum^{|y|}_{k=1}p^2_k\)
- \(p_k\):表示选中的样本属于k类别的概率
-
\(gini(D,a)=\sum^{V}_{v=1}\frac{|D^v|}{|D|}gini(D^v)\)
- 在集合A中,选取使基尼系数最小的属性为最优划分属性
- CART构建是二叉树,可以用于分类,可以用来回归
1.2.1.1 ID3、C4.5、CART分类树算法总结
- ID3、C4.5算法均使用在小规模数据集上使用
- ID3、C4.5都是单变量决策树
- 当属性值取值比较多的时候,最好考虑C4.5算法,ID3得出的效果会比较差
- 决策树分类一般情况只适用小数据量的情况(数据放到内存)
- CART算法是三者中最常用的一种决策树构建算法
- 三种算法的区别仅仅只是对于当前树的评价标准不同,ID3信息增益,C4.5信息增益率,CART基尼系数
- CART构建的一定是二叉树,ID3和C4.5构建的不一定是二叉树
1.2.2 决策树的停止条件
- 当前节点包含的样本属于同一类别
- 当前属性集为空,或者所有的样本在所有属性上的取值相同
- 当前节点样本集合为空
- 当前节点中记录数小于某个阀值,同时迭代次数达到给定值时,停止构建过程
1.2.3 决策树算法效果评估
- 决策树的效果评估与一般的分类算法一样,采用混淆矩阵来计算准确率、召回率、精确率等指标
- 也可以采用叶子节点的纯度总和来评估算法的效果,值越小,效果越好
- 决策树的损失函数(值越小,效果越好)
- \(loss = \sum^{leaf}_{t=1} \frac{|D_t|}{|D|}H(t)\)
1.2.4 决策树的剪枝
- 前置剪枝:在构建决策树的过程中,提前停止,结果决策树一般比较小,时间证明这个策略无法得到比较好的结果
- 后置剪枝:在决策树构建好后,然后再开始剪枝,一般使用两种方法:1)用单一叶子节点代替整个子树,叶节点的分类采用子树中最主要的分类;2)将一个子树完全替代另外一颗子树;
- 后置剪枝的主要问题是计算效率问题,存在一定的浪费情况
- 后剪枝总体思路(交叉验证):1)由完全树\(T_0\)开始,剪枝部分节点得到\(T_1\),在此剪枝得到\(T_2 \dots\)直到仅剩树根的树\(T_k\);2)在验证数据集上对这k+1个树进行评价,选择最优树\(T_a\)(损失函数最小的树)
1.2.4.1 决策树的剪枝过程
- 对于给定的决策树\(T_0\),计算所有内部非也子节点的剪枝系数
- 查找最小剪枝系数的节点,将其子节点进行删除操作,进行剪枝得到决策树\(T_k\);如果存在多个最小剪枝系数节点,选择包含数据项最多的节点进行剪枝操作
- 重复上述操作,直到产生的剪枝决策树\(T_k\)只有1个节点
- 得到决策树\(T_1,T_2,\dots,T_k\)
- 使用验证样本集选择最优子树\(T_a\)
1.2.4.2 决策树剪枝损失函数即剪枝系数
- 原始损失函数
- \(loss = \sum^{leaf}_{t=1} \frac{|D_t|}{|D|}H(t)\)
- 叶节点越多,决策树越复杂,损失越大;修正添加剪枝系数,修改后的损失函数为:
- \(loss_{\alpha}= loss + \alpha* leaf\)
- 考虑根节点为r的子树,剪枝前后的损失函数分别为loss(R)和loss(r),当这两者相等的时候,可以求得剪枝系数
- \(loss_{\alpha}(r)= loss(r) + \alpha\)
- \(loss_{\alpha}(R)= loss(R) + \alpha*R_{leaf}\)
- 剪枝系数:\(\alpha = \frac{loss(r)-loss(R)}{R_{leaf}-1}\)
1.2.5 分类树和回归树的区别
- 分类树采用信息增益、信息增益率、基尼系数来评价树的效果,都是基于概率值进行判断的;而二叉树的叶子节点的预测值一般为叶子节点中概率最大的类别作为当前叶子的预测值
- 在回归树中,叶子节点的预测值一般为叶子节点中所有值的均值来作为当前叶子节点的预测值。所以在回归树中一般采用MSE作为树的评价指标,即方差。
- \(MES = \frac{1}{n} \sum^n_{i=1}(y_i – \overbrace{y_i})^2\)
- 一般情况下,只会使用CART算法构建回归树
1.3 Python实现
待补