tutorial trabajar seleccion proyectos lmt español datos con como balanceo atributos algoritmo java validation machine-learning weka decision-tree

trabajar - weka java



Cómo imprimir la clase predicha después de la validación cruzada en WEKA (3)

Una vez que se realiza una validación cruzada de 10 veces con un clasificador, ¿cómo puedo imprimir la clase predicha de cada instancia y la distribución de estas instancias?

J48 j48 = new J48(); Evaluation eval = new Evaluation(newData); eval.crossValidateModel(j48, newData, 10, new Random(1));

Cuando probé algo similar a lo de abajo, decía que el clasificador no está construido .

for (int i=0; i<data.numInstances(); i++){ System.out.println(j48.distributionForInstance(newData.instance(i))); }

Lo que intento hacer es la misma función que en WEKA GUI, donde una vez que un clasificador está entrenado, puedo hacer clic en Visualize classifier error" > Save y encontraré la clase predicha en el archivo. Pero ahora lo necesito para trabajar en mi propio código Java.

He intentado algo como a continuación:

J48 j48 = new J48(); Evaluation eval = new Evaluation(newData); StringBuffer forPredictionsPrinting = new StringBuffer(); weka.core.Range attsToOutput = null; Boolean outputDistribution = new Boolean(true); eval.crossValidateModel(j48, newData, 10, new Random(1), forPredictionsPrinting, attsToOutput, outputDistribution);

Sin embargo, me incita el error:

Exception in thread "main" java.lang.ClassCastException: java.lang.StringBuffer cannot be cast to weka.classifiers.evaluation.output.prediction.AbstractOutput


El método crossValidateModel() puede tomar un parámetro forPredictionsPrinting varargs que es una instancia de weka.classifiers.evaluation.output.prediction.AbstractOutput .

La parte importante de eso es un StringBuffer para contener una representación de cadena de todas las predicciones. El siguiente código está en JRuby no probado, pero debería poder convertirlo para sus necesidades.

j48 = j48.new eval = Evalution.new(newData) predictions = java.lange.StringBuffer.new eval.crossValidateModel(j48, newData, 10, Random.new(1), predictions, Range.new(''1''), true) # variable predictions now hold a string of all the individual predictions


Estuve atascado hace algunos días. Quería evaluar un clasificador Weka en matlab usando una matriz en lugar de cargar desde un archivo arff. Uso http://www.mathworks.com/matlabcentral/fileexchange/21204-matlab-weka-interface y el siguiente código fuente. Espero que esto ayude a alguien más.

import weka.classifiers.*; import java.util.* wekaClassifier = javaObject(''weka.classifiers.trees.J48''); wekaClassifier.buildClassifier(processed);%Loaded from loadARFF e = javaObject(''weka.classifiers.Evaluation'',processed);%Loaded from loadARFF myrand = Random(1); plainText = javaObject(''weka.classifiers.evaluation.output.prediction.PlainText''); buffer = javaObject(''java.lang.StringBuffer''); plainText.setBuffer(buffer) bool = javaObject(''java.lang.Boolean'',true); range = javaObject(''weka.core.Range'',''1''); array = javaArray(''java.lang.Object'',3); array(1) = plainText; array(2) = range; array(3) = bool; e.crossValidateModel(wekaClassifier,testing,10,myrand,array) e.toClassDetailsString

Asdrúbal López-Chau


clc clear %Load from disk fileDataset = ''cm1.arff''; myPath = ''C:/Users/Asdrubal/Google Drive/Respaldo/DoctoradoALCPC/Doctorado ALC PC/AlcMobile/AvTh/MyPapers/Papers2014/UnderOverSampling/data/Skewed/datasetsKeel/'; javaaddpath(''C:/Users/Asdrubal/Google Drive/Respaldo/DoctoradoALCPC/Doctorado ALC PC/AlcMobile/JarsForExperiments/weka.jar''); wekaOBJ = loadARFF([myPath fileDataset]); %Transform from data into Matlab [data, featureNames, targetNDX, stringVals, relationName] = ... weka2matlab(wekaOBJ,''[]''); %Create testing and training sets in matlab format (this can be improved) [tam, dim] = size(data); idx = randperm(tam); testIdx = idx(1 : tam*0.3); trainIdx = idx(tam*0.3 + 1:end); trainSet = data(trainIdx,:); testSet = data(testIdx,:); %Trasnform the training and the testing sets into the Weka format testingWeka = matlab2weka(''testing'', featureNames, testSet); trainingWeka = matlab2weka(''training'', featureNames, trainSet); %Now evaluate classifier import weka.classifiers.*; import java.util.* wekaClassifier = javaObject(''weka.classifiers.trees.J48''); wekaClassifier.buildClassifier(trainingWeka); e = javaObject(''weka.classifiers.Evaluation'',trainingWeka); myrand = Random(1); plainText = javaObject(''weka.classifiers.evaluation.output.prediction.PlainText''); buffer = javaObject(''java.lang.StringBuffer''); plainText.setBuffer(buffer) bool = javaObject(''java.lang.Boolean'',true); range = javaObject(''weka.core.Range'',''1''); array = javaArray(''java.lang.Object'',3); array(1) = plainText; array(2) = range; array(3) = bool; e.crossValidateModel(wekaClassifier,testingWeka,10,myrand,array)%U e.toClassDetailsString