0Pricing
Learn AI with Python · บทเรียน

การจำแนกประเภทด้วย 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ทฤษฎี SVM: ขอบเขตและเวกเตอร์ค้ำจุน
  2. เคล็ดลับเคอร์เนล: RBF พหุนาม และซิกมอยด์
  3. การจำแนกประเภทด้วย SVM และ sklearn
  4. การถดถอยด้วย SVM (SVR)
← กลับไปที่ Learn AI with Python