คุณสามารถอธิบายความแตกต่างระหว่าง SVC และ LinearSVC ใน scikit-Learn ได้หรือไม่?


19

ฉันเพิ่งเริ่มเรียนรู้ที่จะทำงานกับsklearnและเพิ่งเจอผลลัพธ์ที่แปลกประหลาดนี้

ฉันใช้digitsชุดข้อมูลที่มีอยู่sklearnเพื่อลองแบบจำลองต่างๆและวิธีการประมาณค่า

เมื่อฉันทดสอบโมเดลเครื่อง Vector สนับสนุนบนข้อมูลฉันพบว่ามีสองคลาสที่แตกต่างกันsklearnสำหรับการจัดหมวดหมู่ SVM: SVCและLinearSVCที่ซึ่งอดีตใช้วิธีแบบหนึ่งต่อหนึ่งและอีกวิธีหนึ่งใช้กับวิธีส่วนที่เหลือ

ฉันไม่รู้ว่าจะมีผลกระทบอะไรกับผลลัพธ์ดังนั้นฉันจึงลองทั้งสองอย่าง ฉันทำการประมาณสไตล์ Monte Carlo ที่ฉันวิ่งทั้งสองรุ่น 500 ครั้งแต่ละครั้งแบ่งตัวอย่างแบบสุ่มเป็นการฝึกอบรม 60% และทดสอบ 40% และคำนวณข้อผิดพลาดของการทำนายในชุดทดสอบ

ตัวประมาณ SVC ปกติสร้างฮิสโตแกรมของข้อผิดพลาดต่อไปนี้: SVC Error Rate ในขณะที่ตัวประมาณ SVC เชิงเส้นสร้างฮิสโตแกรมต่อไปนี้: อัตราข้อผิดพลาดเชิงเส้น SVC

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

และที่เกี่ยวข้องอะไรที่อาจทำให้เกิดโพลาไรเซชันโดยสิ้นเชิงในผลลัพธ์ ทั้งความแม่นยำใกล้กับ 1 หรือความแม่นยำใกล้กับ 0 ไม่มีอะไรในระหว่าง

สำหรับการเปรียบเทียบการจำแนกแผนภูมิการตัดสินใจทำให้เกิดอัตราการผิดพลาดแบบกระจายที่มากกว่าปกติด้วยความแม่นยำประมาณ 0.85


ฉันถือว่าเอกสารการเรียนรู้ scikit ไม่ได้เน้นความแตกต่าง? คุณตรวจสอบไหม
Rohit

1. เคอร์เนลอะไรที่คุณใช้ใน SVC การตั้งค่าเริ่มต้น = "rbf"? 2. แบบ
ตัวต่อตัวและแบบตัวต่อตัว

เอกสารประกอบนั้นค่อนข้างกระจัดกระจาย / คลุมเครือในหัวข้อ มันกล่าวถึงความแตกต่างระหว่างแบบหนึ่งต่อหนึ่งและแบบหนึ่งต่อส่วนที่เหลือและ SVS เชิงเส้นคือSimilar to SVC with parameter kernel=’linear’, but implemented in terms of liblinear rather than libsvm, so it has more flexibility in the choice of penalties and loss functions and should scale better (to large numbers of samples).
metjush

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

คำตอบ:


23

SVM ปกติที่มีค่าเริ่มต้นใช้ฟังก์ชั่นพื้นฐานเรเดียลเป็นเคอร์เนล SVM นี่คือเคอร์เนล Gaussian หรือที่เรียกว่าเส้นโค้งกระดิ่ง หมายความว่าไม่มีการสร้างแผ่นดินของมนุษย์ระหว่างคลาสที่แตกต่างกันด้วยฟังก์ชันเกาส์เซียน Linear-SVM ใช้เคอร์เนลเชิงเส้นสำหรับฟังก์ชั่นพื้นฐานดังนั้นคุณสามารถคิดได้ว่านี่เป็นฟังก์ชันที่มีรูปร่างเป็นรูป ^ มันปรับได้น้อยกว่ามากและเป็นเพียงการแก้ไขเชิงเส้น

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

ลองดูภาพนี้เพื่ออธิบายสี่ภูมิภาคของอคติสูงและต่ำและความแปรปรวนสูงและต่ำ เห็นได้ชัดว่าสถานที่ที่ดีที่สุดคือความแปรปรวนต่ำและอคติต่ำ

ปาเป้าอคติภาพความแปรปรวน

ก่อนอื่นให้ประเมินความแปรปรวน -

ตอนนี้ดูที่แปลงของคุณ: ป้อนคำอธิบายรูปภาพที่นี่

ฟังก์ชันพื้นฐานแบบไม่เชิงเส้นมีความแปรปรวนสูงกว่า มาดูกันว่ามันน่าดูกว่าเคอร์เนลเชิงเส้นกันอย่างไร! เคอร์เนลเชิงเส้นมีความแปรปรวนต่ำกว่า มาดูกันว่ามันจะมีเสียงรบกวนน้อยลงอย่างไร!

ตอนนี้ให้ประเมินอคติ -

เคอร์เนลใดที่มีความแม่นยำมากกว่า เราสามารถเพิ่มข้อผิดพลาดที่คุณให้ไว้ เคอร์เนลที่ไม่ใช่เชิงเส้นมีข้อผิดพลาดทั้งหมดประมาณ ~ 550 + 325 = ~ 875 เคอร์เนลเชิงเส้นมีข้อผิดพลาดประมาณ ~ 690 + ~ 50 = ~ 740 เคอร์เนลเชิงเส้นดูเหมือนว่าจะมีภาพรวมที่ดีขึ้น แต่โดยรวมก็ค่อนข้างใกล้เคียงกัน นี่คือสิ่งที่ได้รับหากิน!

วางมันทั้งหมดเข้าด้วยกัน

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

หวังว่านี่จะช่วยได้!


พารามิเตอร์ C จำเป็นต้องเป็น ลดลงจากค่าเริ่มต้นที่ไม่เพิ่มขึ้น
Hamdi

4

หากคุณใช้เคอร์เนลเริ่มต้นใน SVC () เคอร์เนลRadial Basis Function (rbf) คุณอาจเรียนรู้ขอบเขตการตัดสินใจที่ไม่เชิงเส้นมากขึ้น ในกรณีของชุดข้อมูลหลักสิ่งนี้จะมีประสิทธิภาพสูงกว่าขอบเขตการตัดสินใจเชิงเส้นในงานนี้ (ดู 3.1 'Baseline Linear Classifier')

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