2010-04-15 43 views
8

Làm cách nào để hình dung phân loại SVM khi tôi thực hiện đào tạo SVM trong Matlab?Hiển thị SVM trong MATLAB

Cho đến nay, tôi đã chỉ được đào tạo các SVM với:

% Labels are -1 or 1 
groundTruth = Ytrain; 
d = xtrain; 

model = svmtrain(groundTruth, d); 

Trả lời

0

Check-out svm-toy chức năng này tương tự như một trong LIBSVM. Rõ ràng nó chỉ hoạt động cho 2D phân loại nhị phân

7

Nếu bạn đang sử dụng LIBSVM, bạn có thể vẽ kết quả phân loại:

% Labels are -1 or 1 
groundTruth = Ytrain; 
d = xtrain; 

figure 

% plot training data 
hold on; 
pos = find(groundTruth==1); 
scatter(d(pos,1), d(pos,2), 'r') 
pos = find(groundTruth==-1); 
scatter(d(pos,1), d(pos,2), 'b') 

% now plot support vectors 
hold on; 
sv = full(model.SVs); 
plot(sv(:,1),sv(:,2),'ko'); 

% now plot decision area 
[xi,yi] = meshgrid([min(d(:,1)):0.01:max(d(:,1))],[min(d(:,2)):0.01:max(d(:,2))]); 
dd = [xi(:),yi(:)]; 
tic;[predicted_label, accuracy, decision_values] = svmpredict(zeros(size(dd,1),1), dd, model);toc 
pos = find(predicted_label==1); 
hold on; 
redcolor = [1 0.8 0.8]; 
bluecolor = [0.8 0.8 1]; 
h1 = plot(dd(pos,1),dd(pos,2),'s','color',redcolor,'MarkerSize',10,'MarkerEdgeColor',redcolor,'MarkerFaceColor',redcolor); 
pos = find(predicted_label==-1); 
hold on; 
h2 = plot(dd(pos,1),dd(pos,2),'s','color',bluecolor,'MarkerSize',10,'MarkerEdgeColor',bluecolor,'MarkerFaceColor',bluecolor); 
uistack(h1, 'bottom'); 
uistack(h2, 'bottom'); 
+0

'dd' là một lưới trong phạm vi của các tính năng của dữ liệu đào tạo. – Wok

2

Giả sử dữ liệu của bạn có hơn hai chiều, bạn có thể thực hiện một PCA, dự án dữ liệu 2D, sau đó gán cho chúng một màu theo đầu ra của bộ phân loại svm của bạn (ví dụ, màu đỏ cho lớp A, màu xanh cho lớp B). Điều này là nhanh chóng để làm và bạn sẽ thấy nếu có bất cứ điều gì để hình dung. Tuy nhiên, dữ liệu có chiều cao cao không có khả năng dễ dàng hiển thị trong 2D.

+0

Bạn có ý gì khi _performing PCA_? Tôi có thể làm điều đó không? Bạn sẽ giải thích thêm một chút được không? Tôi muốn hình dung phân loại svm trên tập dữ liệu FisherIris (sử dụng libsvm). Nếu tôi đúng là 4D –

+0

Thành thật mà nói, nếu bạn thậm chí không biết PCA là gì (viết tắt của phân tích thành phần chính), có thể bạn sẽ cuối cùng dành quá nhiều thời gian cho kết quả cuối cùng. Nó không tầm thường. Tôi hiểu rằng sẽ rất thú vị khi hình dung ranh giới quyết định, nhưng bạn có thể muốn xem xét các chiến lược khác nhau để phân tích hành vi của SVM của bạn. Chính xác là bạn đang cố đạt được điều gì? – levesque

+0

Cuối cùng, tôi quyết định sử dụng [stprtool] (http://cmp.felk.cvut.cz/cmp/software/stprtool/) thay vì libsvm để có được lựa chọn vẽ đồ thị ranh giới quyết định. Nó hoạt động rất tốt. Cảm ơn bạn đã trả lời –

-1
model = svmtrain(groundTruth, d, 'ShowPlot', true); 
+1

Bạn có thể thêm một chút giải thích thêm nữa không, bằng bất kỳ cơ hội nào .... –

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