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

การถดถอยด้วย SVM (SVR)

แถบค่าเอปไซลอนของ SVR, nu-SVR และการเปรียบเทียบ SVR กับการถดถอยเชิงเส้นบนข้อมูลที่ไม่เป็นเชิงเส้น

บทเรียน 4 จาก 413 ขั้นตอน

การถดถอยด้วย SVM (SVR) เป็นบทเรียน Learn AI with Python ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Learn AI with Python และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน

SVM ก็ทำการถดถอยได้เช่นกัน

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

ท่อที่ไม่ไวต่อเอปไซลอน

SVR จะสร้าง ท่อเอปไซลอน รอบฟังก์ชันทำนาย จุดที่อยู่ ภายใน ท่อจะมี ค่าความสูญเสียเป็นศูนย์ ส่วนจุดที่อยู่นอกท่อเท่านั้นที่จะถูกลงโทษ วิธีนี้ทำให้โมเดลมุ่งเน้นไปที่ข้อผิดพลาดที่มีความหมาย

เหตุผลที่ท่อมีประโยชน์

การไม่นำความเบี่ยงเบนเล็กน้อยมาพิจารณาทำให้ SVR ไม่ปรับเข้ากับสัญญาณรบกวนมากเกินไป และได้เส้นการประมาณที่เรียบและทนทานมากขึ้น การแกว่งเล็ก ๆ ที่อยู่ภายในค่าความคลาดเคลื่อนจะไม่ส่งผลต่อโมเดล

การใช้ SVR เบื้องต้น

SVR ทำงานคล้ายกับ SVC และรองรับเคอร์เนลแบบเดียวกัน RBF เป็นค่าเริ่มต้นที่ใช้กันทั่วไปสำหรับการถดถอยแบบไม่เชิงเส้น

from sklearn.svm import SVR

model = SVR(kernel="rbf", C=100, epsilon=0.1, gamma="scale")
model.fit(Xtr, ytr)
print(model.score(Xte, yte))

พารามิเตอร์เอปไซลอน

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

from sklearn.svm import SVR

wide = SVR(epsilon=1.0)   # tolerant, simpler
tight = SVR(epsilon=0.01) # fits closely

พารามิเตอร์ C ใน SVR

เช่นเดียวกับการจำแนกประเภท C จะควบคุมบทลงโทษสำหรับจุดที่อยู่นอกท่อ ค่า C ที่มากขึ้นจะลงโทษข้อผิดพลาดเหล่านั้นรุนแรงขึ้น ทำให้เส้นประมาณพยายามเข้ากับข้อมูลมากขึ้น ส่วนค่า C ที่น้อยลงจะเพิ่มการทำให้เป็นระเบียบเพื่อให้ได้เส้นโค้งที่เรียบกว่า

from sklearn.svm import SVR

flexible = SVR(C=1000)  # fits training closely
smooth = SVR(C=0.1)     # more regularized

เอปไซลอนเทียบกับ C: พารามิเตอร์สองตัวที่ต่างกัน

โปรดจำความแตกต่างนี้ไว้: เอปไซลอน ควบคุม ความกว้างของท่อ (จะไม่นำข้อผิดพลาดไปพิจารณามากเพียงใด) ส่วน C ควบคุม บทลงโทษ สำหรับข้อผิดพลาดที่อยู่นอกท่อ ควรปรับค่าทั้งสองตัว

การปรับสเกลก็สำคัญสำหรับ SVR เช่นกัน

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

from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVR

pipe = make_pipeline(StandardScaler(), SVR(kernel="rbf"))
pipe.fit(Xtr, ytr)

การปรับค่า SVR

ค้นหาแบบกริดเหนือค่า C, gamma และ epsilon เพื่อหาเส้นประมาณที่ดีที่สุด ใช้เมตริกสำหรับการถดถอย เช่น ค่าความคลาดเคลื่อนกำลังสองเฉลี่ยติดลบในการให้คะแนน

from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVR

param = {
    "C": [1, 10, 100],
    "gamma": [0.01, 0.1, 1],
    "epsilon": [0.01, 0.1, 0.5],
}
gs = GridSearchCV(SVR(), param, cv=5, scoring="neg_mean_squared_error")
gs.fit(Xtr, ytr)

รูปแบบ nu-SVR

NuSVR แทนที่ epsilon ด้วย nu (อยู่ระหว่าง 0 ถึง 1) ซึ่งควบคุมสัดส่วนของเวกเตอร์สนับสนุนและข้อผิดพลาดในการฝึกโดยตรง เป็นการกำหนดพารามิเตอร์อีกรูปแบบหนึ่งที่บางคนเข้าใจได้ง่ายกว่า

from sklearn.svm import NuSVR

model = NuSVR(nu=0.5, C=100, kernel="rbf")
model.fit(Xtr, ytr)

ควรใช้ SVR เมื่อใด

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

ตรวจสอบความเข้าใจ

ทดสอบความรู้เกี่ยวกับ SVR ของคุณ

สรุป

สรุป: SVR จะหาเส้นฟังก์ชันภายใน ท่อที่ไม่ไวต่อเอปไซลอน ซึ่งจุดที่อยู่ภายในท่อมีต้นทุนเป็นศูนย์ epsilon กำหนดความกว้างของท่อ (ค่ามากกว่า = โมเดลเรียบง่ายกว่า) ส่วน C จะลงโทษจุดที่อยู่นอกท่อ ควรปรับสเกลคุณลักษณะเสมอ ปรับค่า C/gamma/epsilon และพิจารณาใช้ NuSVR เป็นการกำหนดพารามิเตอร์อีกรูปแบบหนึ่ง

เริ่มต้นได้ฟรี

เรียนรู้ Python ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
53
บทเรียน
225

คำถามที่พบบ่อย

บทเรียน “การถดถอยด้วย SVM (SVR)” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การถดถอยด้วย SVM (SVR)” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn AI with Python ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การถดถอยด้วย SVM (SVR)”

แถบค่าเอปไซลอนของ SVR, nu-SVR และการเปรียบเทียบ SVR กับการถดถอยเชิงเส้นบนข้อมูลที่ไม่เป็นเชิงเส้น คุณปฏิบัติ Learn AI with Python ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn AI with Python หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Learn AI with Python บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “การถดถอยด้วย SVM (SVR)” ใช้เวลานานแค่ไหน

บทเรียน 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