2015-10-21 3 views
0

Я довольно новичок в Weka. Я делаю код, где я построил J48 для прогнозирования результатов результатов учащихся. Теперь я попытался проверить модель с использованием файла ARFF, но хочу получить классификацию тестового примера, введенного пользователем. . Я хочу, чтобы пользователь вводил два числовых значения, которые являются метками, полученными двумя субъектами, то есть CS и Maths, а затем прогнозируют их конечный результат, то есть PASS или FAIL. Результатом будет переменная класса.Как протестировать один тестовый пример в Weka, введенный пользователем?

я не знаю, как создать экземпляр для выполнения что-то вроде этого

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



    } 

} 

ответ

0

Что-то, как это должно работать для вас, в основном мы создаем новый экземпляр и использовать сканер, чтобы принимать пользовательский ввод для нового экземпляра (я не проверить это, дайте мне знать, если он работает или если любые проблемы):

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

Большое спасибо. Я использовал некоторый код, который вы предоставили. Только не способ вывода прогноза. И мне пришлось добавить экземпляр в набор данных. Это может быть пустой набор данных, и он сработал. – kartiksandlesh

Смежные вопросы