转载自
http://blog.csdn.net/anqiang1984/archive/2009/04/01/4040571.aspx
从前年开始使用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函数中了,下次我们使用的时候就可以方便的调用这个接口了,可以省去我们写这些代码的时间了。
大家明白了吗?还是比较简单的吧。
分享到:
相关推荐
### WEKA知识点详解 #### 1. WEKA简介 **WEKA**,全称为**...无论是进行初步的数据探索还是复杂的模型训练,WEKA都能提供相应的工具和支持。此外,由于其开源的特性,用户还可以根据自身需求对其进行定制和扩展。
首先,实验内容包括对WEKA工具的初步认识和数据预处理。了解WEKA的运行环境对于后续的数据分析至关重要。在WEKA中,用户可以通过界面操作来加载数据集,如天气数据集weather.nominal.arrf。加载数据后,用户可以查看...
以上只是对每个文件名的初步解读,实际的代码和文档可能包含更复杂的细节和技巧。在使用Weka进行编程时,理解这些基本概念至关重要,它们可以帮助开发者解决从数据预处理到模型构建和评估的一系列问题。记住,持续...
在Weka中加载数据集后,通过信息可视化工具进行初步探索,了解数据的结构、缺失值、异常值以及各特征间的关联性。 4.2.3 数据预处理 数据预处理是关键步骤,可能包括缺失值处理、异常值检测、数据标准化、特征编码...
2. **子空间聚类**:通过KNN或其它方法识别每个节点的邻居,并进行初步的局部聚类,形成多个小的子簇。 3. **合并子簇**:基于互连度和近似度来判断哪些子簇应该被合并。这个过程是递归进行的,直到满足停止条件为止...
实验报告从WEKA工具的初步认识开始,接着对实验数据进行预处理,包括加载数据、熟悉各按钮的功能、使用过滤器对数据进行操作、离散化技术对数据进行处理等。 一、WEKA工具初步认识 WEKA是一款功能强大的数据挖掘...
1. **Explorer(探索者)**:这是Weka的核心部分,用于数据探索和初步分析。你可以加载CSV或其他格式的数据文件,然后进行数据预处理,如清理、转换、过滤等。此外,这里还提供了各种分类、聚类、关联规则和特征选择...
这里我介绍一个高效的 MATLAB to Weka 接口,它是基于 Matt Dunham 的初步工作实现的。 这项工作仍在进行中,我只包含了我主要用于工作的代码。 如果您想合作改进代码或发现任何错误,请随时通过“silee {at} ...
总的来说,Weka作为一款全面的数据挖掘工具,为开发者提供了强大的数据处理和机器学习能力,无论是进行初步的数据探索还是构建复杂的预测系统,都能得心应手。通过熟练掌握Weka,开发者可以更好地挖掘数据价值,提升...
Weka工具初步认识 Weka是一款开源的数据挖掘软件,支持多种机器学习算法,能够用于数据预处理、分类、回归、聚类、关联规则挖掘以及可视化等多种任务。掌握Weka的运行环境是使用该工具的基础,具体包括以下几点: ...
实验一:Weka的基本操作主要涵盖了对Weka这款强大的数据挖掘工具的初步了解和使用。Weka提供了多种界面供用户进行数据分析,包括Explorer、Experimenter、KnowledgeFlow和Simple CLI。本实验主要集中在Explorer界面...
在实际操作中,开发者可能会利用Weka提供的可视化界面(Explorer或Experimenter)先进行一些初步的实验,找出合适的算法和参数,然后在Java代码中复现这些步骤。此外,Weka还支持编写自定义的机器学习算法,这在...
1. **数据加载**:导入CSV、ARFF等格式的数据文件,进行数据预览和初步分析。 2. **数据预处理**:根据数据特性进行必要的转换和清洗。 3. **选择算法**:根据问题类型和需求选择合适的分类、回归或聚类算法。 4. **...
这是目前非常初步的发展。 它只是我个人需要帮助从 Scala 代码执行预测的主要分类功能的包装器。 当前的代码已经尝试通过添加更多类型安全并使代码更直接地编写代码来简化 Weka 的使用。 由于它是 Weka 功能的轻量级...