2012-06-04 4 views
1

Je WEKA, je suis tombé sur le code suivant:WEKA méthode Instance.ClassAttribute()

Instances train = DataSource.read(args[0]); 
train.setClassIndex(train.numAttributes() - 1); 
Instances test = DataSource.read(args[1]); 
test.setClassIndex(test.numAttributes() - 1); 
// train classifier 
J48 cls = new J48(); 
cls.buildClassifier(train); 
// output predictions 
System.out.println("# - actual - predicted - distribution"); 
for (int i = 0; i < test.numInstances(); i++) { 
    double pred = cls.classifyInstance(test.instance(i)); 
    double[] dist = cls.distributionForInstance(test.instance(i)); 
    System.out.print((i+1) + " - "); 
    System.out.print(test.instance(i).toString(test.classIndex()) + " - "); 
    System.out.print(test.classAttribute().value((int) pred) + " - "); 
    System.out.println(Utils.arrayToString(dist)); 
} 

L'objectif est de lancer ici un classificateur pré-construit sur un ensemble de test de données, puis pour imprimer la classe réelle, classe prédite et distribution de la valeur d'appartenance à la classe. Je comprends tout sauf une ligne:

System.out.print(test.classAttribute().value((int) pred) + " - "); 

Si « test » est un groupe de cas, comment la déclaration ci-dessus pouvoir imprimer la valeur de classe prédite pour l'instance actuelle à l'intérieur de la boucle?

Merci Abhishek S

Répondre

1

Je pense que test.classAttribute() vous donne toutes les classes qui pourraient être affectés les instances de test à. La deuxième partie .value((int) pred) sélectionne ensuite la classe de ce groupe qui correspond à pred, qui est la classe prédite pour l'instance de test en cours.

+0

Brillant! Merci. –