添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
本文详细介绍了C4.5决策树算法,包括与ID3的改进点、算法流程、代码实现分析,以及如何进行训练和样本分类。通过信息增益率选择属性、剪枝和处理非离散数据,C4.5算法在分类任务中表现出色。 摘要由CSDN通过智能技术生成

1.     算法概述

C4.5 ,是机器学习算法中的另一个分类决策树算法,它是决策树 ( 决策树也就是做决策的节点间的组织方式像一棵树,其实是一个倒树 ) 核心算法,是相对于 ID3 算法的改进,主要改进点有:

1. 用信息增益率来选择属性。 C4.5 克服了 ID3 用信息增益选择属性时偏向选择取值多的属性的不足。

2. 在树构造过程中进行剪枝。

3. 对非离散数据也能处理。

4. 能够对不完整数据进行处理。

2.     算法过程

统计好样本集 S ,属性集 A ,分别求出属性集中每个属性的信息增益率,选中增益率最大的属性 P ,假设 P 总有 n 种情况的取值(连续变量要离散化),那么分别统计好第 i 种情况时样本集 Si 和除去 P 的属性集 Pi ,递归生成相对应的子树。

2.1 主要步骤

1 读取文件信息,统计数目

2 建立决策树

如果样本集为空,则生成一个信息数目都为 0 的树节点返回

如果样本均为同一类别,则生成一个叶子节点返回

计算节点正负样本的数目

如果属性值只有那个类别的属性,则生成一个叶子节点,并赋值类型索引

如果以上都不是,则选择一个增益率最大的属性(连续属性要用增益率离散化),按那个属性的取值情况从新定义样本集和属性集,建造相关子树

3 事后剪枝(采用悲观错误率估算)

4 输出决策树

5 移除决策时

3.     算法实现分析

3.1 训练分类器

public void buildClassifier(Instances instances) throws Exception {

ModelSelectionmodSelection;

if ( m_binarySplits )

modSelection= new BinC45ModelSelection( m_minNumObj , instances, m_useMDLcorrection );

modSelection= new C45ModelSelection( m_minNumObj , instances, m_useMDLcorrection );

if (! m_reducedErrorPruning )

m_root = new C45PruneableClassifierTree(modSelection, ! m_unpruned ,

m_CF , m_subtreeRaising , ! m_noCleanup , m_collapseTree );

m_root = new PruneableClassifierTree(modSelection, ! m_unpruned ,

m_numFolds , ! m_noCleanup , m_Seed );

m_root . buildClassifier (instances);

第一个if判断是否对nominal属性进行二分裂,第二个if是判断是否对tree进行剪枝。

modSelection后面会被用于选择足有的分裂模型。

m_root是该树的根节点。

上面比较重要的是最后一句m_root.buildClassifier(instances);用于在各节点中构建分类器。下面我们看看其代码:

(C45PruneableClassifierTree.java)

public void buildClassifier(Instances data) throws Exception {

buildTree(data, m_subtreeRaising );

if ( m_collapseTheTree ){

collapse();

if ( m_pruneTheTree ) {

prune();

if ( m_cleanup ) {

cleanup( new Instances(data, 0));

过程为:首选见创建树然后根据需要对数进行节点折叠、剪枝、清理内存空间等。下面我们依次分析:

3.1.1 创建树buildTree (ClassifierTree.java)

public void buildTree(Instances data, boolean keepData) throws Exception {

Instances [] localInstances;

if (keepData) {

m_train = data;

m_test = null ;

m_isLeaf = false ;

m_isEmpty = false ;

m_sons = null ;

m_localModel = m_toSelectModel .selectModel(data); //选择最优的分裂模型

if ( m_localModel .numSubsets()> 1) {

localInstances = m_localModel .split(data);  //对训练数据进行分组

data = null ;

m_sons = new ClassifierTree [ m_localModel .numSubsets()]; //分配子树

for ( int i = 0; i <

c4 .5算法是ID3算法的改进,它使用了信息增益率来选择属性,克服使用信息增益来选择属性时偏向选择值多的属性的不足。信息增益率定义为其中Gain(S,A)与ID3算法中的信息增益相同,而分类信息SplitInfo(S,A)代表了按照属性A分裂样本集S的广度和均匀性。其中,Si到Sc是c个属性不同的值的属性A分割S而成的c个样本子集。 C4 .5既可以处理离散型描述属性,也可以处理连续性描述属性。在...
WEKA 进行数据挖掘,第 2 部分 weka 算法参数整理 文章目录1 算法原理1.1 计算类别信息熵1.2 计算每个属性的信息熵1.3 计算信息增益1.4 计算属性分裂信息度量1.5 计算信息增益率2 weka 上的实现2.1 WEKA 数据集2.2 在 WEKA 内进行分类 1 算法原理   首先, C4 .5是 决策树 算法的一种。 决策树 算法作为一种分类算法,...
这篇文章中我会通过几个例子向大家介绍一些 weka 中经典的数据挖掘算法和评估算法的手段。 J4.8 决策树 算法 在预处理标签页 点击 open file ,选择 Weka 安装目录下 data 文件夹中的 weather.numberic.arff 。(在这个目录中有很多经典的样本) 进入 分类器 标签,点击 Choose 按钮,开始选择 分类器 算法。在弹出的树状目录中找到 trees 节点...
1、 weka 来源 WEKA 的全名是怀卡托智能 分析 环境(Waikato Environment for Knowledge Analysis),同时 weka 也是新西兰的一种鸟名,而 WEKA 的主要开发者来自新西兰。 WEKA 作为一个公开的数据挖掘工作平台,集合了大量能承担数据挖掘任务的机器学习算法,包括对数据进行预处理,分类,回归、聚类、关联规则以及在新的交互式界面上的可视化。 2、...
1 决策树 算法框架1.1 决策树 主函数 决策树 主函数本质是一个递归函数,主要功能是按照某种规则生长出 决策树 的各个分支节点,并根据终止条件结束算法。 主函数功能: (1)输入分类的数据集和类别标签。 (2)根据某种分类规则得到最优的划分特征,并创建特征的划分节点——计算最优特征子函数。 (3)按照该特征取值划分数据集为若干部分——划分数据集子函数。
Weka 是Waikato大学开发的数据挖掘系统,使用Java语言实现。提供了对任意数据集的数据预处理预计算法性能评估的方法,具有很强的扩展型和兼容性。用户可以根据具体需要将个性化的算法封装进系统,达到数据处理及算法性能评估的目的。 Weka 具有多种数据处理功能,支持图形界面以及命令行方式的使用。同时 Weka 也提供了可以访问的API通过程序接口来调用。
J48是 WEKA 中的一个 分类器 ,它是一个基于 C4 .5算法的 决策树 分类器 。J48算法的基本思想是根据训练数据构建一棵 决策树 ,将数据分成不同的类别。在分类时,将测试数据从根节点开始向下遍历 决策树 ,直到到达一个叶子节点,该叶子节点就是测试数据所属的类别。 J48算法的优点是能够处理大规模的数据集,同时也能够处理连续和离散属性。此外,J48算法还具有可解释性强、易于理解等特点。 然而,J48算法也存在一些缺点,如容易过拟合、对噪声敏感等。因此,在使用J48算法时需要注意数据预处理和调参等问题,以提高算法的性能。
StarOldAccount: 我在鸿网互联上看到了与您文章一字不差的另一篇文章,发表时间是2015年7月8日,晚于您的博客发表时间,作者未指出,高度怀疑是抄袭您的博客,特此知会一声.网址如下: https://www.baidu.com/link?url=iLjRDkcEClXBIy4TFdBXchI93V31eLeAa8r7lCfhzv4FjuEYfLcv82ykL5ms8WEoZ6GrHiZ25qF3_CSLL3vt8hDpexsZSYovDF4ew8EPY07&wd=&eqid=b63823300001004e00000006580b6227 Spark Softmax zengjiancang: 博主您好,请问这个可以处理缺失值吗? Spark Softmax liangliang8086 z8596300: 数据就用libsvm格式的就可以,这里有:https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/ Spark Softmax z8596300: 博主你好,你使用的数据集能给我发一份么 谢谢了!