필터 지우기
필터 지우기

Can somebody help me with calling weka algorithms in matlab?

조회 수: 3 (최근 30일)
Aleksandar Petrov
Aleksandar Petrov 2014년 9월 26일
편집: Walter Roberson 2016년 3월 4일
Hello,
I'm working on machine learning techniques and instead of using WEKA workbench, I want to use the same algorithms but integrate in Matlab. the first step, creating a classifier and classifying an unknown instances I can do it in matlab but i'm facing with problem in extracting the parameters such as number of correctly classified instances, confusion matrix and so on. here's the way how I do it:
%%%include jar libraries to matlab environment:
javaaddpath('C:\Program Files\MATLAB\R2011a\java\jar\weka.jar');
%%%importing of classes
import java.util.Enumeration
import java.lang.String
import weka.classifiers.Classifier
import weka.classifiers.Evaluation
import weka.classifiers.trees.J48
import java.io.FileReader
import weka.core.Instances
import weka.core.Utils
import weka.core.Attribute
import java.lang.System
%%%Reading and configuring treaining set
reader = javaObject('java.io.FileReader','TrainSetOfInstances.arff');
dataset = javaObject('weka.core.Instances',reader);
dataset.setClassIndex(dataset.numAttributes() - 1);
%%%Reading and Configuring testing set (in case we want to perform train/test evaluation)
reader1 = javaObject('java.io.FileReader','TestSetOfInstances.arff');
testset = javaObject('weka.core.Instances',reader1);
testset.setClassIndex(testset.numAttributes() - 1);
%%%getting the parameters of an arff file
relationName = char(dataset.relationName);
numAttr = dataset.numAttributes;
numInst = dataset.numInstances;
%%%creating an object of class J48 and setup the default options
classifier = javaObject('weka.classifiers.trees.J48');
classifier.setOptions(weka.core.Utils.splitOptions('-c last -C 0.25 -M 2'));
%%%string for setting the options
v1 = String('-t');
v2 = String('TrainSetOfInstances.arff');
v3 = String('-x'); %%%if we want cross-validation
v4 = String('10'); %%%with number of folds
options = cat(1,v1,v2,v3,v4);
%%%Creation of classifier Model
classifier.buildClassifier(dataset);
%%%evaluation of the Classifier with options
weka.classifiers.Evaluation.evaluateModel(classifier,options)
%%%creating an object containing the evaluations
eval = weka.classifiers.Evaluation(dataset);
eval.evaluateModel(classifier, options1);
%%%this part works properly
%%%printing the parameters of the evaluation
fprintf('=== Run information ===\n\n')
fprintf('Scheme: %s %s\n', ...
char(classifier.getClass().getName()), ...
char(weka.core.Utils.joinOptions(classifier.getOptions())) )
fprintf('Relation: %s\n', char(dataset.relationName))
fprintf('Instances: %d\n', dataset.numInstances)
fprintf('Attributes: %d\n\n', dataset.numAttributes)
%%%this part works properly
fprintf('=== Classifier model ===\n\n')
disp( char(classifier.toString()) )
%%%this part works properly
fprintf('=== Summary ===\n')
disp( char(eval.toSummaryString()) )
disp( char(eval.toClassDetailsString()) )
disp( char(eval.toMatrixString()) )
%%%This part does not work properly, all of the time I get zeros and dont know why!
So, my problem is, when I run the evaluation command:
%%%evaluation of the Classifier with options
weka.classifiers.Evaluation.evaluateModel(classifier,options)
in the command line I get the classification tree, evaluation model, confusion matrix and all others statistics that I get in weka workbench but when I try to extract them using following methods: toSummaryString(), toClassDetailsString() or toMatrixString() I get only zeros!
So, can someone tell me what I don't do or what I do wrong?
Thanks
  댓글 수: 2
Asdrubal Lopez Chau
Asdrubal Lopez Chau 2014년 12월 19일
Hi Aleksandar Petrov, maybe this can help you
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
alisha murugesh
alisha murugesh 2016년 3월 4일
%%%creating an object containing the evaluations
eval = weka.classifiers.Evaluation(dataset);
eval.evaluateModel(classifier, options1);
I tried executing the above code, and I have a doubt in the above snippet, is it supposed to be 'options1' ,should'nt it be options, however when I change it to 'options'
This is the error I get
Java exception occurred: java.lang.Exception: Weka exception: No training file and no object input file given.

댓글을 달려면 로그인하십시오.

답변 (1개)

Stalin Samuel
Stalin Samuel 2014년 12월 19일

카테고리

Help CenterFile Exchange에서 Statistics and Machine Learning Toolbox에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by