机器学习相关知识整理系列之一:决策树算法原理及剪枝(ID3,C4.5,CART)
决策树是一种基本的分类与回归方法。分类决策树是一种描述对实例进行分类的树形结构,决策树由结点和有向边组成。结点由两种类型,内部结点表示一个特征或属性,叶结点表示一个类。
1. 基础知识
熵
在信息学和概率统计中,熵(entropy)是表示随机变量不确定性的度量。设\(X\)是一个取有限个值得离散随机变量,其概率分布为:\[P(X = x_i) = p_i, i = 1,2,3,...,n\]
则随机变量\(X\)的熵定义为:\[H(X) = - \sum_{i=1}^{n}p_i\log{p_i}\]
通常上式中对数以\(2\),或者\(e\)为底。由定义知,熵依赖于\(X\)的分布,而于\(X\)的取值无关,所以\(X\)的熵记作\(H(p)\),即:
\[H(p) = - \sum_{i=1}^{n}p_i\log{p_i}\]
熵越大,随机变量的不确定性就越大,\(0\leq H(p) \leq \log{n}\)。
1.1 条件熵
设有随机变量\((X,Y)\),其联合概率分布为:
\[P(X=x_i, Y=y_j) = p_{ij}, i = 1,2,...,n; j = 1,2,...,n\]
条件熵表示\(H(Y|X)\)在已知随机变量\(X\)的条件下随机变量\(Y\)的不确定性,定义为:
\[H(Y|X) = \sum_{i=1}^{n}p_i H(Y|X=x_i)\]
这里,\(p_i=P(X=x_i), i = 1,2,...,n\)。当熵和条件熵中的概率由数据估计(极大似然估计)得到时,所对应的熵分别为经验熵和经验条件熵。
1.2 信息增益
信息增益表示得知特征\(A\)的信息而使得类\(Y\)的信息的不确定性减少的程度。特征\(A\)对训练数据集\(D\)的信息增益\(g(D,A)\),定义为集合\(D\)的经验熵与特征\(A\)给定条件下\(D\)的经验条件熵之差,即:
\[g(D,A) = H(D) - H(D|A)\]对于数据集\(D\),信息增益依赖于特征,不同的特征往往具有不同的信息增益,信息增益大的特征往往具有更强的分类能力。
根据信息增益准则的特征选择方法:对训练数据集(或子集)\(D\),计算其每个特征的信息增益,并比较它们的大小,选择信息增益最大的特征。
设训练数据集为\(D\),\(|D|\)表示其样本容量,即样本个数。设有K个类\(C_k,k = 1,2,...,K\),\(|C_k|\)为属于类\(C_k\)的样本个数,\(\sum_{k=1}^{K}|C_k| = |D|\)。设特征\(A\)有\(n\)个不同的取值\({a_1,a_2,...,a_n}\),根据特征\(A\)的取值将\(D\)划分为\(n\)个子集\(D_1,D_2,...,D_n\),\(|D_i|\)为\(D_i\)的样本个数,\(\sum_{i=1}^{n}|D_i| = |D|\)。记子集\(D_i\)中属于类\(C_k\)的样本集合为\(D_{ik}\),即\(D_{ik} = D_i\cap C_k\)。
(1)数据集\(D\)的经验熵\(H(D)\)
\[H(D) = - \sum_{k=1}^{K}{\frac{|C_k|}{|D|} \log\frac{|C_k|}{|D|} }\]
(2)特征\(A\)对数据集\(D\)的经验条件熵\(H(D|A)\)
\[H(D|A) = \sum_{i=1}^{n}\frac{|D_i|}{|D|}H(D_i) = - \sum_{i=1}^{n}\frac{|D_i|}{|D|} \sum_{k=1}^{K}{\frac{|D_{ik}|}{|D_i|} \log _{2} \frac{|D_{ik}|}{|D_i|}} \]
(3)信息增益\(g(D,A) = H(D) - H(D|A)\)
1.3 信息增益比
信息增益作为划分数据集的特征,存在偏向与选择取值较多的特征的问题。信息增益比可以改进改问题。特征\(A\)对训练数据集\(D\)的信息增益比\(g_R(D,A)\)定义为其信息增益\(g(D,A)\)与训练数据集\(D\)关于特征\(A\)的值得熵\(H_A(D)\)之比,即:
\[g_R(D,A) = \frac{g(D,A)}{H_A(D)}\]其中\(H_A(D) = - \sum_{i=1}^{n} \frac{|D_i|}{|D|} \log_2{\frac{|D_i|}{|D|} }\),\(n\)是特征A取值的个数。
1.4 基尼系数
后面补充
2. ID3算法
在决策树各个结点上应用信息增益准则选择特征,递归地构建决策树。
给定训练数据集\(D\),特征集\(S\),阈值\(\epsilon\)
(1)若\(D\)中所有实例属于同一类\(C_k\),则T为单结点树,并将类\(C_k\)作为该结点的类标记,返回T;
(2)若\(S=\varnothing\),则T为单结点树,并将D中实例数最大的类\(C_k\)作为该结点的类标记,返回T;
(3)否则,计算\(S\)中各特征对\(D\)的信息增益,选择信息增益最大的特征\(S_g\);
(4)如果\(S_g\)的信息增益小于阈值\(\epsilon\),则置T为单结点树,并将\(D\)中实例数最大的类\(C_k\)作为该结点的类标记,返回T;
(5)否则,对\(S_g\)的每一个可能值\(a_i\),将\(D\)分割为若干个非空子集\(D_i\),将\(D_i\)中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树T,返回T
(6)对第i个子节点,以\(D_i\)为训练集,以\(S-{S_g}\)为特征集,递归调用步(1)-(5),得到字数\(T_i\),返回\(T_i\)。
3. C4.5算法
C4.5算法与ID3算法相似,C4.5算法对ID3算法进行了改进。C4.5在生成的过程中,用信息增益比来选择特征,过程与上述类似。
4. CART算法
后面再添加
5. 决策树的评价
假定样本的总类别为K个,对于决策树的某叶结点,假定该叶结点含有样本数目为\(n\),其中第\(k\)类的样本数目为\(n_k,k = 1,2,...,K\)。
(1)若该结点中某类样本\(n_j = n\),而\(n_1,...n_{j-1},n_{j+1},...n_{K} = 0\),则该结点的熵\(H_p=0\),最小;
(2)若该结点中各类样本数目\(n_1=n_2=...=n_k=n/K\),则该结点熵\(H_u=\ln K\),最大。
对所有叶结点的熵求和,该值越小说明对样本的分类越精确。各个叶结点包含的样本数目不同,可以使用样本数加权求熵和。因此,评价函数:\[C(T) = \sum_{t \in leaf }N_t \cdot H(t)\]
该评价函数值越小越好,所以,可以称为“损失函数”。
6. 剪枝
决策树对训练属于有很好的分类能力,但是对于未知的测试集未必有好的分类能力,泛化能力弱,即可能发生过拟合现象。为防止过拟合,我们需要进行剪枝。
三种决策树的剪枝过程算法相同,区别是对于当前树的评价标准不同。
剪枝分为预剪枝和后剪枝:
6.1 预剪枝:
(1)每一个结点所包含的最小样本数目,例如10,则该结点总样本数小于10时,则不再分;
(2)指定树的高度或者深度,例如树的最大深度为4;
(3)指定结点的熵小于某个值,不再划分。
6.2 后剪枝:
总体思路:由完全树\(T_0\)开始,剪枝部分结点得到\(T_1\),再次剪枝部分结点得到\(T_2\)...直到剩下树根的树\(T_k\);在验证数据集上对这\(k\)个树分别评价,选择损失函数最小的树\(T_a\)。
设树\(T\)的叶结点个数为\(|T|\),t是树T的叶结点,该叶结点有\(N_i\)个样本点,其中k类的样本点有\(N_{ik}个,k=1,2,...,K\)。 \(H_t(T)\)为叶结点\(t\)上的经验熵,\(\alpha \geq 0\)为参数,则决策树学习的损失函数可定义为:
\[C_{\alpha}(T) = \sum_{t=1}^{|T|}N_t \cdot H(T) + \alpha |T|\]
其中经验熵为\[H_t(T) = \sum_{t=1}^{|T|}{\frac{N_{tk}}{N_t} \log _{2} \frac{N_{tk}}{N_t}}\]
这时有:\[C_{\alpha}(T) = C(T) + \alpha |T|\]
\(C(T)\)表示模型对训练数据集的预测误差,即模型与训练数据集的拟合程度。\(|T|\)表示模型的复杂度,参数\(\alpha \geq 0\)控制两者之间的影响。较大的\(\alpha\)促使选择较简单的模型(树),较小的\(\alpha\)促使选择较复杂的模型(树),当\(\alpha = 0\)时意味着只考虑模型与训练数据的拟合程度,不考虑模型复杂度。
假定当前对以\(r\)为根的子树剪枝,剪枝后,只保留\(r\)本身而删掉所有的子结点。
以\(r\)为根的子树:
- 剪枝后的损失函数:\(C_\alpha(r) = C(r) + \alpha\)
- 剪枝前的损失函数:\(C_\alpha(R) = C(R) + \alpha \cdot |R_{leaf}|\)(\(C(R)\)应该是小于\(C(r)\))
- 令二者相等,求得:\(\alpha = \frac{C(r) - C(R)}{R_{leaf} -1}\),\(\alpha\)称为结点\(r\)的剪枝系数。
对于给定的决策树\(T_0\):
- 计算所有内部结点的剪枝系数;
- 查找最小剪枝系数的结点,剪枝得决策树\(T_k\);
- 重复以上步骤,直到决策树\(T_k\)只有一个结点;
- 得到决策树序列\(T_0,T_1,T_2...T_k\);
- 使用验证样本集选择最优子树。
注:上述如存在错误还望指正。
机器学习相关知识整理系列之一:决策树算法原理及剪枝(ID3,C4.5,CART)的更多相关文章
- 机器学习相关知识整理系列之三:Boosting算法原理,GBDT&XGBoost
1. Boosting算法基本思路 提升方法思路:对于一个复杂的问题,将多个专家的判断进行适当的综合所得出的判断,要比任何一个专家单独判断好.每一步产生一个弱预测模型(如决策树),并加权累加到总模型中 ...
- 机器学习相关知识整理系列之二:Bagging及随机森林
1. Bagging的策略 从样本集中重采样(有放回)选出\(n\)个样本,定义子样本集为\(D\): 基于子样本集\(D\),所有属性上建立分类器,(ID3,C4.5,CART,SVM等): 重复以 ...
- Hadoop相关知识整理系列之一:HBase基本架构及原理
1. HBase框架简单介绍 HBase是一个分布式的.面向列的开源数据库,它不同于一般的关系数据库,是一个适合于非结构化数据存储的数据库.另一个不同的是HBase基于列的而不是基于行的模式.HBas ...
- Redis相关知识整理
Redis相关知识整理 1. Redis和MySQL的区别?a).mysql是关系型数据库,而redis是NOSQL,非关系型数据库.mysql将数据持久化到硬盘,读取数据慢,而redis数据先存储在 ...
- 决策树算法原理--good blog
转载于:http://www.cnblogs.com/pinard/p/6050306.html (楼主总结的很好,就拿来主义了,不顾以后还是多像楼主学习) 决策树算法在机器学习中算是很经典的一个算法 ...
- 决策树算法原理(CART分类树)
决策树算法原理(ID3,C4.5) CART回归树 决策树的剪枝 在决策树算法原理(ID3,C4.5)中,提到C4.5的不足,比如模型是用较为复杂的熵来度量,使用了相对较为复杂的多叉树,只能处理分类不 ...
- 决策树算法原理(ID3,C4.5)
决策树算法原理(CART分类树) CART回归树 决策树的剪枝 决策树可以作为分类算法,也可以作为回归算法,同时特别适合集成学习比如随机森林. 1. 决策树ID3算法的信息论基础 1970年昆兰找 ...
- 就是要你明白机器学习系列--决策树算法之悲观剪枝算法(PEP)
前言 在机器学习经典算法中,决策树算法的重要性想必大家都是知道的.不管是ID3算法还是比如C4.5算法等等,都面临一个问题,就是通过直接生成的完全决策树对于训练样本来说是“过度拟合”的,说白了是太精确 ...
- podSpec文件相关知识整理
上一篇文章整理了我用SVN创建私有库的过程,本文将整理一下有关podSpec文件的相关知识. podSpec中spec的全称是“Specification”,说明书的意思.顾名思义,这是用来描述你这个 ...
随机推荐
- flex-direction用法解释
语法: flex-direction:row | row-reverse | column | column-reverse 默认值:row 适用于:flex容器 继承性:无 动画性:否 计算值:指定 ...
- 使用ALAssetsLibrary读取所有照片
一. ALAssetsLibrary 介绍 ALAssetsLibrary 提供了访问iOS设备下”照片”应用下所有照片和视频的接口: 从 ALAssetsLibrary 中可读取所有的相册数据,即 ...
- float数据在内存中的存储方法
浮点型变量在计算机内存中占用4字节(Byte),即32-bit.遵循IEEE-754格式标准.一个浮点数由2部分组成:底数m 和 指数e. ±mant ...
- leetCode 15. 3Sum (3数之和) 解题思路和方法
3Sum Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find ...
- Linux系统字符集乱码问题
假设你在安装Linux的过程中就选择了中文.可能能够省去步骤1.2.反之.假设你先安装了英文环境,而后希望它支持中文,则能够1.2步 1.首先在linux中安装中文包安装中文简体包rpm -ivh k ...
- 复习mybatis框架(一)----映射文件
参考博主的文章,尊重原创:https://blog.csdn.net/qq_35246620/article/details/54837618 一.给出映射文件 Mapper.xml 的总结: ① 设 ...
- Webpack与Gulp、Grunt区别
Webpack与Gulp.Grunt没有什么可比性,它可以看作模块打包机,通过分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等 ...
- 精准 iOS 内存泄露检测工具
MLeaksFinder:精准 iOS 内存泄露检测工具 发表于 2016-02-22 | zepo | 23 Comments 背景 平常我们都会用 Instrument 的 Lea ...
- 利用socket.io实现消息实时推送
最近在写的项目中存在着社交模块,需要实现这样的一个功能:当发生了用户被点赞.评论.关注等操作时,需要由服务器向用户实时地推送一条消息.最终完成的项目地址为:socket-message-push,这里 ...
- java中的多线程高并发与负载均衡的用途
感觉对于这两问题的描述,大家很迷惑把 .下面我就介绍一下: 一; 什么是java的高并发,在什么情况下产生的? 答:如果网站的访问量非常大的话,我们就应该考虑高并发的情况. 高并发的时候就是有很多用户 ...