zoukankan      html  css  js  c++  java
  • Weka 入门3

    这次我们介绍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();
    }
    }

    }

    从菜鸟走向大神,这是道路。
  • 相关阅读:
    node express 上传文件
    [Java] 对象转型-01
    [Java] 类的Equals方法 (String, Data类都已经自动重写)
    editor does not contain a main type" 错误解决方
    Ubuntu网络连接图标消失解决方法
    [面试] 从尾到头打印链表-递归实现
    C++继承的例子 (1)
    国内访问gmail
    [python] 第7章 函数 第8章 模块
    Devcpp(Dev C++)使用说明及技巧
  • 原文地址:https://www.cnblogs.com/GuoJiaSheng/p/3833143.html
Copyright © 2011-2022 走看看