`
anna_zr
  • 浏览: 200574 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Weka系列转载之初体验

阅读更多
从前年开始使用weka最数据挖掘方面的研究,到现在有一年半的时间了。看到我们同组的兄弟写了关于weka方面的总结,我也想整理一下。因为网上的资料实在是太少,记得刚接手的时候,真是硬着头皮看代码。不过到现在看来,也积累了很多的代码了。希望能够在这里跟大家分享一下学习weka的乐趣与经验。

Weka是来之新西兰怀卡托大学的一款开源软件,主要是数据挖掘方面的一些算法的集合。这款软件大概是当前数据挖掘领域最好的开源软件了,当然国外还有其它一些组织维护的有自己的开源软件,但是只有这款软件应用是比较广泛的了。具体关于weka的信息可以到官网去查看http://www.cs.waikato.ac.nz/ml/weka/ ,软件的下载也可大家到官网去。

我是从weka3.4一直用到现在的3.6版本的,其间weka在图形界面上有一些变动,但是底层的框架结构没有太大的变化,主要是添加一些新的算法什么的。总之大家可以放心的使用。我现在积累的代码是从3.5版本积累下来的,到现在3.6版本,集成起来一点问题都没有,这大概也是我喜欢weka的一个原因。

数据挖掘的过程一般如下:

1.       读入训练、测试样本

2.       初始化分类器

3.       使用训练样本训练分类器

4.       使用测试样本测试分类器的学习效果

5.       打印分类结果

我们现在看看一个简单的实例



package com.csdn;



import java.io.File;



import weka.classifiers.Classifier;

import weka.classifiers.Evaluation;

import weka.core.Instance;

import weka.core.Instances;

import weka.core.converters.ArffLoader;



public class Test {



    /**

     * @param args

     */

    public static void main(String[] args) {

       // TODO Auto-generated method stub

       Instances ins = null;

      

       Classifier cfs = null;

       try{

          

           /*

            * 1.读入训练、测试样本

            * 在此我们将训练样本和测试样本作为同一个样本

            */

           File file= new File("C:\\Program Files\\Weka-3-6\\data\\contact-lenses.arff");

           ArffLoader loader = new ArffLoader();

           loader.setFile(file);

           ins = loader.getDataSet();

          

           //在使用样本之前一定要首先设置instances的classIndex,否则在使用instances对象是会抛出异常

           ins.setClassIndex(ins.numAttributes()-1);

          

           /*

            * 2.初始化分类器

            * 具体使用哪一种特定的分类器可以选择,请将特定分类器的class名称放入forName函数

            * 这样就构建了一个简单的分类器

            */

           cfs = (Classifier)Class.forName("weka.classifiers.bayes.NaiveBayes").newInstance();

          

           /*

            * 3.使用训练样本训练分类器

            */

           cfs.buildClassifier(ins);

          

          

           /*

            * 4.使用测试样本测试分类器的学习效果

            * 在这里我们使用的训练样本和测试样本是同一个,在实际的工作中需要读入一个特定的测试样本

            */

           Instance testInst;

           /*

            * Evaluation: Class for evaluating machine learning models

            * 即它是用于检测分类模型的类

            */

           Evaluation testingEvaluation = new Evaluation(ins);

           int length = ins.numInstances();

           for (int i =0; i < length; i++) {

              testInst = ins.instance(i);

              //通过这个方法来用每个测试样本测试分类器的效果

              testingEvaluation.evaluateModelOnceAndRecordPrediction(

                  cfs, testInst);

           }

          

           /*

            * 5.打印分类结果

            * 在这里我们打印了分类器的正确率

            * 其它的一些信息我们可以通过Evaluation对象的其它方法得到

            */

           System.out.println( "分类器的正确率:" + (1- testingEvaluation.errorRate()));

       }catch(Exception e){

           e.printStackTrace();

       }

    }



}



通过这个实例,我们可以看到在weka上做开发非常简单的,每个模块weka都提供了很好的支持。同时,我们可以在此基础上对weka进行一个简单的封装。设计一个Util类,将数据读取,以及分类器测试等功能放在这个Util类中共以后其它的程序使用。



获取样本Instances

/*

     * 从.arff文件中获取样本Instances;

     * 1.fileName instances的文件名

     */

    public static Instances getInstances(String fileName) throws Exception{

       File file= new File(fileName);

       return getInstances(file);

    }



/*

     * 从.arff文件中获取样本Instances;

     * 1.file 获得instances的File对象

     */

    public static Instances getInstances(File file) throws Exception{

       Instances inst = null;

       try{

           ArffLoader loader = new ArffLoader();

           loader.setFile(file);

           inst = loader.getDataSet();

       }

       catch(Exception e){

           throw new Exception(e.getMessage());

       }

       return inst;

    }



获得一个Evaluation对象:

/*

     * 获得一个Evaluation对象

     * 1.h 一个已经训练过的分类器

     * 2.ins 测试样本

     */

    public static Evaluation getEvaluation(Classifier h,Instances ins){

       try{

           Instance testInst;

           /*

            * Evaluation: Class for evaluating machine learning models

            * 即它是用于检测分类模型的类

            */

           Evaluation testingEvaluation = new Evaluation(ins);

           int length = ins.numInstances();

           for (int i =0; i < length; i++) {

              testInst = ins.instance(i);

              //通过这个方法来用每个测试样本测试分类器的效果

              testingEvaluation.evaluateModelOnceAndRecordPrediction(

                   h, testInst);

            }

           return testingEvaluation;

       }

       catch(Exception e){

           System.out.println("haha bug!");

           System.out.println(e);

       }

       return null;     

    }



通过这几个函数我们就将读取instances对象的功能以及测试分类器的效果的功能封装到两个static函数中了,下次我们使用的时候就可以方便的调用这个接口了,可以省去我们写这些代码的时间了。

大家明白了吗?还是比较简单的吧。



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/anqiang1984/archive/2009/04/01/4040571.aspx
分享到:
评论

相关推荐

    Weka源代码系列- 编程 样例

    这个压缩包包含了一系列的源代码样例,旨在帮助用户更深入地理解如何通过编程接口使用Weka进行数据分析和模型构建。以下是对这些样例代码的详细解释: 1. **ExperimentDemo.java**:这个文件演示了如何使用Weka中的...

    weka-src[weka源码]

    在Weka的源码中,`META-INF`可能包含了Weka的版本信息、签名信息以及其他元数据,这对于了解Weka的构建和打包过程是很有帮助的。 2. **weka**: 这个目录包含了Weka的核心代码。我们可以在这个目录下找到各种数据...

    Weka 中文版 v0.3 发布 基于weka 3.7.12 x64

    在第2版weka中文版的 基础上制作了第3版,暂定版本v0.3。将 guichooser 汉化完成。考虑到大家还是习惯使用 guichooser 作为默认启动界面,将 RunWeka.ini 中的设置恢复默认。但是为了支持中文,其中的编码选项从 cp...

    weka_doc(weka文档)

    Weka(Waikato Environment for Knowledge Analysis)是一个强大的数据挖掘和机器学习工具,主要用于数据分析和预测建模。这个系统由新西兰怀卡托大学的计算机科学系开发,是完全开源的,采用Java语言编写,因此具备...

    WEKA中文教程

    WEKA中文教程WEKA中文教程WEKA中文教程WEKA中文教程WEKA中文教程WEKA中文教程

    weka_android.zip

    在Android设备上直接使用原版Weka可能会遇到兼容性和性能问题,因为其设计之初并未考虑移动设备的限制。 描述指出,经过修改后的Weka版本已经适应了Android环境,这意味着开发者或数据科学家现在可以在移动设备上...

    weka开发java版jar包和源码

    这样,就可以直接使用Weka提供的类和方法,例如`weka.classifiers.Classifier`类用于训练和预测模型,`weka.core.Instances`类用于处理数据集,`weka.filters.Filter`类则用于数据预处理。 例如,以下是一个简单的...

    weka的JAVA程序

    Weka 提供了一系列的过滤器(Filter)类,可以对数据集进行这些操作。 5. **学习器(Learner)**:Weka 包含多种机器学习算法,如决策树(J48)、随机森林(RandomForest)、支持向量机(SVM)等。你可以通过 `...

    weka使用中文教程

    WEKA 使用中文教程 WEKA(Waikato Environment for Knowledge Analysis)是一种开放的数据挖掘工作平台,能够承担大量数据挖掘任务,包括数据预处理、分类、回归、聚类、关联规则等。_WEKA 的主要开发者来自新西兰...

    weka详细使用文档实例

    Weka的主要开发团队位于新西兰的怀卡托大学,这也是软件名称的由来之一。 Weka支持的数据格式为ARFF(Attribute-Relation File Format),这是一种ASCII文本格式的文件,易于阅读和编辑。ARFF文件包含了数据集的头...

    weka.jar和weka.zip源码 API

    Weka,全称为“Waikato Environment for Knowledge Analysis”,是一个广泛应用于数据挖掘和机器学习领域的开源软件工具。这个工具集提供了丰富的算法库,包括分类、回归、聚类、关联规则和特征选择等,并且支持数据...

    weka源码学习

    Weka开发[17]——关联规则之Apriori 66 Weka开发[18]——寻找K个邻居 67 Weka开发[19]——NaiveBayes源代码分析 69 Weka开发[20]——IB1源代码分析 74 Weka开发[21]——IBk(KNN)源代码分析 77 Weka开发...

    WEKA完整中文教程 实验教程 入门教程

    实验教程是实践性的部分,通过一系列实际案例,引导学习者亲手操作WEKA,理解数据挖掘过程。这些实验可能包括: 1. **分类问题**:如预测疾病类型、客户流失等,通过训练分类模型,学习如何选择和调整算法。 2. **...

    数据挖掘weka3.9

    Weka 3.9是最新的版本,它包含了一系列的增强和改进,旨在提升性能、稳定性和用户体验。这个版本可能包含了更新的算法实现,修复了之前版本的已知问题,并且可能引入了一些新的特性或功能,使得数据科学家和研究者...

    weka java 开发软件

    "weka.jar"是Weka的核心库,包含了所有预定义的数据挖掘算法和工具,开发者可以直接在Java代码中引用这个库,调用Weka的功能。而"weka_src.jar"则包含了Weka的源代码,这对于开发者来说非常宝贵,因为可以查看并理解...

    weka 3.8 jar 包

    weka 3.8 jar 包

    Java实现对Weka算法的应用案例

    在IT领域,Weka是一个非常著名的数据挖掘工具,它提供了丰富的机器学习算法库。这个案例主要探讨了如何在Java环境中利用Weka进行数据分析和建模。以下是对标题和描述中涉及知识点的详细解释: 1. **Weka算法**:...

Global site tag (gtag.js) - Google Analytics