2011-08-05 30 views

Trả lời

4

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().

+0

bất kỳ ví dụ nào về cách sử dụng nó? –

+0

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'). –

+0

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? –

8

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) 

parallel_coordinates

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 
2

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.

2
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)

+0

Đ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

0

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.

0

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ũ

Các vấn đề liên quan