机器学习算法(二)——决策树分类算法及R语言实现方法
2015-04-22 15:39
330 查看
决策树算法是分类算法中最常用的算法之一。决策树是一种类似流程图的树形结构,可以处理高维数据,直观易理解,且准确率较高,因此应用广泛。本篇小博就决策树的若干算法:ID3算法、C4.5算法以及分类回归树(CART)、C5.0进行对比介绍,并对比C4.5与C5.0处理较大数据集时的效率,观察C5.0效率提升了多少。
一、概况
二、算法步骤
1、ID3算法
① 计算对D中原组分类所需要的期望信息,即明确要分为几类后,不同类型元组数目的信息熵。
② 计算每个属性的期望信息需求。要加上分类属性A中不同类别的占比作为每一个子数据集Dj熵的比重。
③ 计算信息增益。即按照A属性分类后得到的熵减去1中的熵,选择信息增益最大的作为分裂属性。
④ 若属性A为连续的,则扫描A一次,对于每一个准分裂点,按2进行计算,也是一种离散化处理。
2、C4.5算法
分类属性选取标准改为增益率。
3、CART
分类属性选取标准改为基尼系数。
三、对比C4.5算法以及C5.0算法
1、数据集如下
![](file:///c:/users/administrator/appdata/roaming/360se6/User Data/temp/003cxikXzy6OO8XyiZj41&690.jpg)
![](file:///c:/users/administrator/appdata/roaming/360se6/User Data/temp/003cxikXzy6OO8XyiZj41&690.jpg)
![](http://img.blog.csdn.net/20150422162236246?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQXVndXN0V2luZA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
十折交叉检验实验结果如下:
![](http://img.blog.csdn.net/20150422162424182?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQXVndXN0V2luZA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
运行时间对比:
![](http://img.blog.csdn.net/20150422162518174?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQXVndXN0V2luZA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
可见C5.0处理较大数据集的速度提升还是很多的。
四、决策树的剪枝
为了防止因噪声或离群点导致的过拟合,决策树要进行剪枝操作,常用的剪枝策略包含先剪枝和后剪枝。
1、先剪枝
通过提前停止树的构建而对树进行剪枝,设定一个合理的阈值,如果通过该属性划分后的元组的某些统计特性(如统计显著性、信息增益以及基尼系数等)低于设定的阈值,则不再进行树的构建。
2、后剪枝
对已完全生长的树进行剪枝,通过删除节点的分支,用叶子节点(即类标号)来代替它完成剪枝。例如CART的代价复杂度剪枝算法,其剪枝的依据为树的代价复杂度,依赖于树的节点个数以及分类错误率,如果剪枝后能够带来更小的代价复杂度,那么就执行剪枝。
一、概况
算法名称 | 分类属性选取标准 | 标准描述 | 优点 | 缺点 |
ID3 | 信息增益 | 该分类属性带来的熵的变化 | 。。 | ① 只能描述属性为离散型的变量;②偏向具有许多输出的测试,即总是倾向于选择包含多取值的参数,因为参数的取值越多,其分割后的子节点纯度可能越高。采用极限思维,若分类属性为一种唯一标识的属性,每个取值分别对应一种最终分类类型,那么以此属性分类后得到的每个子集都只有一个元组,必然是纯的,这种划分显然是没有意义的。 |
C4.5 | 信息增益率 | 在信息增益的基础上,除以分裂信息熵,即该分类属性下各种取值数量的熵 | ①以信息增益率代替信息增益,准确率提升;②可处理连续变量的分类;③可处理有缺失值的数据;④可以边构造树边剪枝; | ①对于连续属性最优分割阈值选择比较耗时;②不具备增量式学习能力;③ 在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导致算法的低效 |
CART | 基尼系数 | 即不纯度 | 抽取规则简便且易于理解;面对存在缺失值、变量数多等问题时非常稳健。 | 偏向于多值属性,并且当类的数量很大时会有困难。 |
C5.0 | 信息增益率 | 在信息增益的基础上,除以分裂信息熵,即该分类属性下各种取值数量的熵 | 适用于处理大数据及,采用boosting方式提高模型准确率,速度比较快,占用内存比较少。 | 。。 |
1、ID3算法
① 计算对D中原组分类所需要的期望信息,即明确要分为几类后,不同类型元组数目的信息熵。
② 计算每个属性的期望信息需求。要加上分类属性A中不同类别的占比作为每一个子数据集Dj熵的比重。
③ 计算信息增益。即按照A属性分类后得到的熵减去1中的熵,选择信息增益最大的作为分裂属性。
④ 若属性A为连续的,则扫描A一次,对于每一个准分裂点,按2进行计算,也是一种离散化处理。
2、C4.5算法
分类属性选取标准改为增益率。
3、CART
分类属性选取标准改为基尼系数。
三、对比C4.5算法以及C5.0算法
1、数据集如下
![](file:///c:/users/administrator/appdata/roaming/360se6/User Data/temp/003cxikXzy6OO8XyiZj41&690.jpg)
![](file:///c:/users/administrator/appdata/roaming/360se6/User Data/temp/003cxikXzy6OO8XyiZj41&690.jpg)
十折交叉检验实验结果如下:
运行时间对比:
可见C5.0处理较大数据集的速度提升还是很多的。
四、决策树的剪枝
为了防止因噪声或离群点导致的过拟合,决策树要进行剪枝操作,常用的剪枝策略包含先剪枝和后剪枝。
1、先剪枝
通过提前停止树的构建而对树进行剪枝,设定一个合理的阈值,如果通过该属性划分后的元组的某些统计特性(如统计显著性、信息增益以及基尼系数等)低于设定的阈值,则不再进行树的构建。
2、后剪枝
对已完全生长的树进行剪枝,通过删除节点的分支,用叶子节点(即类标号)来代替它完成剪枝。例如CART的代价复杂度剪枝算法,其剪枝的依据为树的代价复杂度,依赖于树的节点个数以及分类错误率,如果剪枝后能够带来更小的代价复杂度,那么就执行剪枝。
![](file:///c:/users/administrator/appdata/roaming/360se6/User Data/temp/003cxikXzy6OO92qI0D87&690.jpg)
相关文章推荐
- 数据挖掘—决策树ID3分类算法的C++实现
- 数据挖掘-决策树ID3分类算法的C++实现
- 分类算法之决策树+R实现
- 决策树ID3分类算法的C++实现
- 数据挖掘-决策树ID3分类算法的C++实现
- 数据挖掘-决策树ID3分类算法的C++实现
- 数据挖掘-决策树ID3分类算法的C++实现
- 数据挖掘-决策树ID3分类算法的C++实现
- 决策树分类算法原理分析与代码实现
- 机器学习经典算法详解及Python实现--CART分类决策树、回归树和模型树
- 朴素贝叶斯分类算法的R语言实现
- 机器学习算法(一)——关联规则Apriori算法及R语言实现方法
- 机器学习算法(三)——朴素贝叶斯算法及R语言实现方法
- 决策树ID3分类算法的C++实现
- 决策树分类和预测算法的原理及实现
- 决策树分类和预测算法的原理及实现
- 决策树分类算法及python代码实现案例
- 决策树ID3分类算法的C++实现
- 机器学习算法——KNN分类算法介绍以及Java实现
- pyhon实现决策树(ID3)算法进行数据的分类预测