2011-08-05 17 views

Odpowiedz

4

Tak, istnieje kilka interfejsów MATLAB dla plików WEKA na MATLAB File Exchange, zwykle używam tego: http://www.mathworks.com/matlabcentral/fileexchange/21204-matlab-weka-interface, gdzie masz funkcje saveARFF() i loadARFF().

+0

wszelkie przykłady na temat sposobu użycia? –

+0

Po rozpakowaniu plików wymiany plików do katalogu roboczego można użyć metody loadARFF w następujący sposób: data = loadARFF ("myfile.arf"). –

+0

Wystąpił błąd, ale sprawdzę ponownie. Rozpakowałem go i dodałem folder z podfolderami na ścieżce, klikając przycisk "ustaw ścieżkę". Czy to jest poprawne? Czy muszę zrobić cokolwiek innego, aby zaimportować zestaw narzędzi? –

8

Od Weka is a Java library można bezpośrednio użyć API to naraża odczytać pliki ARFF:

%## paths 
WEKA_HOME = 'C:\Program Files\Weka-3-7'; 
javaaddpath([WEKA_HOME '\weka.jar']); 
fName = [WEKA_HOME '\data\iris.arff']; 

%## read file 
loader = weka.core.converters.ArffLoader(); 
loader.setFile(java.io.File(fName)); 
D = loader.getDataSet(); 
D.setClassIndex(D.numAttributes()-1); 

%## dataset 
relationName = char(D.relationName); 
numAttr = D.numAttributes; 
numInst = D.numInstances; 

%## attributes 
%# attribute names 
attributeNames = arrayfun(@(k) char(D.attribute(k).name), 0:numAttr-1, 'Uni',false); 

%# attribute types 
types = {'numeric' 'nominal' 'string' 'date' 'relational'}; 
attributeTypes = arrayfun(@(k) D.attribute(k-1).type, 1:numAttr); 
attributeTypes = types(attributeTypes+1); 

%# nominal attribute values 
nominalValues = cell(numAttr,1); 
for i=1:numAttr 
    if strcmpi(attributeTypes{i},'nominal') 
     nominalValues{i} = arrayfun(@(k) char(D.attribute(i-1).value(k-1)), 1:D.attribute(i-1).numValues, 'Uni',false); 
    end 
end 

%## instances 
data = zeros(numInst,numAttr); 
for i=1:numAttr 
    data(:,i) = D.attributeToDoubleArray(i-1); 
end 

%## visualize data 
parallelcoords(data(:,1:end-1), ... 
    'Group',nominalValues{end}(data(:,end)+1), ... 
    'Labels',attributeNames(1:end-1)) 
title(relationName) 

parallel_coordinates

nawet bezpośrednio można użyć jego funkcjonalności z MATLAB. Przykład:

%## classification 
classifier = weka.classifiers.trees.J48(); 
classifier.buildClassifier(D); 
fprintf('Classifier: %s %s\n%s', ... 
    char(classifier.getClass().getName()), ... 
    char(weka.core.Utils.joinOptions(classifier.getOptions())), ... 
    char(classifier.toString())) 

Drzewo decyzyjne C4.5 wyjściowa:

Classifier: weka.classifiers.trees.J48 -C 0.25 -M 2 
J48 pruned tree 
------------------ 

petalwidth <= 0.6: Iris-setosa (50.0) 
petalwidth > 0.6 
| petalwidth <= 1.7 
| | petallength <= 4.9: Iris-versicolor (48.0/1.0) 
| | petallength > 4.9 
| | | petalwidth <= 1.5: Iris-virginica (3.0) 
| | | petalwidth > 1.5: Iris-versicolor (3.0/1.0) 
| petalwidth > 1.7: Iris-virginica (46.0/1.0) 

Number of Leaves :  5 

Size of the tree : 9 
2

Jeśli chcesz tylko załadować plik zapisany w formacie „arff” w Matlab, i nie potrzebują żadnych innych funkcji od Weka, po prostu usuń część nagłówkową pliku "arff" (te definicje atrybutów) i zapisz plik w formacie csv (powinieneś zastąpić wartości klas odpowiednikami numerycznymi), a następnie użyj wbudowanej funkcji "csvread" z Matlab. W ten sposób nie ma potrzeby szukania paczki trzeciej.

2
M = importdata('filename.arff'); 

bardzo powolne dla dużych plików, ale działa (testowane w Matlab 2010b)

+0

Trudno w to uwierzyć, ponieważ dokumentacja matlab http://www.mathworks.com/help/matlab/import_export/supported-file-formats.html nie wywołuje arff. O ile matlab 'importdata' nie zrzuci wszystkich informacji nagłówka/atrybutu? – John

0

Jeżeli metody wymienione powyżej nie działają, i jest wymagany nagłówek, załaduj plik arff w WEKA, a następnie wybierz zapisz jako opcję i zapisz dane, używając formatu pliku csv.

0

Po prostu usuń wszystkie wiersze z "@" na początku arff, a następnie zapisz w formacie .txt, po tym wszystkim, co musisz zrobić, to przeciągnąć go do obszaru roboczego lub nawet zaimportować. to działa dla mnie za każdym razem Pozdrawiam

Powiązane problemy