ช่วยฉันเข้าใจ Support Vector Machines


76

ฉันเข้าใจพื้นฐานของจุดมุ่งหมายของเครื่องเวกเตอร์สนับสนุนในแง่ของการจำแนกอินพุตที่กำหนดเป็นคลาสที่แตกต่างกันหลายอย่าง แต่สิ่งที่ฉันไม่เข้าใจคือรายละเอียดบางอย่างที่น่าสนใจ สำหรับผู้เริ่มฉันสับสนเล็กน้อยจากการใช้ตัวแปรสแลค วัตถุประสงค์ของพวกเขาคืออะไร?

ฉันกำลังทำปัญหาการจำแนกประเภทที่ฉันได้อ่านค่าความดันจากเซ็นเซอร์ที่ฉันวางไว้บนพื้นรองเท้าของรองเท้า ตัวแบบจะนั่งยืนและเดินเป็นเวลาสองสามนาทีในขณะที่ข้อมูลความดันถูกบันทึก ฉันต้องการฝึกฝนตัวจําแนกเพื่อให้สามารถระบุได้ว่าบุคคลนั้นกำลังนั่งยืนหรือเดินและสามารถทำสิ่งนั้นสำหรับข้อมูลการทดสอบในอนาคต ฉันต้องลองตัวจําแนกประเภทใด วิธีที่ดีที่สุดสำหรับฉันในการฝึกอบรมตัวจําแนกจากข้อมูลที่ฉันจับคืออะไร? ฉันมี 1,000 รายการสำหรับการนั่งยืนและเดิน (รวม 3x1000 = 3000) และพวกเขาทั้งหมดมีรูปแบบเวกเตอร์คุณลักษณะต่อไปนี้ (pressurefromsensor1, pressurefromsensor2, pressurefromsensor3, pressurefromsensor4)


ดูเพิ่มเติมที่: stats.stackexchange.com/questions/23391/…

คำตอบ:


103

ฉันคิดว่าคุณกำลังพยายามที่จะเริ่มต้นจากจุดจบที่เลวร้าย สิ่งที่ควรรู้เกี่ยวกับ SVM เพื่อใช้เป็นเพียงแค่ว่าอัลกอริทึมนี้กำลังค้นหาไฮเปอร์เพลนในไฮเปอร์สเปซของคุณลักษณะที่แยกสองคลาสที่ดีที่สุดโดยวิธีที่ดีที่สุดที่มีระยะห่างระหว่างคลาสมากที่สุด เบลอภาพรวม) ดังภาพที่มีชื่อเสียงเช่นนี้: ข้อความแสดงแทน

ตอนนี้มีปัญหาบางอย่างเหลืออยู่
ก่อนอื่นคุณจะทำอย่างไรกับคนผิดปกติที่น่ารังเกียจอย่างไร้ยางอายในจุดศูนย์กลางของจุดต่าง ๆ ในกลุ่มเมฆ?
ข้อความแสดงแทน
ด้วยเหตุนี้เราจึงอนุญาตให้เครื่องมือเพิ่มประสิทธิภาพปล่อยตัวอย่างผิดไป แต่ยังลงโทษตัวอย่างแต่ละตัวอย่าง เพื่อหลีกเลี่ยงการใช้คำสั่งหลายคำสั่งบทลงโทษสำหรับคดี mislabelled จะถูกรวมเข้ากับขนาดมาร์จิ้นด้วยการใช้พารามิเตอร์เพิ่มเติม C ซึ่งควบคุมความสมดุลระหว่างจุดมุ่งหมายเหล่านั้น
ถัดไปบางครั้งปัญหาไม่ได้เป็นเชิงเส้นและไม่พบไฮเปอร์เพลนที่ดี ที่นี่เราแนะนำเคล็ดลับเคอร์เนล - เราแค่ฉายพื้นที่ดั้งเดิมที่ไม่ใช่เชิงเส้นไปยังมิติที่สูงกว่าด้วยการแปลงแบบไม่เชิงเส้นแน่นอนที่กำหนดโดยพารามิเตอร์เพิ่มเติมจำนวนมากโดยหวังว่าในพื้นที่ที่เกิดปัญหาจะเหมาะสำหรับธรรมดา SVM:

ข้อความแสดงแทน

อีกครั้งด้วยคณิตศาสตร์และเราสามารถเห็นได้ว่ากระบวนการเปลี่ยนแปลงทั้งหมดนี้สามารถถูกซ่อนไว้อย่างงดงามโดยการแก้ไขฟังก์ชั่นวัตถุประสงค์โดยการแทนที่จุดผลิตภัณฑ์ของวัตถุด้วยฟังก์ชันเคอร์เนลที่เรียกว่า
ในที่สุดทั้งหมดนี้ใช้งานได้ 2 คลาสและคุณมี 3; จะทำอย่างไรกับมัน? ที่นี่เราสร้างตัวแยกประเภท 2 ระดับ 3 แบบ (การนั่ง - แบบไม่มีการยืน, แบบไม่มีการยืน, แบบไม่มีทางเดิน - ไม่เดิน) และในการจัดหมวดหมู่จะรวมการลงคะแนน

ตกลงดังนั้นปัญหาดูเหมือนจะได้รับการแก้ไข แต่เราต้องเลือกเคอร์เนล (ที่นี่เราปรึกษากับสัญชาตญาณของเราและเลือก RBF) และพอดีกับพารามิเตอร์น้อย (C + เคอร์เนล) และเราจะต้องมีฟังก์ชั่นวัตถุประสงค์ที่ปลอดภัยมากเกินไปสำหรับมันเช่นการประมาณข้อผิดพลาดจากการตรวจสอบข้าม ดังนั้นเราปล่อยให้คอมพิวเตอร์ทำงานต่อไปแล้วไปหากาแฟกลับมาแล้วดูว่ามีพารามิเตอร์ที่เหมาะสมที่สุด ที่ดี! ตอนนี้เราเพิ่งเริ่มการตรวจสอบข้ามแบบซ้อนกันเพื่อให้เกิดข้อผิดพลาดและ voila

เวิร์กโฟลว์สั้น ๆ นี้เป็นหลักสูตรที่ง่ายเกินไปที่จะถูกต้องครบถ้วน แต่แสดงเหตุผลว่าทำไมฉันคิดว่าคุณควรลองใช้ฟอเรสต์แบบสุ่มซึ่งเกือบจะเป็นพารามิเตอร์ที่ไม่ขึ้นกับคลาสหลายตัว .


5
(+1) ยอดเยี่ยมที่คุณเพิ่มรูปภาพเพื่ออธิบายสิ่งทั้งหมด!
chl

3
@mbq เนื่องจากคุณดูเหมือนเก่งใน SVM ฉันขอให้คุณชี้แจงข้อสงสัยของฉัน: เมื่อเราพบไฮเปอร์เพลตที่แยกได้ดีที่สุดแล้วเราจะใช้มันเพื่ออะไร? เราสามารถกำหนด SVM เป็นวิธีที่แรกเลือกไฮเปอร์เพลนที่ดีที่สุดในการจำแนกจุดข้อมูลอย่างถูกต้องและประการที่สองมันใช้ไฮเปอร์เพลนนี้เพื่อตัดจุดข้อมูลใหม่ในสองคลาส ขวา? (ฉันสงสัยบางอย่างในส่วนที่สอง)
DavideChicco.it

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