Cách tốt nhất để thực hiện SVM đa kính


17

Tôi biết rằng SVM là một phân loại nhị phân. Tôi muốn mở rộng nó sang SVM nhiều lớp. Đó là cách tốt nhất và có thể là cách dễ nhất để thực hiện nó?

mã: trong MATLAB

   u=unique(TrainLabel); 
    N=length(u); 
    if(N>2)    
        itr=1;    
        classes=0;   
        while((classes~=1)&&(itr<=length(u)))   
            c1=(TrainLabel==u(itr));    
            newClass=double(c1); 
            tst = double((TestLabel == itr));
            model = svmtrain(newClass, TrainVec, '-c 1 -g 0.00154');  
            [predict_label, accuracy, dec_values] = svmpredict(tst, TestVec, model);    
            itr=itr+1;   
        end
        itr=itr-1;
    end

Làm thế nào điều này có thể được cải thiện?


Biến classeslàm gì trong mã? Nó dường như là vô dụng.

bạn đã đi đến kết luận nào chưa? Tôi có vấn đề này với công việc của tôi. Nếu bạn đã đạt đến một rusult phù hợp xin vui lòng chia sẻ mã đa phân loại của bạn ở đây. Cảm ơn.
me.rasouli

Câu trả lời:


15

Có rất nhiều phương pháp để phân loại nhiều lớp. Hai tùy chọn cổ điển, không dành riêng cho SVM là:

  1. Phân loại một so với tất cả (OVA):
    Giả sử bạn có các lớp A, B, C và D. Thay vì thực hiện phân loại bốn cách, hãy đào tạo bốn phân loại nhị phân: A so với không-A, B so với không-B , C so với không-C và D so với không-D. Sau đó, chọn một trong hai lớp tích cực là "tốt nhất" (ví dụ: xa nhất từ ​​lề trong cả bốn lần chạy). Nếu không có phân loại nào là tích cực (nghĩa là tất cả đều không phải là X), hãy chọn "đối diện" của lớp kém nhất (ví dụ: gần với lề nhất).

  2. All-vs-All:
    Huấn luyện tất cả các cặp phân loại có thể. Xếp hạng các lớp theo một số yếu tố (ví dụ: # lần được chọn) và chọn thứ tốt nhất.

Hoạt động tốt nhất đã gây tranh cãi: Duan và Keerthi có một nghiên cứu thực nghiệm cho thấy một phương pháp tất cả cụ thể, trong khi Rifkin và Klautau tranh luận về kế hoạch một đấu một. Thậm chí có những lược đồ trong đó người ta học các mã sửa lỗi mô tả các nhãn lớp, thay vì chính các nhãn đó.

Chúc may mắn!

Chỉnh sửa: Điều bạn thực sự muốn, đặc biệt đối với OVA, là xác suất sau của mỗi lớp. Đối với một số phương pháp, như Naive Bayes, đó là chuyện nhỏ để thoát ra. Các SVM thường không cung cấp cho bạn xác suất, nhưng có nhiều cách để tính toán chúng. Xem bài viết năm 1999 của John Platt "Đầu ra xác suất cho các máy vectơ hỗ trợ ..."


2
Đối với OVA - bạn có thể chọn lớp có xác suất lớn nhất (gây ra bởi tỷ lệ Platt) không?
B_Miner

1
Vâng, về cơ bản đó là kết quả của bài báo Duan và Keerthi. Họ kết hợp các chế độ của Platt với thủ thuật ghép nối theo cặp của Hastie và nhận được kết quả tốt. Tôi có lẽ nên chỉnh sửa văn bản để bao gồm đó. Bắt tốt B_Miner!
Matt Krause

trong SVM, bạn có cần phải bỏ phiếu hoặc tổng hợp không?
lakesh

@lakesh, One-vs-all hoặc All-vs-all giống như các chương trình bỏ phiếu. Nếu bạn đang sử dụng một bộ phân loại nhị phân, bạn phải làm gì đó để biến chúng thành phân loại nhiều lớp. Thay phiên, bạn có thể sử dụng SVM được sửa đổi được mô tả bởi carlosdc bên dưới ...
Matt Krause

cái gì đó
lakesh

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.