如何在Weka中测试由用户输入的单个测试用例



我对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)));

    }
}

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

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)));

相关内容

最新更新