การจำแนกประเภทด้วย SVM และ sklearn
SVC, LinearSVC, การเลือกเคอร์เนล, class_weight='balanced' และ probability=True
การจำแนกประเภทด้วย SVM และ sklearn เป็นบทเรียน Learn AI with Python ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Learn AI with Python และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
SVM ใน scikit-learn
scikit-learn มีตัวจำแนกประเภท SVM หลายแบบ ตัวหลักคือ SVC ซึ่งรองรับเส้นขอบเขตเชิงเส้นและแบบเคอร์เนลผ่านพารามิเตอร์ kernel
from sklearn.svm import SVC
model = SVC(kernel="rbf", C=1.0, gamma="scale")
model.fit(Xtr, ytr)
print(model.score(Xte, yte))พารามิเตอร์หลักของ SVC
พารามิเตอร์สามรายการเป็นตัวกำหนดพฤติกรรมของ SVC:
kernelประเภทของเส้นขอบเขต (เชิงเส้น, rbf, poly)Cบทลงโทษข้อผิดพลาด / การปรับให้เป็นระเบียบgammaความกว้างของเคอร์เนลสำหรับ rbf/poly
from sklearn.svm import SVC
model = SVC(kernel="rbf", C=10, gamma=0.1)ปรับขนาดก่อนเสมอ
SVM ไวต่อขนาดของข้อมูล ควรห่อมาตราส่วนและ SVC ไว้ในไปป์ไลน์ เพื่อให้การปรับขนาดเรียนรู้จากข้อมูลฝึกเท่านั้น แม้จะอยู่ภายในการตรวจสอบไขว้ก็ตาม
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
pipe = make_pipeline(StandardScaler(), SVC(kernel="rbf"))
pipe.fit(Xtr, ytr)LinearSVC สำหรับชุดข้อมูลขนาดใหญ่
SVC(kernel="linear") ขยายไปยังตัวอย่างจำนวนมากได้ไม่ดี LinearSVC ใช้ตัวแก้ปัญหาที่เร็วกว่าและปรับให้เหมาะกับปัญหาเชิงเส้น จึงจัดการข้อมูลขนาดใหญ่ที่มีมิติสูงได้ดีกว่ามาก
from sklearn.svm import LinearSVC
model = LinearSVC(C=1.0, max_iter=5000)
model.fit(Xtr, ytr)SVC เทียบกับ LinearSVC
ใช้ LinearSVC สำหรับข้อมูลขนาดใหญ่หรือข้อมูลเบาบาง เช่น ข้อมูลข้อความ ใช้ SVC เมื่อต้องการเคอร์เนลสำหรับเส้นขอบเขตแบบไม่เชิงเส้น โปรดทราบว่า LinearSVC ใช้ฟังก์ชันสูญเสียที่แตกต่างกันเล็กน้อย และไม่มี predict_proba
ความไม่สมดุลของคลาส
เมื่อคลาสหนึ่งพบได้น้อย SVM มักเอนเอียงเข้าหาคลาสส่วนใหญ่ การกำหนด class_weight="balanced" จะถ่วงน้ำหนักคลาสต่าง ๆ โดยอัตโนมัติในทางกลับกันกับความถี่ของคลาส
from sklearn.svm import SVC
model = SVC(kernel="rbf", class_weight="balanced")
model.fit(Xtr, ytr)น้ำหนักคลาสแบบกำหนดเอง
คุณยังสามารถส่งพจนานุกรมที่ระบุเองให้กับ class_weight เพื่อให้น้ำหนักกับคลาสใดคลาสหนึ่งมากกว่าการปรับสมดุลอัตโนมัติได้
from sklearn.svm import SVC
model = SVC(class_weight={0: 1, 1: 5}) # class 1 errors cost 5xการประมาณความน่าจะเป็น
โดยค่าเริ่มต้น SVC จะส่งคืนป้ายกำกับแบบตัดสินเด็ดขาด ให้ตั้งค่า probability=True เพื่อเปิดใช้ predict_proba (ผ่านการปรับเทียบภายใน) ซึ่งจำเป็นสำหรับ ROC AUC และการปรับค่าเกณฑ์ การฝึกจะช้าลง
from sklearn.svm import SVC
model = SVC(probability=True)
model.fit(Xtr, ytr)
proba = model.predict_proba(Xte)[:, 1]SVM หลายคลาส
SVC รองรับคลาสมากกว่าสองคลาสโดยใช้รูปแบบหนึ่งต่อหนึ่งโดยอัตโนมัติ คุณไม่ต้องเปลี่ยนโค้ด เพียงฝึกด้วยป้ายกำกับหลายคลาส แล้วทุกอย่างจะทำงานได้
from sklearn.svm import SVC
model = SVC(decision_function_shape="ovr")
model.fit(X_multiclass, y_multiclass)การปรับค่า C และแกมมาด้วย GridSearchCV
สูตรมาตรฐานคือการค้นหาแบบกริดเหนือค่า C และ gamma บนสเกลลอการิทึม โดยทำทั้งหมดภายในกระบวนการปรับสเกล
from sklearn.model_selection import GridSearchCV
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
pipe = make_pipeline(StandardScaler(), SVC(kernel="rbf"))
param = {
"svc__C": [0.1, 1, 10, 100],
"svc__gamma": [0.001, 0.01, 0.1, 1],
}
gs = GridSearchCV(pipe, param, cv=5, scoring="f1")
gs.fit(Xtr, ytr)
print(gs.best_params_)เคล็ดลับการใช้งานจริง
SVM ทำงานได้ดีเยี่ยมกับชุดข้อมูลขนาดเล็กถึงปานกลางที่มีขอบเขตแยกชัดเจน แต่จะมีปัญหากับข้อมูลขนาดใหญ่มาก (ให้ใช้ LinearSVC หรือเปลี่ยนไปใช้การบูสต์) ควรปรับสเกลข้อมูล ปรับค่า C และแกมมา และใช้ class_weight เมื่อข้อมูลไม่สมดุล
ตรวจสอบความเข้าใจ
ทดสอบความรู้เกี่ยวกับ SVM ใน sklearn ของคุณ
สรุป
สรุป: ใช้ SVC ร่วมกับ kernel, C และ gamma สำหรับการจำแนกประเภทแบบไม่เชิงเส้น โดยต้องอยู่ภายในกระบวนการปรับสเกลเสมอ เปลี่ยนไปใช้ LinearSVC สำหรับข้อมูลขนาดใหญ่หรือข้อมูลข้อความ จัดการข้อมูลไม่สมดุลด้วย class_weight="balanced" และปรับค่า C กับ gamma ร่วมกันด้วย GridSearchCV
คำถามที่พบบ่อย
บทเรียน “การจำแนกประเภทด้วย SVM และ sklearn” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การจำแนกประเภทด้วย SVM และ sklearn” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn AI with Python ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การจำแนกประเภทด้วย SVM และ sklearn”
SVC, LinearSVC, การเลือกเคอร์เนล, class_weight='balanced' และ probability=True คุณปฏิบัติ Learn AI with Python ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn AI with Python หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Learn AI with Python บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “การจำแนกประเภทด้วย SVM และ sklearn” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Learn AI with Python นี้ได้ไหม
ได้ บทเรียน Learn AI with Python ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ทฤษฎี SVM: ขอบเขตและเวกเตอร์ค้ำจุน
- เคล็ดลับเคอร์เนล: RBF พหุนาม และซิกมอยด์
- การจำแนกประเภทด้วย SVM และ sklearn
- การถดถอยด้วย SVM (SVR)