机器学习相关知识整理系列之一:决策树算法原理及剪枝(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”,说明书的意思.顾名思义,这是用来描述你这个 ...
随机推荐
- 正则表达式匹配 href 和text内容
string pattern = @"<a[^>]*href=(""(?<href>[^""]*)""|' ...
- Swing中GridBagLayout布局的使用
1 http://pydoing.blogspot.com/2011/05/java-gridbaglayout.html 台湾人博客,需FQ 2 http://zhangjunhd.blog.51 ...
- C# const和static readonly区别
[转]C# const和static readonly区别 以前只是知道Const和static readonlyd的区别在于const的值是在编译期间确定的,而static readonly是在运行 ...
- Python基础--通用序列操作
Python 继续 Python包含6种内建的序列,各自是:列表.元组.字符串.Unicode字符串.buffer对象和xrange对象.我们将逐步进行介绍. 今天主要介绍一下通用序列操作.放之四海而 ...
- eureka集群高可用配置,亲测成功配置(转)
转自大神的文章:https://blog.csdn.net/tianyaleixiaowu/article/details/78184793 网上讲这个东西的很多,抄来抄去的,大部分类似,多数没讲明白 ...
- oracle查看用户有哪些权限和角色
select * from dba_sys_privs t where t.grantee='HR';select * from dba_role_privs t where t.grantee='H ...
- Y2K Accounting Bug - 2586
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11271 Accepted: 5672 Description Ac ...
- ImportError: No module named '_sqlite3'
问题: Python 3.5.1 报错如下 Traceback (most recent call last): File "manage.py", line 16, in < ...
- Pexpect--example--hive.py解读
python version 2.6.6 ; pexpect 2.3 login方法解读: def login (args, cli_username=None, cli_password=None) ...
- Spring MVC中的模型数据处理
一.综述 Spring MVC 提供了以下途径来输出模型数据: 1.ModelAndView 当处理方法返回值类型为 ModelAndView时, 方法体即可通过该对象添加模型数据到请求域. 2.Ma ...