วิธีที่ดีที่สุดในการดำเนินการ SVM แบบหลายคลาส


18

ฉันรู้ว่า SVM เป็นตัวจําแนกไบนารี ฉันต้องการขยายไปยัง SVM แบบหลายชั้น วิธีไหนที่ดีที่สุดและอาจจะง่ายที่สุดในการดำเนินการ

รหัส: ใน 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

จะปรับปรุงได้อย่างไร?


ตัวแปรclassesทำอะไรในรหัส? ดูเหมือนว่าจะไร้ประโยชน์

คุณได้ข้อสรุปอะไรบ้าง? ฉันมีปัญหากับการทำงานของฉันถ้าคุณถึง rusult ที่เหมาะสมโปรดแบ่งปันรหัสการจำแนกประเภทของคุณที่นี่ขอบคุณ
me.rasouli

คำตอบ:


16

มีวิธีการมากมายสำหรับการจำแนกประเภทหลายคลาส สองตัวเลือกแบบคลาสสิกซึ่งไม่เฉพาะ SVM คือ:

  1. การจำแนกประเภทแบบ One-vs-all (OVA):
    สมมติว่าคุณมีคลาส A, B, C และ D แทนที่จะทำการจำแนกแบบสี่ทางให้ฝึกฝนไบนารีตัวแยกประเภทสี่แบบ: A vs. ไม่-A, B กับ not-B , C เทียบกับไม่ใช่ -C และ D เทียบกับไม่ใช่ -D จากนั้นเลือกคลาสบวกที่ "ดีที่สุด" (เช่นห่างจากระยะขอบในการวิ่งทั้งสี่ครั้ง) หากไม่มีการจำแนกประเภทที่เป็นบวก (กล่าวคือทั้งหมดนั้นไม่ใช่ X) ให้เลือก "ตรงกันข้าม" ของคลาสที่แย่ที่สุด (เช่นใกล้กับระยะขอบ)

  2. All-vs-All:
    ฝึกอบรมการจำแนกคู่ที่เป็นไปได้ทั้งหมด จัดลำดับคลาสตามปัจจัย (เช่นจำนวนครั้งที่เลือก) และเลือกที่ดีที่สุด

ซึ่งได้ผลดีที่สุดได้รับการโต้เถียง: Duan และ Keerthiมีการศึกษาเชิงประจักษ์ที่แสดงให้เห็นวิธีการแบบ all-vs-all โดยเฉพาะขณะที่Rifkin และ Klautauโต้เถียงสำหรับโครงการแบบหนึ่งต่อหนึ่ง มีรูปแบบแม้กระทั่งที่หนึ่งเรียนรู้รหัสการแก้ไขข้อผิดพลาดที่อธิบายถึงป้ายชื่อชั้นแทนที่จะเป็นป้ายชื่อตัวเอง

โชคดี!

แก้ไข: สิ่งที่คุณต้องการโดยเฉพาะอย่างยิ่งสำหรับ OVA คือความน่าจะเป็นหลังของแต่ละชั้นเรียน สำหรับวิธีการบางอย่างเช่น Naive Bayes นั้นเป็นเรื่องเล็กน้อยที่จะออกไป SVM มักจะไม่ให้ความน่าจะเป็น แต่มีวิธีการคำนวณ ดูที่เอกสารปี 1999 ของ John Platt "ผลงานน่าจะเป็นเพื่อสนับสนุน Vector Machines ... "


2
สำหรับ OVA - คุณสามารถเลือกคลาสที่มีความน่าจะเป็นมากที่สุดได้หรือไม่
B_Miner

1
ใช่นั่นคือผลที่เกิดขึ้นจริงจากกระดาษ Duan และ Keerthi พวกเขารวมความน่าจะเป็นของแพลตเข้ากับกลเม็ดการคลัปคู่ของ Hastie และได้ผลลัพธ์ที่ดี ฉันควรแก้ไขข้อความเพื่อรวมสิ่งนั้น เยี่ยมมาก B_Miner!
Matt Krause

ใน SVM คุณต้องลงคะแนนหรือรวมกำไรกันหรือไม่?
lakesh

@lakesh, One-vs-all หรือ All-vs-all เป็นเหมือนแผนการลงคะแนน หากคุณใช้ตัวแยกประเภทไบนารีคุณจะต้องทำบางอย่างเพื่อแปลงให้เป็นลักษณนามแบบหลายคลาส อีกวิธีหนึ่งคุณสามารถใช้ SVM ที่แก้ไขแล้วซึ่งอธิบายโดย carlosdc ด้านล่าง ...
Matt Krause

อะไรคือสิ่งที่?
lakesh

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.