【问题标题】:How to test a single test case in Weka, entered by a User?如何在 Weka 中测试用户输入的单个测试用例?
【发布时间】:2016-01-20 07:48:38
【问题描述】:

我对 Weka 还很陌生。 我正在编写一个代码,其中我构建了一个 J48 来预测学生成绩的结果。 现在我尝试使用 ARFF 文件测试模型,但我想实现用户输入的测试用例的分类。 例如。我希望用户输入两个数值,它们是在两个科目(即 CS 和数学)中获得的分数,然后预测他们的最终结果,即通过或失败。结果将是类变量。

我不知道如何创建一个实例来执行这样的事情

double pred = tree.ClassifyInstance(testcase);      

这是我的代码。

import java.security.KeyStore;
import weka.classifiers.Classifier;
import weka.classifiers.Evaluation;
import weka.classifiers.trees.J48;
import weka.core.Attribute;
import weka.core.FastVector;
import weka.core.Instance;
import weka.core.Instances;
import weka.core.Utils;
import weka.core.converters.ConverterUtils.DataSource;

public class WekaTest {
    public static void main (String[] args) throws Exception
    {
        //load the train set
        DataSource source = new DataSource("train.arff");
        Instances train = source.getDataSet();
        //Set class variable i.e. Outcome
        train.setClassIndex(train.numAttributes()- 1);

        Classifier tree = new J48();
        tree.buildClassifier(train);
       // Instance test = new Instance();
       // Evaluation eval = new Evaluation(train);

     Attribute COMS1000 = new Attribute("COMS1000");
     Attribute MATH1001 = new Attribute("MATH1001");

        FastVector classVal = new FastVector(2);
        classVal.addElement("PASS");
        classVal.addElement("FAIL");


        FastVector testAttributes = new FastVector(3);

        testAttributes.addElement(COMS1000);
        testAttributes.addElement(MATH1001);
        testAttributes.addElement(classVal);

      Instance testcase  = new Instance(3);
        //testcase.setClassIndex(testcase.numAttributes()-1);

        testcase.setValue((Attribute)testAttributes.elementAt(0),60);
        testcase.setValue((Attribute)testAttributes.elementAt(1),70);
        testcase.setValue((Attribute)testAttributes.elementAt(2),"?");

        double pred = tree.classifyInstance(testcase)

         System.out.println(pred.value(Double.toString(pred)));



    }

}

【问题讨论】:

    标签: java weka


    【解决方案1】:

    这样的东西应该适合你,基本上我们创建一个新实例并使用扫描仪为新实例获取用户输入(我还没有测试过,让我知道它是否有效或是否有任何问题) :

    double a, b;
    Scanner s = new Scanner(System.in);
    System.out.println("Please enter marks:");
    a = s.nextDouble();
    b = s.nextDouble();
    
    Instance inst = new DenseInstance(3); 
    
    inst.setValue(COMS1000, a); 
    inst.setValue(MATH1001, b); 
    inst.setClassMissing();
    
    inst.setDataset(source); 
    
    double pred = tree.classifyInstance(inst);
    System.out.println(pred.value(Double.toString(pred)));
    

    【讨论】:

    • 非常感谢。我确实使用了您提供的一些代码。只是不是输出预测的方式。而且我必须将实例添加到数据集中。它可能只是一个空数据集,但它确实有效。
    猜你喜欢
    • 2012-05-25
    • 2012-03-30
    • 2017-04-26
    • 1970-01-01
    • 2013-04-17
    • 2021-10-20
    • 2016-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多