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上做开发非常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初步的更多相关文章
- Weka 3: Data Mining Software in Java
官方网站: Weka 3: Data Mining Software in Java 相关使用方法博客 WEKA使用教程(经典教程转载) (实例数据:bank-data.csv) Weka初步一.二. ...
- Weka 二次开发使用心得
Weka 二次开发使用心得 一.weka数据挖掘流程 使用weka图形界面,初步尝试了下数据的预处理.分类.关联等操作,因为weka本身就是一个开源的机器学习库,于是想自己尝试下利用weka的api进 ...
- WEKA使用(基础配置+垃圾邮件过滤+聚类分析+关联挖掘)
声明: 1)本文由我bitpeach原创撰写,转载时请注明出处,侵权必究. 2)本小实验工作环境为Windows系统下的WEKA,实验内容主要有三部分,第一是分类挖掘(垃圾邮件过滤),第二是聚类分析, ...
- 利用weka和clementine数据挖掘举例
1.数据概述 本报告中采用的数据集来自于UCI经典数据集Adult,最初来源是由1994年Barry Becker的统计数据集,该数据集本来最初的主要任务是根据数据集中的相关属性预测某个人的年收入是大 ...
- Weka中数据挖掘与机器学习系列之Weka系统安装(四)
能来看我这篇博客的朋友,想必大家都知道,Weka采用Java编写的,因此,具有Java“一次编译,到处运行”的特性.支持的操作系统有Windows x86.Windows x64.Mac OS X.L ...
- Weka学习之认识weka(一)
Weka 简介 WEKA作为一个公开的数据挖掘工作平台,集合了大量能承担数据挖掘任务的机器学习算法,包括对数据进行预处理,分类,回归.聚类.关联规则以及在新的交互式界面上的可视化. Weka是基 ...
- WEKA简单介绍与资源汇总
简单介绍 Weka是一个开源的数据挖掘软件,里面集成了很多经典的机器学习算法,在高校和科研机构中受到了广泛的应用. 具体的简单介绍和简单的使用请參考文档:<使用Weka进行数据挖掘>. 学 ...
- Weka中数据挖掘与机器学习系列之Exploer界面(七)
不多说,直接上干货! Weka的Explorer(探索者)界面,是Weka的主要图形化用户界面,其全部功能都可通过菜单选择或表单填写进行访问.本博客将详细介绍Weka探索者界面的图形化用户界面.预处理 ...
- Weka中数据挖掘与机器学习系列之基本概念(三)
数据挖掘和机器学习 数据挖掘和机器学习这两项技术的关系非常密切.机器学习方法构成数据挖掘的核心,绝大多数数据挖掘技术都来自机器学习领域,数据挖掘又向机器学习提出新的要求和任务. 数据挖掘就是在数据中寻 ...
随机推荐
- 【Android 应用程序开发】 Fragment 详细说明
笔者 : 汉书亮 转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/38064191 本博客代码地址 : -- 单一 Fragmen ...
- [C++]四种方式求解最大子序列求和问题
问题 给定整数: A1,A2,-,An,求∑jk=iAk 的最大值(为方便起见,假设全部的整数均为负数,则最大子序列和为0) 比如 对于输入:-2,11,-4,13,-5,-2,答案为20,即从A2到 ...
- TRIZ系列-创新原理-22-变害为利原理
变害为利原理的详细表述例如以下:1)利用有害的因素(特别是环境中的)获得积极的效果: 有害无害不过相对的(时间,空间,人),将有害的因素通过一定的处理和转化,能够变有害为实用,比方废品回收, ...
- 【Nginx】开发一个简单的HTTP模块
首先来分析一下HTTP模块是怎样介入Nginx的. 当master进程fork出若干个workr子进程后,每一个worker子进程都会在自己的for死循环中不断调用事件模块: for ( ;; ) { ...
- hdoj 2602 Bone Collector 【01背包】
意甲冠军:给出的数量和袋骨骼的数,然后给每块骨骼的价格值和音量.寻求袋最多可容纳骨骼价格值 难度;这个问题是最基本的01背包称号,不知道的话,推荐看<背包9说话> AC by SWS 主题 ...
- 阿里巴巴2014年校园招聘(秋季招聘)在线笔试--測试研发project师
第一部分是单选题:40分钟答题时间. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveG1oMTk1NA==/font/5a6L5L2T/fontsize/ ...
- [LeetCode202]Happy Number判断一个数是不是happy number
题目: Write an algorithm to determine if a number is "happy". A happy number is a number def ...
- jQuery -> bind / live / delegate 终结者 - on
最近的一项研究jQuery.利用获得的最新版本1.11.1. 据该书打下面的代码示例,,反正也发现跑不起来. html <div class="container"> ...
- AndroidUI的组成部分ProgressBar
package com.gc.progressbar; /* * 1.ProgressBar组件也是一组重要的组件,ProgressBar本身代表了进度条组件, * 它还派生了两个经常使用的组件:Se ...
- AspUpload组件的安装及使用方法介绍
http://soft.huweishen.com/soft/47.html AspUpload对ASP编程人员来说要实现ASP网站文件上传功能它是首选.本文就为大家介绍一下AspUpload组件的安 ...