2014-02-26 3 views
5

Ich habe versucht, Stacking-Methode weka api in Java zu verwenden und fand ein Tutorial für einzelne Klassifikator. Ich habe versucht, Stacking mit der in der Tutorial-Methode beschriebenen Methode zu implementieren, aber die Klassifizierung erfolgt mit Standard Zero Classifier in Weka.Ich konnte Meta-Classifier mit "setMetaClassifier" setzen, aber nicht in der Lage, den Basis-Classifier zu ändern. Was ist die richtige Methode zu Set-Base-Klassifikator im Stacking?Wie kann der Basisklassifikator bei Verwendung der Weka-API in der Stapelmethode angegeben werden?

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.util.Random;  
import weka.classifiers.Evaluation; 
import weka.classifiers.meta.Stacking; 
import weka.core.Instances; 
public class startweka { 
public static void main(String[] args) throws Exception{ 
BufferedReader breader=new BufferedReader(new FileReader("C:/newtrain.arff")); 
Instances train=new Instances(breader); 
train.setClassIndex(train.numAttributes()-1); 
breader.close(); 
String[] stackoptions = new String[1]; 
{ 
     stackoptions[0] = "-w weka.classifiers.functions.SMO"; 
} 
Stacking nb=new Stacking(); 
J48 j48=new J48(); 
SMO jj=new SMO(); 
nb.setMetaClassifier(j48); 
nb.buildClassifier(train); 
Evaluation eval=new Evaluation(train); 
eval.crossValidateModel(nb, train, 10, new Random(1)); 
System.out.println(eval.toSummaryString("results",true)); 
         }} 

Antwort

6

Ok ich die Antwort in anderen Foren weka nabble.The Code gefunden Basis Klassifikator für die Einstellung ist

Stacking nb=new Stacking(); 
SMO smo=new SMO(); 
Classifier[] stackoptions = new Classifier[1]; 
stackoptions[0] = smo; 
nb.setClassifiers(stackoptions); 

ODER

Stacking nb=new Stacking(); 
SMO smo=new SMO(); 
Classifier[] stackoptions = new Classifier[] {smo}; 
nb.setClassifiers(stackoptions);