http://liouwei20051000285.blog.163.com/blog/static/252367420091016104326723/

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

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

我是从weka1.4一直用到现在的1.6版本的,其间weka在图形界面上有一些变动,但是底层的框架结构没有太大的变化,主要是添加一些新的算法什么的。总之大家可以放心的使用。我现在积累的代码是从1.5版本积累下来的,到现在1.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;

/*

* Date: 2009.4.1

* by: Wang Yi

* Email: wangyi19840906@yahoo.com.cn

* QQ: 270135367

*

*/

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函数中了,下次我们使用的时候就可以方便的调用这个接口了,可以省去我们写这些代码的时间了。

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

Weka学习一(分类器算法)相关推荐

  1. 机器学习之 weka学习(二)算法说明

    本文转自:http://blog.csdn.net/mm_bit/article/details/47405433 weka中的各算法说明 1) 数据输入和输出 WOW():查看Weka函数的参数. ...

  2. 04 集成学习 - Boosting - AdaBoost算法构建

    03 集成学习 - Boosting - AdaBoost算法原理 十.AdaBoost算法构建 上一章最后说明了每个基模型的权值α是如何求得的,于是我就可以对模型进行更新操作了. 构建过程一 1.假 ...

  3. Machine Learning | (8) Scikit-learn的分类器算法-随机森林(Random Forest)

    Machine Learning | 机器学习简介 Machine Learning | (1) Scikit-learn与特征工程 Machine Learning | (2) sklearn数据集 ...

  4. Machine Learning | (7) Scikit-learn的分类器算法-决策树(Decision Tree)

    Machine Learning | 机器学习简介 Machine Learning | (1) Scikit-learn与特征工程 Machine Learning | (2) sklearn数据集 ...

  5. Machine Learning | (6) Scikit-learn的分类器算法-性能评估

    Machine Learning | 机器学习简介 Machine Learning | (1) Scikit-learn与特征工程 Machine Learning | (2) sklearn数据集 ...

  6. Machine Learning | (5) Scikit-learn的分类器算法-朴素贝叶斯

    Machine Learning | 机器学习简介 Machine Learning | (1) Scikit-learn与特征工程 Machine Learning | (2) sklearn数据集 ...

  7. Machine Learning | (3) Scikit-learn的分类器算法-k-近邻

    Machine Learning | 机器学习简介 Machine Learning | (1) Scikit-learn与特征工程 Machine Learning | (2) sklearn数据集 ...

  8. EL之AdaBoost:集成学习之AdaBoost算法的简介、应用、经典案例之详细攻略

    EL之AdaBoost:集成学习之AdaBoost算法的简介.应用.经典案例之详细攻略 目录 AdaBoost算法的简介 1.理解AdaBoost算法 1.1.从前向逐步递增角度来看理解AdaBoos ...

  9. weka 学习总结(持续)

    机器学习之 Weka学习(一)weka介绍,安装和配置环境变量 机器学习之 Weka学习(二)算法说明 Weka数据挖掘处理流程介绍 机器学习之 weka学习(五)示例用法 Weka数据处理结果分析 ...

  10. 机器学习篇01:在线学习的支持向量机算法学习笔记

    在线学习的支持向量机算法学习笔记 oisvm算法实现说明 oisvm算法实现说明 % 本程序是用于实现基于在线学习的调制信号识别的程序 % % % 第一步:调制信号的生成 % 首先是7个信号:2ASK ...

最新文章

  1. linux shell awk 单引号分割
  2. 远程管理,无需在机房来回穿梭
  3. java kafkastream_手把手教你写Kafka Streams程序
  4. (转)WriteOnce and RunAnyWhere
  5. vivado入门教程
  6. 软件项目开发与管理(单代号网络图参考例题)
  7. 格式化U盘并测试读写速度
  8. 如何在CAD编辑软件中画椭圆
  9. java实现pdf导出
  10. mysql 处理文本数据_mysql文本处理函数实例(数据处理函数的使用一)
  11. 基于Matlab的压力控制论文,基于Matlab的压力容器螺栓组联接优化设计的论文
  12. 专家访谈:Flex技术对web开发的影响
  13. 明星里程被盗?看区块链如何加强个人信息安全保护
  14. 18.sql server横向切分、纵向拆分表、相对平均分配数据、复杂sql语句、数据库存储原理(by-朝夕)
  15. 美国医院开始用大数据预测谁会生病
  16. 【CSS】886- 你该知道的字体 font-family
  17. 反欺诈类优秀文章汇总
  18. my fav html
  19. 阜阳计算机学校招生,阜阳计算机学校2021年招生简介
  20. Java编程之学生类

热门文章

  1. 使用JBoss Modules来模块化Java
  2. NumberUtils源码分析
  3. Java程序员新手老手都离不开八大开发工具
  4. 程序员如何用Java排序
  5. Java 包(package)
  6. TeXworks显示行号、语法高亮、自动补全
  7. YARN编程实例—Unmanaged AM工作原理介绍
  8. Ubuntu下git使用教程
  9. 深度学习用于基于内容的图像检索 Deep Learning for Content-Based Image Retrieval
  10. Nova 启动虚拟机流程解析