Weka开发初步.docx
- 文档编号:5403758
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:11
- 大小:17.14KB
Weka开发初步.docx
《Weka开发初步.docx》由会员分享,可在线阅读,更多相关《Weka开发初步.docx(11页珍藏版)》请在冰豆网上搜索。
Weka开发初步
Weka初步
文章分类:
JavaEye
转载自
从前年开始使用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.打印分类结果
我们现在看看一个简单的实例
Java代码
packagecom.csdn;
importjava.io.File;
importweka.classifiers.Classifier;
importweka.classifiers.Evaluation;
importweka.core.Instance;
importweka.core.Instances;
importweka.core.converters.ArffLoader;
publicclassTest{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
Instancesins=null;
Classifiercfs=null;
try{
/*
*1.读入训练、测试样本
*在此我们将训练样本和测试样本作为同一个样本
*/
Filefile=newFile("C:
\\ProgramFiles\\Weka-3-6\\data\\contact-lenses.arff");
ArffLoaderloader=newArffLoader();
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.使用测试样本测试分类器的学习效果
*在这里我们使用的训练样本和测试样本是同一个,在实际的工作中需要读入一个特定的测试样本
*/
InstancetestInst;
/*
*Evaluation:
Classforevaluatingmachinelearningmodels
*即它是用于检测分类模型的类
*/
EvaluationtestingEvaluation=newEvaluation(ins);
intlength=ins.numInstances();
for(inti=0;i testInst=ins.instance(i); //通过这个方法来用每个测试样本测试分类器的效果 testingEvaluation.evaluateModelOnceAndRecordPrediction( cfs,testInst); } /* *5.打印分类结果 *在这里我们打印了分类器的正确率 *其它的一些信息我们可以通过Evaluation对象的其它方法得到 */ System.out.println("分类器的正确率: "+(1-testingEvaluation.errorRate())); }catch(Exceptione){ e.printStackTrace(); } } } packagecom.csdn; importjava.io.File; importweka.classifiers.Classifier; importweka.classifiers.Evaluation; importweka.core.Instance; importweka.core.Instances; importweka.core.converters.ArffLoader; publicclassTest{ /** *@paramargs */ publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub Instancesins=null; Classifiercfs=null; try{ /* *1.读入训练、测试样本 *在此我们将训练样本和测试样本作为同一个样本 */ Filefile=newFile("C: \\ProgramFiles\\Weka-3-6\\data\\contact-lenses.arff"); ArffLoaderloader=newArffLoader(); 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.使用测试样本测试分类器的学习效果 *在这里我们使用的训练样本和测试样本是同一个,在实际的工作中需要读入一个特定的测试样本 */ InstancetestInst; /* *Evaluation: Classforevaluatingmachinelearningmodels *即它是用于检测分类模型的类 */ EvaluationtestingEvaluation=newEvaluation(ins); intlength=ins.numInstances(); for(inti=0;i testInst=ins.instance(i); //通过这个方法来用每个测试样本测试分类器的效果 testingEvaluation.evaluateModelOnceAndRecordPrediction( cfs,testInst); } /* *5.打印分类结果 *在这里我们打印了分类器的正确率 *其它的一些信息我们可以通过Evaluation对象的其它方法得到 */ System.out.println("分类器的正确率: "+(1-testingEvaluation.errorRate())); }catch(Exceptione){ e.printStackTrace(); } } } 通过这个实例,我们可以看到在weka上做开发非常简单的,每个模块weka都提供了很好的支持。 同时,我们可以在此基础上对weka进行一个简单的封装。 设计一个Util类,将数据读取,以及分类器测试等功能放在这个Util类中共以后其它的程序使用。 获取样本Instances Java代码 /* *从.arff文件中获取样本Instances; *1.fileNameinstances的文件名 */ publicstaticInstancesgetInstances(StringfileName)throwsException{ Filefile=newFile(fileName); returngetInstances(file); } /* *从.arff文件中获取样本Instances; *1.file获得instances的File对象 */ publicstaticInstancesgetInstances(Filefile)throwsException{ Instancesinst=null; try{ ArffLoaderloader=newArffLoader(); loader.setFile(file); inst=loader.getDataSet(); } catch(Exceptione){ thrownewException(e.getMessage()); } returninst; } 获得一个Evaluation对象: /* *获得一个Evaluation对象 *1.h一个已经训练过的分类器 *2.ins测试样本 */ publicstaticEvaluationgetEvaluation(Classifierh,Instancesins){ try{ InstancetestInst; /* *Evaluation: Classforevaluatingmachinelearningmodels *即它是用于检测分类模型的类 */ EvaluationtestingEvaluation=newEvaluation(ins); intlength=ins.numInstances(); for(inti=0;i testInst=ins.instance(i); //通过这个方法来用每个测试样本测试分类器的效果 testingEvaluation.evaluateModelOnceAndRecordPrediction( h,testInst); } returntestingEvaluation; } catch(Exceptione){ System.out.println("hahabug! "); System.out.println(e); } returnnull; } /* *从.arff文件中获取样本Instances; *1.fileNameinstances的文件名 */ publicstaticInstancesgetInstances(StringfileName)throwsException{ Filefile=newFile(fileName); returngetInstances(file); } /* *从.arff文件中获取样本Instances; *1.file获得instances的File对象 */ publicstaticInstancesgetInstances(Filefile)throwsException{ Instancesinst=null; try{ ArffLoaderloader=newArffLoader(); loader.setFile(file); inst=loader.getDataSet(); } catch(Exceptione){ thrownewException(e.getMessage()); } returninst; } 获得一个Evaluation对象: /* *获得一个Evaluation对象 *1.h一个已经训练过的分类器 *2.ins测试样本 */ publicstaticEvaluationgetEvaluation(Classifierh,Instancesins){ try{ InstancetestInst; /* *Evaluation: Classforevaluatingmachinelearningmodels *即它是用于检测分类模型的类 */ EvaluationtestingEvaluation=newEvaluation(ins); intlength=ins.numInstances(); for(inti=0;i testInst=ins.instance(i); //通过这个方法来用每个测试样本测试分类器的效果 testingEvaluation.evaluateModelOnceAndRecordPrediction( h,testInst); } returntestingEvaluation; } catch(Exceptione){ System.out.println("hahabug! "); System.out.println(e); } returnnull; } 通过这几个函数我们就将读取instances对象的功能以及测试分类器的效果的功能封装到两个static函数中了,下次我们使用的时候就可以方便的调用这个接口了,可以省去我们写这些代码的时间了。 大家明白了吗? 还是比较简单的吧。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Weka 开发 初步