从前年開始使用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上做开发非常easy的。每一个模块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函数中了,下次我们使用的时候就能够方便的调用这个接口了。能够省去我们写这些代码的时间了。

我们还清楚?这是比较简单。

Weka初步的更多相关文章

  1. Weka 3: Data Mining Software in Java

    官方网站: Weka 3: Data Mining Software in Java 相关使用方法博客 WEKA使用教程(经典教程转载) (实例数据:bank-data.csv) Weka初步一.二. ...

  2. Weka 二次开发使用心得

    Weka 二次开发使用心得 一.weka数据挖掘流程 使用weka图形界面,初步尝试了下数据的预处理.分类.关联等操作,因为weka本身就是一个开源的机器学习库,于是想自己尝试下利用weka的api进 ...

  3. WEKA使用(基础配置+垃圾邮件过滤+聚类分析+关联挖掘)

    声明: 1)本文由我bitpeach原创撰写,转载时请注明出处,侵权必究. 2)本小实验工作环境为Windows系统下的WEKA,实验内容主要有三部分,第一是分类挖掘(垃圾邮件过滤),第二是聚类分析, ...

  4. 利用weka和clementine数据挖掘举例

    1.数据概述 本报告中采用的数据集来自于UCI经典数据集Adult,最初来源是由1994年Barry Becker的统计数据集,该数据集本来最初的主要任务是根据数据集中的相关属性预测某个人的年收入是大 ...

  5. Weka中数据挖掘与机器学习系列之Weka系统安装(四)

    能来看我这篇博客的朋友,想必大家都知道,Weka采用Java编写的,因此,具有Java“一次编译,到处运行”的特性.支持的操作系统有Windows x86.Windows x64.Mac OS X.L ...

  6. Weka学习之认识weka(一)

     Weka 简介   WEKA作为一个公开的数据挖掘工作平台,集合了大量能承担数据挖掘任务的机器学习算法,包括对数据进行预处理,分类,回归.聚类.关联规则以及在新的交互式界面上的可视化. Weka是基 ...

  7. WEKA简单介绍与资源汇总

    简单介绍 Weka是一个开源的数据挖掘软件,里面集成了很多经典的机器学习算法,在高校和科研机构中受到了广泛的应用. 具体的简单介绍和简单的使用请參考文档:<使用Weka进行数据挖掘>. 学 ...

  8. Weka中数据挖掘与机器学习系列之Exploer界面(七)

    不多说,直接上干货! Weka的Explorer(探索者)界面,是Weka的主要图形化用户界面,其全部功能都可通过菜单选择或表单填写进行访问.本博客将详细介绍Weka探索者界面的图形化用户界面.预处理 ...

  9. Weka中数据挖掘与机器学习系列之基本概念(三)

    数据挖掘和机器学习 数据挖掘和机器学习这两项技术的关系非常密切.机器学习方法构成数据挖掘的核心,绝大多数数据挖掘技术都来自机器学习领域,数据挖掘又向机器学习提出新的要求和任务. 数据挖掘就是在数据中寻 ...

随机推荐

  1. java.nio分析软件包(三)---Charset理解力

    前面的分析后,2一个基本的封装类型.现在我们就来揭开Java.nio魔法知识的最后一块,CharsetEncoding类,他的主要功能是实现字节Unicode之间的转换转码. 让我们来看看他同样的封装 ...

  2. Windows 7下一个:该应用程序不能正常启动(0xc0150002)

             在新系统中正确安装QQ2010无法执行,同一时候安装的TM2009也无法执行. 相同显示为"应用程序无法正常启动(0xc0150002). 请单击"确定" ...

  3. 【转】QT样式表 (QStyleSheet)

    作者:刘旭晖 Raymond 转载请注明出处Email:colorant@163.comBLOG:http://blog.csdn.net/colorant/ 除了子类化Style类,使用QT样式表( ...

  4. 慎重使用MySQL auto_increment

    在使用MySQL中,常常会在表中建立一个自增的ID字段,利用自增ID可以高速建立索引,也是MySQL官方比較推荐的一种方式,可是,这样的方式在大量数据且配置主从时,可能会出现因为自增ID导致同步失败的 ...

  5. 在将 varchar 值 '2,7' 转换成数据类型 int 时失败

    消息 245,级别 16,状态 1,第 1 行在将 varchar 值 '2,7' 转换成数据类型 int 时失败. 原sql select  UserName from s_User  where ...

  6. oracle存储过程的例子

    oracle存储过程的例子 分类: 数据(仓)库及处理 2010-05-03 17:15 1055人阅读 评论(2)收藏 举报 认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的 ...

  7. 任意长度的正小数的加法(YT新人之巅峰大决战05)

    Problem Description 话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫"大明". 这时他已经不是那个只会做100以内加法的那个"小明 ...

  8. 【DataStructure】Some useful methods about linkedList(三)

    Method 4: Gets the value of element number i For example, if list is {22, 33, 44, 55, 66, 77, 88, 99 ...

  9. Robotium调用getActivity()导致程序挂起的方法

    1. 问题背景的叙述性说明 需要直接用在工作中没有项目的源代码robotium测试目标android平台launcher,该平台的基础上,当前日期的版本号android 4.4.2.之前我用来验证的可 ...

  10. spring常规任务(轻便易)

    spring提供了定时任务功能.我们不需要第三者jar包支持.spring够了. 代码: package com.inth.product.web.task; import java.util.Dat ...