Có gói nào để tải tệp định dạng .arff vào MATLAB không? Định dạng .arff được sử dụng trong Weka để chạy thuật toán học máy.cách tải tệp định dạng .arff vào MATLAB
Trả lời
Có, có một vài giao diện MATLAB cho các tệp WEKA trên Trao đổi tệp MATLAB, tôi thường sử dụng tệp này: http://www.mathworks.com/matlabcentral/fileexchange/21204-matlab-weka-interface nơi bạn có hàm saveARFF() và loadARFF().
Searching the MATLAB Central File Exchange cho thấy một số khả năng. Đặc biệt, các kết quả từ Durga Lal Shrestha và Gerald Augusto Corzo Perez trông đầy hứa hẹn, mặc dù tôi chưa thử.
Kể từ Weka is a Java library, bạn có thể trực tiếp sử dụng API nó cho thấy để đọc file 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)
Bạn thậm chí có thể trực tiếp sử dụng chức năng của nó từ MATLAB. Một ví dụ:
%## 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()))
Cây ra quyết định 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
Nếu bạn chỉ muốn tải một tập tin được lưu trữ ở định dạng "arff" vào Matlab, và không cần bất kỳ chức năng khác từ Weka, chỉ cần xóa phần tiêu đề của tệp "arff" (định nghĩa thuộc tính) và lưu tệp dưới dạng định dạng csv (bạn nên thay thế giá trị lớp bằng số tương đương) và sau đó sử dụng hàm "csvread" được tích hợp sẵn của Matlab. Bằng cách này, không cần phải tìm gói bên thứ ba.
M = importdata('filename.arff');
rất chậm cho các tập tin lớn, nhưng nó hoạt động (thử nghiệm trong MATLAB 2010b)
Điều này khó tin, vì tài liệu về MATLAB là http://www.mathworks.com/help/matlab/import_export/supported-file-formats.html không gọi ra arff. Trừ khi 'importdata' của MATLAB kết xuất tất cả thông tin tiêu đề/thuộc tính? – John
Nếu các phương pháp nêu trên không làm việc, và thông tin tiêu đề là cần thiết, tải các tập tin arff trong WEKA, sau đó chọn lưu dưới dạng tùy chọn và lưu dữ liệu bằng định dạng tệp csv.
Chỉ cần xóa tất cả các dòng bằng "@" khi bắt đầu arff, sau đó lưu nó ở định dạng .txt, sau tất cả những gì bạn phải làm là kéo nó vào không gian làm việc hoặc thậm chí nhập nó. nó hoạt động cho tôi mỗi khi cổ vũ
bất kỳ ví dụ nào về cách sử dụng nó? –
Nếu bạn giải nén các tập tin fileexchange vào thư mục làm việc của bạn, bạn có thể sử dụng loadARFF theo cách này: data = loadARFF ('myfile.arf'). –
Tôi gặp lỗi nhưng tôi sẽ kiểm tra lại. Tôi đã giải nén nó và thêm thư mục với các thư mục con trong đường dẫn, bằng cách nhấn vào nút "set path". Nó có đúng không? Tôi có phải làm gì khác để nhập bộ công cụ không? –