การคำนวณสัมประสิทธิ์ลากรองจ์สำหรับ SVM ใน Python


10

ฉันกำลังพยายามเขียนการใช้งานSVMแบบเต็มใน Python และฉันมีปัญหาเล็กน้อยในการคำนวณสัมประสิทธิ์ลากรองจ์

ก่อนอื่นให้ฉันใช้ถ้อยคำใหม่สิ่งที่ฉันเข้าใจจากอัลกอริทึมเพื่อให้แน่ใจว่าฉันอยู่บนเส้นทางที่ถูกต้อง

ถ้าx1,x2,...,xnเป็นชุดข้อมูลและyi{1,1}เป็นคลาสป้ายกำกับของxiจากนั้น

i,yi(wTxi+b)1

ดังนั้นเราเพียงแค่ต้องแก้ปัญหาการเพิ่มประสิทธิภาพให้

w2

ขึ้นอยู่กับyi(wTxi+b)1

ในแง่ของสัมประสิทธิ์ลากรองจ์สิ่งนี้แปลเป็นการค้นหา ,และและการย่อขนาด:α = ( α 1 , α 2 , . . . α n ) 0 0 L ( α , W , B ) = 1wbα=(α1,α2,...αn)00

L(α,w,b)=12w2αi(yi(wTx+b)1)

ตอนนี้ตั้งแต่และเราสามารถเขียนใหม่เป็นด้วยข้อ จำกัด

Lw=0w=αiyixi
Lb=0yiαi=0
αi0และαiyi=0
L(α,w,b)=Q(α)=αi12αiαjyiyjxiTxj
αi0 and αiyi=0

ดังนั้นฉันพยายามที่จะแก้ปัญหาการเพิ่มประสิทธิภาพการใช้งูหลามและแพคเกจฟรีเท่านั้นที่ฉันสามารถหาเรียกว่าcvxopt

ฉันต้องการความช่วยเหลือในการแก้ปัญหานี้ฉันไม่สามารถหาตัวอย่างที่ดีเกี่ยวกับเรื่องนี้และในขณะที่ฉันเข้าใจทฤษฎีฉันมีเวลายากที่จะแปลเป็นรหัส (ฉันคาดหวังตรงกันข้าม เพิ่มเติมจากพื้นหลังการเขียนโปรแกรม)

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

L(α,w,b)=Q(α)=αi12αiαjyiyjK(xi,xj)

ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมอย่างมากฉันหลงทางในการใช้งาน Python หากคุณมีโมดูลที่ดีกว่าในการแก้ปัญหาการเพิ่มประสิทธิภาพที่ฉันต้องการอ่านเกี่ยวกับเรื่องนี้เช่นกัน

คำตอบ:


4

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

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

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


ขอบคุณสำหรับคำตอบที่ให้ข้อมูล (ซึ่งฉันคิดว่าเป็นของฉันยอดเยี่ยม) และยินดีต้อนรับสู่ scicomp!
Aron Ahmadia

+1 คำตอบที่น่าสนใจและฉันเริ่มดูลิงก์ที่ยอดเยี่ยมของคุณซึ่งช่วยฉันได้มาก!
Charles Menguy

2

รูปแบบทั่วไปของปัญหาการปรับให้เหมาะสมของคุณคือโปรแกรมกำลังสองไม่ว่าคุณจะใช้เคล็ดลับเคอร์เนลหรือเคอร์เนลเชิงเส้น ดูเหมือนว่าcvxoptจะเพียงพอสำหรับสิ่งที่คุณกำลังพยายามทำ แต่ pythonaut อื่น ๆ ที่นี่มีโชคกับOpenOptเช่นกัน


อารอนคุณรู้หรือไม่ว่า Ipopt Python wrapper ได้รับการแก้ไขหรือไม่?
Geoff Oxberry

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