как загрузить файл формата .arff в matlab - PullRequest
6 голосов
/ 05 августа 2011

Есть ли пакет для загрузки файла формата .arff в matlab?Формат .arff используется в Weka для запуска алгоритма машинного обучения.

Ответы [ 6 ]

8 голосов
/ 05 августа 2011

Поскольку Weka является библиотекой Java , вы можете напрямую использовать предоставляемый им API для чтения файлов 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

Вы даже можете напрямую использовать его функциональность из MATLAB. Пример:

%## 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()) )

Выходное дерево решений C4.5:

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
4 голосов
/ 05 августа 2011

Да, есть несколько интерфейсов MATLAB для файлов WEKA на MATLAB File Exchange, я обычно использую этот: http://www.mathworks.com/matlabcentral/fileexchange/21204-matlab-weka-interface, где у вас есть функции saveARFF () и loadARFF ().

2 голосов
/ 02 марта 2013
M = importdata('filename.arff');

очень медленно для больших файлов, но работает (протестировано в MATLAB 2010b)

2 голосов
/ 08 февраля 2013

Если вы хотите загрузить в Matlab только файл, хранящийся в формате "arff", и вам не нужны никакие другие функции из Weka, просто удалите часть заголовка вашего файла "arff" (эти определения атрибутов) и сохраните файл в формате csv (вы должны заменить значения класса числовыми эквивалентами), а затем использовать встроенную функцию csvread в Matlab. Таким образом, нет необходимости искать сторонний пакет.

0 голосов
/ 29 ноября 2015

Если методы, упомянутые выше, не работают и требуется информация заголовка, загрузите файл arff в weka, затем выберите сохранить как параметр и сохраните данные в формате файла csv.

0 голосов
/ 05 августа 2011

Поиск в MATLAB Central File Exchange открывает некоторые возможности.В частности, результаты Дурга Лал Шреста и Джеральда Аугусто Корсо Переса выглядят многообещающе, хотя я тоже не пробовал.

...