อะไรคืออิทธิพลของ C ใน SVM ที่มีเคอร์เนลเชิงเส้น?


134

ขณะนี้ฉันกำลังใช้ SVM กับเคอร์เนลเชิงเส้นเพื่อจัดประเภทข้อมูลของฉัน ไม่มีข้อผิดพลาดในชุดฝึกอบรม ฉันลองหลายค่าสำหรับพารามิเตอร์ ( ) สิ่งนี้ไม่เปลี่ยนข้อผิดพลาดในชุดทดสอบ10 - 5 , , 10 2C105,,102

ตอนนี้ฉันสงสัยว่า: นี่เป็นข้อผิดพลาดที่เกิดจากการผูกทับทิมสำหรับlibsvmฉันที่ใช้ ( rb-libsvm ) หรือนี่เป็นการอธิบายทางทฤษฎีหรือไม่?

พารามิเตอร์ควรเปลี่ยนประสิทธิภาพของตัวจําแนกเสมอ?C


เพียงความคิดเห็นไม่ใช่คำตอบ: โปรแกรมใด ๆที่ลดผลรวมของสองคำเช่นควร (imho) บอกคุณว่าคำสองคำนี้อยู่ท้ายที่สุดดังนั้น ที่คุณสามารถดูว่าพวกเขาสมดุล (สำหรับความช่วยเหลือในการคำนวณสองคำ SVM ตัวเองลองถามคำถามที่แยกต่างหากมีคุณดูไม่กี่จุดที่เลวร้ายที่สุดในหมวดที่คุณสามารถโพสต์ปัญหาคล้ายกับของคุณ.?)|w|2+Cξi,
เดนิส

คำตอบ:


136

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


1
ตกลงฉันเข้าใจว่า C เป็นตัวกำหนดอิทธิพลของการผิดประเภทต่อฟังก์ชันวัตถุประสงค์ ฟังก์ชันวัตถุประสงค์คือผลรวมของคำที่ทำให้เป็นระเบียบและอัตราการจำแนกประเภท (ดูen.wikipedia.org/wiki/Support_vector_machine#Soft_margin ) เมื่อฉันเปลี่ยน C สิ่งนี้จะไม่มีผลกระทบใด ๆ กับฟังก์ชันวัตถุประสงค์ขั้นต่ำของฉัน นั่นหมายความว่าคำว่าการทำให้เป็นระเบียบมีขนาดเล็กมากเสมอหรือ
อัลฟ่า

3
ฉันขอแนะนำให้ลองใช้ค่า C ที่กว้างขึ้นอาจจะเป็น 10 ^ [- 5, ... , 5] หรือมากกว่านั้นหากการเพิ่มประสิทธิภาพนั้นเร็วบนชุดข้อมูลของคุณเพื่อดูว่าคุณได้รับบางสิ่งที่ดูสมเหตุสมผลกว่าหรือไม่ ทั้งข้อผิดพลาดในการฝึกอบรมและมูลค่าของต้นทุนขั้นต่ำควรเปลี่ยนแปลงเนื่องจาก C มีการเปลี่ยนแปลง อีกทั้งขนาดของข้อมูลของคุณก็สุดขีด? โดยทั่วไปพารามิเตอร์ C ที่ดีที่สุดควรใหญ่ขึ้นเมื่อคุณลดขนาดข้อมูลของคุณและในทางกลับกันดังนั้นหากคุณมีค่าคุณสมบัติที่น้อยมากให้แน่ใจว่าได้รวมค่าที่มีขนาดใหญ่มากสำหรับค่า C ที่เป็นไปได้ หากไม่มีสิ่งใดที่กล่าวมาข้างต้นฉันเดาว่าปัญหาอยู่ในการเชื่อมโยงของทับทิม
Marc Shivers

3
การเปลี่ยนความแม่นยำที่สมดุลจาก 0.5 (เพียงเดา) เป็น 0.86 ไม่ได้ฟังดูเหมือนมีอิทธิพลต่อฉัน มันเป็นความคิดที่ดีที่จะตรวจสอบกริดที่ดีกว่าสำหรับค่า C ตามที่ Marc แนะนำ แต่ผลลัพธ์ที่คุณให้ดูเหมือนเป็นพฤติกรรมปกติ บางคนอาจคาดหวังว่าข้อผิดพลาดจะกลับขึ้นไปอีกครั้งเนื่องจาก C มีแนวโน้มที่จะไม่มีที่สิ้นสุดเนื่องจากมีข้อต่อที่มากเกินไป แต่ดูเหมือนจะไม่เกิดปัญหามากนักในกรณีนี้ โปรดทราบว่าหากคุณสนใจในข้อผิดพลาดที่สมดุลและชุดการฝึกของคุณไม่มีการแบ่ง 50:50 คุณอาจได้ผลลัพธ์ที่ดีกว่า ...
Dikran Marsupial

2
... โดยใช้ค่า C ที่แตกต่างกันสำหรับรูปแบบที่เป็นของคลาสบวกและลบ (ซึ่งเท่ากับ asymptotically เพื่อทำการสุ่มข้อมูลใหม่เพื่อเปลี่ยนสัดส่วนของรูปแบบที่เป็นของแต่ละคลาส)
Dikran Marsupial

2
ฉันคิดว่าเป็นไปได้ว่าเมื่อคุณไปที่ C = 10 ^ 0 SVM ได้จำแนกข้อมูลการฝึกอบรมทั้งหมดอย่างถูกต้องแล้วและไม่มีเวกเตอร์สนับสนุนที่ถูกผูกไว้ (อัลฟาเท่ากับ C) ในกรณีที่ทำให้ C ใหญ่ขึ้นมี ไม่มีผลกับการแก้ปัญหา
Dikran Marsupial

152

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

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

แล้วตัวแยกประเภทใดดีที่สุด? ขึ้นอยู่กับว่าข้อมูลในอนาคตที่คุณคาดการณ์จะมีลักษณะอย่างไรและบ่อยครั้งที่คุณไม่รู้ว่าแน่นอน หากข้อมูลในอนาคตมีลักษณะเช่นนี้:

c ขนาดใหญ่ดีที่สุด ดังนั้นตัวจําแนกเรียนรู้ที่ใช้ค่า c ที่มีขนาดใหญ่นั้นดีที่สุด

ในทางตรงกันข้ามหากข้อมูลในอนาคตมีลักษณะเช่นนี้:

ต่ำ c ดีที่สุด ดังนั้นตัวจําแนกที่เรียนรู้โดยใช้ค่าคต่ำนั้นดีที่สุด

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

ข้อมูลประเภทใดที่คุณพยายามเรียนรู้แบบจำลอง ข้อมูลเท่าไหร่ เห็นไหม


4
ฉันไม่ได้แตะต้องข้อมูลนานกว่า 3 ปีแล้ว มันมีมิติและเสียงดังมากและฉันไม่ได้รับอนุญาตให้เผยแพร่ ตอบคำถามแล้ว แต่ฉันคิดว่าการสร้างภาพข้อมูลของคุณนั้นดีมากและใช้งานง่าย
alfa

น่ากลัว คุณมีคำอธิบายสำหรับค่ากามาเช่นกันหรือไม่?
MonsterMMORPG

2
พารามิเตอร์ gamma ใช้สำหรับฟังก์ชันเคอร์เนล Gaussian ฟังก์ชั่นเคอร์เนลสามารถมองเห็นได้ว่าเป็นวิธีที่มีประสิทธิภาพในการแปลงคุณสมบัติดั้งเดิมของคุณไปยังพื้นที่อื่นโดยที่ไฮเปอร์เพลตที่แยกในพื้นที่คุณลักษณะใหม่ไม่จำเป็นต้องเป็นเชิงเส้นในพื้นที่คุณลักษณะดั้งเดิม ตัวอย่างเช่นตำแหน่งสองมิติของจุดข้อมูลในพื้นที่คุณลักษณะดั้งเดิมสามารถใช้ในการคำนวณคุณสมบัติใหม่ที่แสดงระยะทางถึงเครื่องหมายบางอย่างบนแผนที่ ด้วยคุณสมบัติใหม่นี้สามารถใช้ตัวจําแนกประเภทไม่ใช่เชิงเส้น (ในพื้นที่ดั้งเดิม) ซึ่งขอบเขตการตัดสินใจก่อตัวเป็นวงกลมรอบเครื่องหมาย
Kent Munthe Caspersen

@KentMuntheCaspersen ไม่ใช่คำอธิบายของคุณเกี่ยวกับ C ที่ไม่ถูกต้องใช่ไหม มันตรงกันข้ามกับที่กล่าวไว้ในหนังสือ "ความรู้เบื้องต้นเกี่ยวกับสถิติ"
diugalde

2
@diugalde คุณสามารถพูดจากหนังสือเล่มนี้ว่าอะไรแตกต่างจากคำอธิบายของฉัน? ฉันคิดเสมอว่า c เป็นค่าใช้จ่ายในการจำแนกประเภท (จำได้ง่ายโดย c ในการจัดหมวดหมู่) ด้วยวิธีดังกล่าวที่สูงขึ้นหมายถึงค่าใช้จ่ายในการจำแนกประเภทที่สูงขึ้นนำไปสู่อัลกอริทึมที่พยายามแยกจุดข้อมูลทั้งหมดอย่างสมบูรณ์ ด้วยค่าผิดปกตินี้ไม่สามารถทำได้หรือจะไม่นำไปสู่ผลลัพธ์ทั่วไปที่ดีซึ่งเป็นเหตุผลที่ดีในการลด / แนะนำ c
Kent Munthe Caspersen

26

C เป็นหลักพารามิเตอร์ normalization ซึ่งควบคุมการแลกเปลี่ยนระหว่างการบรรลุข้อผิดพลาดต่ำในข้อมูลการฝึกอบรมและลดบรรทัดฐานของน้ำหนัก มันเป็นความจริงกับพารามิเตอร์สันเขาในการถดถอยสัน (ในความเป็นจริงในทางปฏิบัติมีความแตกต่างเล็กน้อยในการทำงานหรือทฤษฎีระหว่าง SVM เชิงเส้นและการถดถอยสันดังนั้นฉันมักจะใช้หลัง - หรือเคอร์เนลถดถอยสันหากมีคุณลักษณะมากกว่าการสังเกต)

การปรับ C อย่างถูกต้องเป็นขั้นตอนสำคัญในการปฏิบัติที่ดีที่สุดในการใช้ SVMs เนื่องจากการลดความเสี่ยงทางโครงสร้าง (หลักการสำคัญที่อยู่เบื้องหลังวิธีการพื้นฐาน) คือการดำเนินการของบุคคลผ่านการปรับ C พารามิเตอร์พารามิเตอร์ C บังคับขอบเขตบนของบรรทัดฐานของ น้ำหนักซึ่งหมายความว่ามีชุดของคลาสสมมติฐานที่ซ้อนกันซึ่งจัดทำดัชนีโดย C เมื่อเราเพิ่ม C เราจะเพิ่มความซับซ้อนของคลาสสมมติฐาน (ถ้าเราเพิ่ม C เล็กน้อยเราก็ยังสามารถสร้างแบบจำลองเชิงเส้นทั้งหมดที่เราสามารถทำได้มาก่อน และบางอย่างที่เราไม่สามารถทำได้ก่อนที่เราจะเพิ่มขอบเขตสูงสุดบนบรรทัดฐานที่อนุญาตของน้ำหนัก) ดังนั้นเช่นเดียวกับการใช้ SRM ผ่านการจำแนกระยะขอบสูงสุดมันยังถูกนำไปใช้โดยการจำกัดความซับซ้อนของคลาสสมมติฐานผ่านการควบคุม C

น่าเศร้าที่ทฤษฎีสำหรับการกำหนดวิธีการตั้งค่า C นั้นยังไม่พัฒนาเป็นอย่างดีในขณะนี้ดังนั้นคนส่วนใหญ่มักจะใช้การตรวจสอบข้าม (ถ้าพวกเขาทำอะไร)


ตกลงฉันคิดว่าฉันเข้าใจความหมายของ C ตอนนี้ :)
อัลฟ่า

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

2
C เป็นพารามิเตอร์การทำให้เป็นมาตรฐาน แต่มันเป็นสิ่งที่แนบมากับข้อมูลที่ไม่เหมาะสม (ผลรวมของตัวแปรหย่อน) มากกว่าคำว่าการทำให้เป็นปกติ (bit margin) ดังนั้นค่าที่ใหญ่กว่าของ C จึงหมายถึงการทำให้เป็นระเบียบ หรือคุณสามารถดูการแสดงปกติของพารามิเตอร์ rgularisation เป็น 1 / C
Dikran Marsupial

8

C เป็นพารามิเตอร์การทำให้เป็นมาตรฐานที่ควบคุมการแลกเปลี่ยนระหว่างข้อผิดพลาดในการฝึกอบรมต่ำและข้อผิดพลาดในการทดสอบที่ต่ำซึ่งเป็นความสามารถในการทำให้ตัวแยกประเภททั่วไปของคุณมองไม่เห็นข้อมูล

พิจารณาฟังก์ชั่นวัตถุประสงค์ของ SVM เชิงเส้น: min | w | ^ 2 + C∑ξ หาก C ของคุณมีขนาดใหญ่เกินไปอัลกอริทึมการเพิ่มประสิทธิภาพจะพยายามลด | w | มากที่สุดเท่าที่เป็นไปได้ซึ่งนำไปสู่ไฮเปอร์เพลนซึ่งพยายามจำแนกตัวอย่างการฝึกอบรมแต่ละอย่างถูกต้อง การทำเช่นนี้จะนำไปสู่การสูญเสียในคุณสมบัติการวางทั่วไปของลักษณนาม ในทางกลับกันถ้า C ของคุณเล็กเกินไปคุณก็มีอิสระในการเพิ่ม | w | มากซึ่งจะนำไปสู่ข้อผิดพลาดการฝึกอบรมที่มีขนาดใหญ่

รูปภาพด้านล่างอาจช่วยให้คุณเห็นภาพนี้ Linear SVM Classifier พร้อม C = 10,000000Linear SVM Classifier พร้อม C = 0.001


ฉันไม่เข้าใจแผนการของคุณจริงๆ คุณอธิบายได้ไหม
อัลฟ่า

1
@alfa: ความตั้งใจของฉันในการแสดงพล็อตคือ: 1) ถ้า C มีขนาดใหญ่เกินไป (พล็อต 1) จากนั้นตัวจําแนกของคุณจะพอดีมากกว่านั่นคือมันจะพยายามจำแนกจุดข้อมูลการฝึกอบรมแต่ละจุดอย่างถูกต้อง จุดที่ 1 แสดงคะแนนการฝึกอบรมเกือบทั้งหมดที่จำแนกอย่างถูกต้อง 2) ในทางกลับกันถ้า C น้อยเกินไป (แปลง 2) ตัวแยกประเภทของคุณจะเหมาะสม พล็อต 2 แสดงตัวจําแนกพอดีภายใต้ ไม่แยกคะแนนออกเป็นคลาสที่เกี่ยวข้อง หวังว่านี่จะช่วยได้
deerishi

นั่นหมายความว่าแกน x และ y ของคุณจะแสดงคุณสมบัติที่แตกต่างกันสองแบบ เลเบล "ความยาวของชุดข้อมูล" และ "ผลรวมของค่าเฉลี่ย" ค่อนข้างสับสนใช่ไหม
อัลฟ่า

มันน่าสนใจที่จะเห็นว่าตัวเลือกที่เหมาะสมสำหรับ C ช่วยในทั้งสองกรณีอย่างไร
อัลฟ่า

2
ฉันคิดว่ามันไม่ชัดเจนที่จะเห็นว่า C = 10,000000 เป็นตัวเลือกที่ไม่ดีและฉันคิดว่าชุดข้อมูลนั้นไม่ถูกต้องที่จะแสดงให้เห็น อาจชุดข้อมูลที่มีค่าผิดปกติเพียงไม่กี่ทางด้านผิดของการแยกไฮเปอร์เพลนจะดีกว่าไหม
อัลฟ่า

4

คำตอบข้างต้นนั้นยอดเยี่ยม หลังจากอ่านคำถามของคุณอย่างถี่ถ้วนฉันพบว่ามีข้อเท็จจริงสำคัญ 2 ประการที่เราอาจมองข้ามไป

  1. คุณกำลังใช้เคอร์เนลเชิงเส้น
  2. ข้อมูลการฝึกอบรมของคุณแยกได้เป็นเส้นตรงเนื่องจาก "ไม่มีข้อผิดพลาดในชุดการฝึกอบรม"

จากข้อเท็จจริง 2 ประการหากค่า C เปลี่ยนแปลงภายในช่วงที่เหมาะสมไฮเพอร์เพลทที่เหมาะสมจะสุ่มเลื่อนด้วยจำนวนเล็กน้อยภายในระยะขอบ (ช่องว่างที่เกิดจากเวกเตอร์สนับสนุน)

สมมติว่าระยะขอบของข้อมูลการฝึกอบรมมีขนาดเล็กและ / หรือไม่มีจุดข้อมูลการทดสอบภายในระยะขอบเช่นกันการเลื่อนของไฮเปอร์เพลนที่ดีที่สุดภายในระยะขอบจะไม่ส่งผลต่อข้อผิดพลาดการจำแนกประเภทของชุดทดสอบ

อย่างไรก็ตามหากคุณตั้งค่า C = 0 ดังนั้น SVM จะไม่สนใจข้อผิดพลาดและเพียงพยายามลดผลรวมของกำลังสองของน้ำหนัก (w) ให้น้อยที่สุดบางทีคุณอาจได้ผลลัพธ์ที่แตกต่างกันในชุดทดสอบ


2

C พารามิเตอร์ใช้สำหรับควบคุมค่าผิดปกติ - C ต่ำหมายถึงเราอนุญาตให้ใช้ค่าผิดปกติเพิ่มขึ้นสูง C หมายถึงเราอนุญาตให้ใช้ค่าผิดพลาดน้อยลง


1

สูง C (ค่าใช้จ่าย) หมายถึงค่าใช้จ่ายในการจำแนกประเภทเพิ่มขึ้น ซึ่งหมายความว่าเคอร์เนลที่ยืดหยุ่นจะมีความยืดหยุ่นมากขึ้นเพื่อหลีกเลี่ยงการสังเกตการจัดประเภทในชุดฝึกอบรม

หากเคอร์เนลคือการสร้างแบบจำลองอย่างคร่าวๆโมเดลจะทำงานไม่ได้ดีเมื่อทำการทำนายข้อมูลใหม่

หากเคอร์เนลตรงโมเดลจะไม่พูดคุยกันได้ดีเมื่อทำนายข้อมูลใหม่

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