决策树

决策树是一种基本的分类和回归方法.决策树顾名思义,模型可以表示为树型结构,可以认为是if-then的集合,也可以认为是定义在特征空间与类空间上的条件概率分布.

[图片上传失败...(image-2e6565-1543139272117)]

决策树的中间节点可以看做是对一种特征的判断,也是符合上一次判断特征某种取值的数据集,根节点代表所有数据集;叶子节点看做是判断所属的类别.

决策树学习通常包括3个步骤: 特征选择. 决策树生成和决策树剪枝.

目前常用的决策树算法有ID3, C4.5 和CART.

特征选择

在数据集中的所有特征列表中,选择分类效果最好的特征,或者说让分类效果尽可能的"纯",通俗的说就是让划分的每个结果的尽可能属于同一个类别,都是自己人. 那么, 分类效果最好,或者说纯度,怎么定义? 用什么衡量特征的分类效果呢? 不同的决策树算法采用不同的衡量指标.比如说,ID3采用信息增益,C4.5采用信息增益比率,CART分类回归树当用于分类时,采用Gini指数,用于回归问题时采用均方差差[计算划分之前的均方差,划分之后的均方差,再做差运算]. 无论是哪种指标,本质上,都是比较用特征划分前后两种状态之间的差异变化,变化越明显越好,而各种指标是对这种差异变化的量化. 但是不同的指标会有不同的倾向性,这种倾向性从指标计算公式上可以发现,而倾向性又会引出不同的问题,进而产生不同的优化方法.

另一方面,最佳的特征的选择,总是需要对所有特征进行一次遍历,分别计算每种特征的划分效果,比较求最优特征的最佳特征划分值.

信息增益

计算信息增益之前,需要先引出信息熵的概念.熵是信息论中的一个非常重要的概念,信息熵的计算,对于一个数据集D,其中N中类别的第k类样本所占比例为pk,则数据集D的信息熵:

\(Ent(D)= -\sum_{k=1}^{N}p_k log_2 p_k\)

从信息熵的计算公式可以知道,Ent(D)的取值范围在[0, \(log_2n\)], 最小,或者说节点最纯时[都是同一个类别],为0;最大,最混乱时[每种类别比例都相等],为\(log_2n\).

知道了信息熵的计算公式,那么划分前,计算数据集的信息熵, 依据特征f的n种取值划分后的n个节点,分别计算信息熵,然后依据各个节点数据集的比率,加权平均,计算划分后的总的信息熵,前后两次做差,得到这次划分的信息增益,用来衡量特征f的划分效果如何.

信息增益:

信息增益表示得知特征f的信息而使得类Y的信息的不确定性较少的程度.

\(Gain(D,f) = Ent(D) - \sum_{i=1}^{n} \frac{|D_i|}{|D|}Ent(D_i)\)

信息增益越大,特征划分效果越好. 信息增益指标,趋向于选择取值数目多的特征.[个人观点:特征取值越多,划分到每个子节点的数据越少,一定程度上,纯度越高,混乱程度越低,熵取值越小,进而,信息增益越大.比如说,ID特征,因为ID是唯一的,所有划分到每个ID取值节点上也就一个数据点,纯度100%,熵为0.]

信息增益比率

\(GainRatio(D,f)=\frac{Gain(D,f)}{IV(f)}\)

其中,

\(IV(f) = -\sum_{v=1}^{V}\frac{|D_v|}{|D|}log_2\frac{|D_v|}{|D|}\)

\(D_v\)表示特征f取值为v的数据子集.

因为信息增益会倾向于选择特征取值多的特征,所以,我们对多取值特征进行惩罚,除以特征f的固有值[或者说特征f的信息熵,f的信息熵越大,相应f的取值情况越多,惩罚力度越大].

Gini指数

假设数据集D有K个类,样本点属于第k类的概率为pk,则概率分布的基尼指数定义为:

\(Gini(D)=\sum_{k=1}^Kp_k(1-p_k) =1 - \sum_{k=1}^Kp_k^2\)

知道了gini指数的计算公式,计算划分前的gini指数,划分后,计算各个节点的gini指数值,然后根据划分后子节点的数据比例进行加权求和,得到划分后的总gini指数,最后对两次结果做差,得到特征f的划分效果, 差值越大,分类效果越好.

均方差MSE[和,不平均]

和分类时相似,计算划分前节点的均方差,划分后计算子节点的均方差,依据数据比例加权平均,再计算两次结果差值,差值越大越好.

MAE也可以用作特征选择指标,和MSE类似.

决策树生成

决策树本质上也是一棵树,所以符合数据结构中树的一般性构造过程,也就是递归.

既然是递归构建过程,首先要明白的是递归终止条件,否则就会陷入死循环.那么决策树的终止条件是什么呢?决策树中符合终止条件时,停止继续划分,生成叶节点.

如果是分类树:

  1. 如果节点数据全是同一类别,停止递归[没有必要了,都是自己人];
  2. 如果特征列表为空,停止递归[在分类问题中,一般情况下,每种划分特征只会用一次,用完就扔了---负心汉];
  3. 如果所有样本在所有特征上取值都相同,停止递归[特征没用,不具有区分度---所有特征上取值都相同,千篇一律]

如果是回归树,回归树通常会设定自定义的参数,比如均方差变化最小值,每个节点容忍的最小样本数,相应的条件:

  1. 均方差变化太小[小于预定义的阈值];
  2. 划分后节点的样本量太少[小于预定义的阈值,比如只有2,3个,小猫两三只没有必要继续划分了];
[终止条件]检测数据集中的每个子项是否属于同一分类,or 特征集为空:

    If so:  return  类标签

    Else:
寻找划分数据集的最好特征(--基于信息增益)
划分数据集
创建分支结点
for 每个划分的子集
调用自己,并增加返回结果到分支结点中 return 分支结点

上面伪代码中存在一个问题, 类标签怎么确定?

如果叶子节点都属于同一类别,那么给定所属类别即可;如果叶子节点数据属于不同的类别,大家进行投票决定,服从多数人的利益[少数服从多数].

树剪枝

因为在决策树的构建过程中,可能会存在过拟合现象,或者说决策树深度太深,太过于复杂;因此,我们可以对决策树进行剪枝处理.剪枝又分为预剪枝和后剪枝.

预剪枝是指在决策树生成过程中,对每个节点在划分前先进行估计,如果当前的划分不能带来决策树泛化性能的提升[泛化性能可以用错误率,或者说均方差衡量],则停止划分将当前节点标记为叶节点.

后剪枝过程是一个不断尝试的过程:找到叶子节点,尝试合并[将叶子节点的双亲变成叶子节点],比较合并前后的变化效果.变化效果需要定量分析,这个数据量指标分类问题可以使用错误率,回归树可以使用均方差, 而指标的计算需要数据,因此我们需要一定的测试数据,然后使用测试数据在已经生成的决策树上进行不断测试,假如合并后比合并前效果好,分类问题上就是错误率降低了,回归问题上均方差减少了,我们就进行合并处理[或者说是剪枝处理].

其他问题

决策树使用范围,或者说对数据集的要求: 标称数据或数值型数据.本质上,决策树只适用于标称型数据[也就是离散数据],但如果是连续数据[在特征取值上连续],我们需要进行离散处理.不同类型的决策树处理问题不同,有的决策树需要对数据进行预先离散化处理;但有的决策树本身可以处理连续数据.

决策树在生成过程中会遇到各种各样的问题.有数据集的问题,也有决策树本身的问题,而决策树本身也有自己的适用范围,不可能适用于所有问题[一招鲜吃遍天impossible].比如说:

  • 连续数据: 离散化处理;
  • 空缺数据: 如果在某个特征上数据存在空缺值,怎么处理? 我们可以先将取特征上非空的数据子集,当做非空数据处理,然后将特征取值为空记录按照子节点数据的比率划分到所有子节点上.
  • etc.

具体问题具体分析,依据不同的任务,数据集的不同特点选择适合的算法模型.

代码实现

repository 欢迎fork,star.

决策树(ID3,C4.5,CART)原理以及实现的更多相关文章

  1. 决策树 ID3 C4.5 CART(未完)

    1.决策树 :监督学习 决策树是一种依托决策而建立起来的一种树. 在机器学习中,决策树是一种预测模型,代表的是一种对象属性与对象值之间的一种映射关系,每一个节点代表某个对象,树中的每一个分叉路径代表某 ...

  2. 21.决策树(ID3/C4.5/CART)

    总览 算法   功能  树结构  特征选择  连续值处理 缺失值处理  剪枝  ID3  分类  多叉树  信息增益   不支持 不支持  不支持 C4.5  分类  多叉树  信息增益比   支持 ...

  3. ID3\C4.5\CART

    目录 树模型原理 ID3 C4.5 CART 分类树 回归树 树创建 ID3.C4.5 多叉树 CART分类树(二叉) CART回归树 ID3 C4.5 CART 特征选择 信息增益 信息增益比 基尼 ...

  4. 决策树模型 ID3/C4.5/CART算法比较

    决策树模型在监督学习中非常常见,可用于分类(二分类.多分类)和回归.虽然将多棵弱决策树的Bagging.Random Forest.Boosting等tree ensembel 模型更为常见,但是“完 ...

  5. 机器学习算法总结(二)——决策树(ID3, C4.5, CART)

    决策树是既可以作为分类算法,又可以作为回归算法,而且在经常被用作为集成算法中的基学习器.决策树是一种很古老的算法,也是很好理解的一种算法,构建决策树的过程本质上是一个递归的过程,采用if-then的规 ...

  6. 机器学习相关知识整理系列之一:决策树算法原理及剪枝(ID3,C4.5,CART)

    决策树是一种基本的分类与回归方法.分类决策树是一种描述对实例进行分类的树形结构,决策树由结点和有向边组成.结点由两种类型,内部结点表示一个特征或属性,叶结点表示一个类. 1. 基础知识 熵 在信息学和 ...

  7. 机器学习之决策树二-C4.5原理与代码实现

    决策树之系列二—C4.5原理与代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/9435712.html I ...

  8. 机器学习总结(八)决策树ID3,C4.5算法,CART算法

    本文主要总结决策树中的ID3,C4.5和CART算法,各种算法的特点,并对比了各种算法的不同点. 决策树:是一种基本的分类和回归方法.在分类问题中,是基于特征对实例进行分类.既可以认为是if-then ...

  9. 决策树(ID3、C4.5、CART)

    ID3决策树 ID3决策树分类的根据是样本集分类前后的信息增益. 假设我们有一个样本集,里面每个样本都有自己的分类结果. 而信息熵可以理解为:“样本集中分类结果的平均不确定性”,俗称信息的纯度. 即熵 ...

随机推荐

  1. Android手势密码--设置和校验

    private void setGesturePassword() { toggleMore.setOnCheckedChangeListener(new CompoundButton.OnCheck ...

  2. node中__dirname、__filename、process.cwd()、process.chdir()表示的路径

    直接上结论:__dirname 表示当前文件所在的目录的绝对路径__filename 表示当前文件的绝对路径module.filename ==== __filename 等价process.cwd( ...

  3. SQL alwayson 辅助接点查询统计信息“丢失”导致查询失败

    ALWAYSON 出现以下情况已经2次了,记录下: DBCC 执行完毕.如果 DBCC 输出了错误信息,请与系统管理员联系. 消息 2767,级别 16,状态 1,过程 sp_table_statis ...

  4. SqlServer索引页损坏恢复

    问题背景 运维操作失误,在没有正常关闭sqlserver的情况下,将服务器关闭了,重启后某些表损坏(应该是某些页损坏了,没有损坏的页还能访问到数据,但是访问损坏了的页就有问题),目前数据库只有4.20 ...

  5. Spring Boot 静态页面

    spring boot项目只有src目录,没有webapp目录,会将静态访问(html/图片等)映射到其自动配置的静态目录,如下 /static /public /resources /META-IN ...

  6. .NET Core launch.json 简介

    1.环境 Windows,.NET Core 2.0,VS Code dotnet> dotnet new console -o myApp 2.launch.json配置文件 { // Use ...

  7. 【PAT】B1050 螺旋矩阵(25 分)

    实在不觉得递归等方式有什么简单的地方,没错我就是用的最笨的方法模拟. 和我一样的小白看代码应该很容易理解. #include<stdio.h> #include<math.h> ...

  8. Docker容器学习与分享01

    1.什么是容器? 容器技术是一种虚拟化的方案,与传统的虚拟机不同,传统的虚拟机是通过中间层将一台或多台独立的机器虚拟运行于物理硬件之上,而容器是直接运行在操作系统内核之上的用户空间. 所以容器虚拟化又 ...

  9. 30个最常用的Linux系统命令行

    1.cd命令这是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径.如:cd /root/Docements # 切换到目录 ...

  10. python基础 - 字符串作

    split(sep=None, maxsplip=-1) 从左到右 sep 指定分隔字符串,缺省情况下空白字符串,指定的字符串会被切掉 maxsplit 指定分隔次数,-1 表示遍历 rsplit(s ...