这次我们介绍Evaluation类。在上一次中我们只是单纯的预测了分类值,并没有其他评价数据。这场我们使用Evalution类。首先初始化一个Evaluation对象,Evaluation类没有无参的构造函数,一般用Instances对象作为构造函数的参数。如果我们没有训练数据和测试数据,那么我们可以使用Cross Validation验证方式,即交叉验证。Cross ValidateModel方法的四个参数分别为,第一个是分类器,第二个是在某个数据集上评价的数据集,第三个参数是交叉检验的次数(10是比较常见的),第四个是一个随机数对象。 如果有训练集和测试集,可以使用Evaluation 类中的evaluateModel方法,方法中的参数为:第一个为一个训练过的分类器,第二个参数是在某个数据集上评价的数据集。

package InstanceTest;
import weka.core.Instances;
import weka.classifiers.trees.J48;
import weka.classifiers.Evaluation;
import java.io.*;
import java.util.Random;
public class InstanceTest {

/**
* @param args
*/
public static Instances data; //训练数据
public static Instances testData; //测试数据

//获取数据集
public Instances GetTestDate(String File,boolean flag) throws Exception
{
FileReader reader=new FileReader(File);
if(!flag)
{
testData=new Instances(reader);
return testData;
}
else
{
data=new Instances(reader);
return data;
}

}

//设置预测类别 默认为最后一个
public void SetClassIndex(Instances ins)
{
ins.setClassIndex(ins.numAttributes()-1);
}
/*
public void classify()throws Exception
{
J48 classify=new J48();
classify.buildClassifier(data);
System.out.println(classify.classifyInstance(data.instance(0)));
}
*/
public void CrossValidation()throws Exception
{
J48 classify=new J48();
Evaluation eval=new Evaluation (data);
eval.crossValidateModel(classify, data, 10, new Random(1));
System.out.println(eval.toClassDetailsString());
System.out.println(eval.toSummaryString());
System.out.println(eval.toMatrixString());
}

public void validation()throws Exception
{
J48 classify=new J48();
classify.buildClassifier(data);
Evaluation eval=new Evaluation(testData);
eval.evaluateModel(classify, testData);
System.out.println(eval.toClassDetailsString());
System.out.println(eval.toSummaryString());
System.out.println(eval.toMatrixString());
}

public static void main(String[] args) {
try
{
InstanceTest test=new InstanceTest();
test.GetTestDate("C://Program Files//Weka-3-7//data//segment-challenge.arff", true);
test.GetTestDate("C://Program Files//Weka-3-7//data//segment-test.arff", false);
test.SetClassIndex(data);
test.SetClassIndex(testData);
test.validation();
}
catch(Exception e)
{
e.printStackTrace();
}
}

}

最新文章

  1. CSS3新特性应用之字体排印
  2. html表单提交方式
  3. jquery easy ui datagrid中遇到的坑爹的問題。。。
  4. 安装生物信息学软件-MetaPhlAn2
  5. Mysql 导入数据,推荐Source命令,太快了
  6. 一元三次方程 (codevs 1038)题解
  7. 如何写mysql的定时任务
  8. HDOJ 2131 Probability
  9. net搭建热插拔式web框架(沙箱的构建)
  10. loadrunner入门篇-Controller控制器
  11. GitHub使用(三) - GitHub安装及初步使用
  12. 实战Performance Monitor监测EnyimMemcached
  13. python学习第七篇——字典访问键与值
  14. PAT基础6-3
  15. vue中富文本编辑框
  16. 解压.bz2失败
  17. 谢宝友 LINUX 内核专家-----LINUX内核注释
  18. iPhone: 在 iPhone app 里使用 UIPopoverController
  19. Android组件系列----Activity的生命周期
  20. VirtualBOX启动错误the vm session was closed before any attempt to power it on解决办法

热门文章

  1. hdu 3572 Task Schedule
  2. 项目的敏捷开发方法(转自MBAlib)
  3. chrome浏览器扩展--QQ群查看器(1)
  4. Android手势监听
  5. bp神经网络算法
  6. linux下查看机器的硬件信息:
  7. http://f.dataguru.cn/forum.php?mod=viewthread&tid=44212&fromuid=4771
  8. apache的 .htaccess文件的常用配置
  9. delphi xe3的helper语法 good
  10. Android 开发绕不过的坑:你的 Bitmap 究竟占多大内存?