Weka算法Classifier-trees-REPTree源码分析(一)

本文介绍了Weka中的REPTree算法,它是一种快速决策树学习器,与C4.5相比,REPTree使用信息增益/方差,并通过减小误差修剪进行优化,且仅对数值属性排序一次。对于缺失值,它采用与C4.5相同的方式处理。文章将深入分析REPTree的buildClassifier方法,探讨其与C4.5的区别。
摘要由CSDN通过智能技术生成


一、算法

关于REPTree我实在是没找到什么相关其算法的资料,或许是Weka自创的一个关于决策树的改进,也许是其它某种决策树方法的别名,根据类的注释:Fast decision tree learner. Builds a decision/regression tree using information gain/variance and prunes it using reduced-error pruning (with backfitting).  Only sorts values for numeric attributes once. Missing values are dealt with by splitting the corresponding instances into pieces (i.e. as in C4.5).

我们大概知道和C4.5相比,大概多了backfitting过程,并且数值型排序只进行一次(回想一下J48也就是C4.5算法是每个数据子集都要进行排序),并且缺失值的处理方式和C4.5一样,走不同的path再把结果进行加权。

具体和C4.5的比较将在代码分析之后给出一个总结。


二、buildClassifier

“大名鼎鼎”的分类器训练主入口,几乎每篇分析分类器源码都从这个方法入手。

 public void buildClassifier(Instances data) throws Exception {

    // 首先例行公事看一下给定数据集是否能使用REPTree进行分类,REPTREE基本能支持所有类型
    getCapabilities().testWithFail(data);

    // 把classIndex上没有数据的instance干掉,这些数据既不能用于训练也不能用于backfit
    data = new Instances(data);
    data.deleteWithMissingClass();
    
    Random random = new Random(m_Seed);

    m_zeroR = null;
    if (data.numAttributes() == 1) {
      m_zeroR = new ZeroR();//如果只有一列的话,就是用m_ZerO作为分类器,很直观只有一列的话肯定就是结果列了,只有结果列无法训练分类器,只能使用最基本的米ZerO作为分类器,mZerO的分类方法再上篇日志有说到。
      m_zeroR.buildClassifier(data);
      return;
    }

    // Randomize and stratify
    data.randomize(random);//进行随机排列
    if (data.classAttribute().isNominal()) {
      data.stratify(m_NumFolds);//如果枚举型还要进行一下分层,目的是
    }

    // 如果需要剪枝,则分为train集合和prune集合,否则只要train集合就行了
    Instances train = null;
    Instances prune = null;
    if (!m_NoPruning) {
      train = data.trainCV(m_NumFolds, 0, random);//这里是用了多折交叉验证的方法取得train和test
      prune = data.testCV(m_NumFolds, 0);
    } else {
      train = data;
    }

    // 建立了两个数组,第一维数据无意义,只是把三维数组当二维数组用而已,第二维代表各属性,第三维代表排序的index(顺序统计量)
    int[][][] sortedIndices = new int[1][train.numAttributes()][0];//这个里面存放的是各instance的下标
    double[][][] weights = new double[1][train.numAttributes()][0];//这个里面存放的是下标对应的instance的weight
    double[] vals = new double[train.numInstances()];//这个是临时数组,用于排序用的
    for (int j = 0; j < train.numAttributes(); j++) {
      if (j !&#
基于Weka的数据分类分析实验报告范文全文共6页,当前为第1页。基于Weka的数据分类分析实验报告范文全文共6页,当前为第1页。基于Weka的数据分类分析实验报告范文 基于Weka的数据分类分析实验报告范文全文共6页,当前为第1页。 基于Weka的数据分类分析实验报告范文全文共6页,当前为第1页。 1实验目的 使用数据挖掘中的分类算法,对数据集进行分类训练并测试。应用不同的分类算法,比较他们之间的不同。与此同时了解Weka平台的基本功能与使用方法。 2实验环境 2.1Weka介绍 Weka是怀卡托智能分析系统的缩写,该系统由新西兰怀卡托大学开发。Weka使用Java写成的,并且限制在GNU通用公共证书的条件下发布。它可以运行于几乎所有操作平台,是一款免费的,非商业化的机器学习以及数据挖掘软件。Weka提供了一个统一界面,可结合预处理以及后处理方法,将许多不同的学习算法应用于任何所给的数据集,并评估由不同的学习方案所得出的结果。 图1Weka主界面 Weka系统包括处理标准数据挖掘问题的所有方法:回归、分类、聚类、关联规则以及属性选择。分析要进行处理的数据是重要的一个环节,Weka提供了很多用于数据可视化和与处理的工具。输入数据可以有两种形式,第一种是以ARFF格式为代表的文件;另一种是直接读取数据库表。 使用Weka的方式主要有三种:第一种是将学习方案应用于某个数据集,然后分析其输出,从而更多地了解这些数据;第二种是使用已经学习到的模型对新实例进预测;第三种是使用多种学习器,然后根据其性能表现选择其中一种来进行预测。用户使用交互式界面菜单中选择一种学习方基于Weka的数据分类分析实验报告范文全文共6页,当前为第2页。基于Weka的数据分类分析实验报告范文全文共6页,当前为第2页。法,大部分学习方案都带有可调节的参数,用户可通过属性列表或对象编辑器修改参数,然后通过同一个评估模块对学习方案的性能进行评估。 基于Weka的数据分类分析实验报告范文全文共6页,当前为第2页。 基于Weka的数据分类分析实验报告范文全文共6页,当前为第2页。 2.2数据和数据集 根据应用的不同,数据挖掘的对象可以是各种各样的数据,这些数据可以是各种形式的存储,如数据库、数据仓库、数据文件、流数据、多媒体、网页,等等。即可以集中存储在数据存储库中,也可以分布在世界各地的网络服务器上。 大部分数据集都以数据库表和数据文件的形式存在,Weka支持读取数据库表和多种格 式的数据文件,其中,使用最多的是一种称为ARFF格式的文件。 ARFF格式是一种Weka专用的文件格式,Weka的正式文档中说明AREF代表Attribute-RelationFileFormat(属性-关系文件格式)。该文件是ASCII文本文件,描述共享一组属性结构的实例列表,由独立且无序的实例组成,是Weka表示数据集的标准方法,AREF不涉及实例之间的关系。 3数据预处理 本实验采用Weka平台,数据使用Weka安装目录下data文件夹下的默认数据集iri.arff。 Iri是鸢尾花的意思,鸢尾花是鸢尾属植物,是一种草本开花植物的统称。鸢尾花只有三枚花瓣,其余外围的那三瓣乃是保护花蕾的花萼,只是由于这三枚瓣状花萼长得酷似花瓣,以致常常以假乱真,令人难以辨认。 基于Weka的数据分类分析实验报告范文全文共6页,当前为第3页。基于Weka的数据分类分析实验报告范文全文共6页,当前为第3页。由于本次使用平台自带的ARFF格式数据,所以不存在格式转换的过程。实验所用的ARFF格式数据集如图2所示。 基于Weka的数据分类分析实验报告范文全文共6页,当前为第3页。 基于Weka的数据分类分析实验报告范文全文共6页,当前为第3页。 图2AREF格式数据集(iri.arff) 鸢尾花的数据集包括三个类别:IriSetoa(山鸢尾)、IriVericolour(变色鸢尾)和IriVirginica(维吉尼亚鸢尾),每个类别各有50个实例。数据集定义了5个属性:epallength(花萼长)、epalwidth(花萼宽)、petallength(花瓣长)、petalwidth(花瓣宽)、cla(类别)。最后一个属性一般作为类别属性,其余属性都是数值,单位为cm(厘米)。 实验数据集中所有的数据都是实验所需的,因此不存在属性筛选的问题。若所采用的数 据集中存在大量的与实验无关的属性,则需要使用weka平台的Filter(过滤器)实现属性的筛选。 实验所需的训练集和测试集均为iri.arff。 4实验过程及结果 应用iri.arff数据集,分别采用LibSVM、C4.5决策树分类器和朴素贝叶斯分类器进行测试和评价,分别在训练数据上训练分类模型,找出各个模型最优的参数值,并对三个模型进行全面评价比较,得到一个最
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值