ทดสอบการแยกเชิงเส้น


20

มีวิธีทดสอบการแยกเชิงเส้นของชุดข้อมูลสองระดับในมิติที่สูงหรือไม่? คุณสมบัติเวคเตอร์ของฉันมีความยาว 40

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


2
ดูได้ที่นี่:
603

มันมีประโยชน์ในการพล็อตการแบ่งแยก: x = คะแนนที่ไม่ถูกจัดประเภทปกติถึงระนาบการแยก, y = การสูญเสียสะสม (x) (สำหรับพล็อตตัวอย่างลองคำถามใหม่ด้วยแท็ก svm และ data-visualization)
denis

ปัญหาเกี่ยวกับ 3 ชั้นเรียนคืออะไร? ปัญหาในชั้นเรียนทั้งหมด 3+ นั้นไม่ใช่เชิงเส้นหรือไม่?
Rosy

คำตอบ:


3

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

คุณสามารถใช้ SVM ด้วยวิธีการค้นหาสำหรับการเลือกคุณสมบัติ (รุ่น wrapper) และลองดูว่าคุณสมบัติใด ๆ ของคุณสามารถแบ่งชั้นเรียนที่คุณมีอยู่เป็นเส้นตรงได้หรือไม่

มีเครื่องมือที่น่าสนใจมากสำหรับการใช้ SVM รวมทั้งLIBSVM , MSVMPackและScikit เรียนรู้ SVM


1
+1 มันเกือบจะเหมือนกับว่า Nik กำลังบรรยายถึง SVM โดยที่ไม่เคยได้ยินพวกเขา ใน R คุณสามารถใช้e1071แพคเกจ(ชื่อลึกลับ) svmด้วยkernel="linear"และดูการทำนายเมื่อเทียบกับที่เกิดขึ้นจริง
Wayne

1
ฉันรู้เกี่ยวกับ SVM เพียงแค่ฉันไม่รู้ว่าฉันสามารถใช้พวกเขาสำหรับการทดสอบการแยกเชิงเส้นได้โดยไม่ต้องจำแนกตัวอย่างแต่ละตัวอย่าง
Nik

4
@Wayne: Nik ไม่ได้ขอ SVM ฉันอธิบายในคำตอบของฉันว่าทำไมนี่ไม่ใช่วิธีแก้ปัญหาของเขา
Raffael

2
A " เคอร์เนล RBF เชิงเส้น " ไม่ได้อยู่
Marc Claesen

แน่นอน ! สิ่งที่มีความหมายคือเคอร์เนล RBF ที่แมปข้อมูลลงในพื้นที่ที่แยกได้เชิงเส้น
soufanom

17

คอมพิวเตอร์วิธีที่มีประสิทธิภาพมากที่สุดในการตัดสินใจว่าสองชุดของจุดแยกเป็นเส้นตรงโดยใช้เขียนโปรแกรมเชิงเส้น GLTKนั้นสมบูรณ์แบบสำหรับจุดประสงค์นั้นและเกือบทุกภาษาระดับสูงมีอินเทอร์เฟซสำหรับมัน - R , Python, Octave, Julia เป็นต้น

ด้วยความเคารพต่อคำตอบที่แนะนำการใช้งานของ SVM :

การใช้ SVM เป็นโซลูชันย่อยที่ดีที่สุดในการตรวจสอบความสามารถในการแยกเชิงเส้นด้วยเหตุผลสองประการ:

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

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


สมมติว่าคุณมีคะแนน A และ B:

ป้อนคำอธิบายรูปภาพที่นี่

จากนั้นคุณต้องย่อเล็กสุด 0 สำหรับเงื่อนไขต่อไปนี้:

(A ด้านล่างเป็นเมทริกซ์ไม่ใช่ชุดของจุดจากด้านบน)

ป้อนคำอธิบายรูปภาพที่นี่

"การลดขนาด 0" ได้อย่างมีประสิทธิภาพหมายความว่าคุณไม่จำเป็นต้องปรับฟังก์ชั่นวัตถุประสงค์ให้เหมาะสมเพราะมันไม่จำเป็นที่จะต้องค้นหาว่าเซตนั้นแบ่งได้เป็นเส้นตรงหรือไม่

ในที่สุด ( ป้อนคำอธิบายรูปภาพที่นี่) กำลังกำหนดระนาบแยก


ป้อนคำอธิบายรูปภาพที่นี่

ในกรณีที่คุณมีความสนใจในตัวอย่างการทำงานใน R หรือรายละเอียดทางคณิตศาสตร์แล้วตรวจสอบนี้ออก


3
SVM เป็นตัวแยกประเภทซอฟต์ขอบ ... ยกเว้นเมื่อคุณใช้ SVM ฮาร์ดขอบ ที่กล่าวว่าการใช้ SVM เป็นเหมือนการยิงแมลงวันด้วยปืนใหญ่
Marc Claesen

ถูกต้อง - แม้ว่าห้องสมุด SVM จำนวนมาก (หรืออาจเป็นส่วนใหญ่) ไม่ได้เสนอตัวเลือกนี้
Raffael

2

0

Linear Perceptron รับประกันว่าจะหาทางออกหากมีอยู่ วิธีนี้ไม่มีประสิทธิภาพสำหรับขนาดใหญ่ วิธีที่มีประสิทธิภาพที่สุดในการตัดสินใจว่าจุดสองชุดสามารถแยกกันเป็นเส้นตรงได้หรือไม่โดยใช้การโปรแกรมเชิงเส้นตามที่ระบุโดย @Raffael

วิธีแก้ปัญหาอย่างรวดเร็วก็คือการแก้ perceptron รหัสพร้อมตัวอย่างเพื่อแก้ปัญหาการใช้ Perceptron ใน Matlab อยู่ที่นี่

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