การถดถอยด้วย SVM (SVR)
แถบค่าเอปไซลอนของ SVR, nu-SVR และการเปรียบเทียบ SVR กับการถดถอยเชิงเส้นบนข้อมูลที่ไม่เป็นเชิงเส้น
การถดถอยด้วย 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ทฤษฎี SVM: ขอบเขตและเวกเตอร์ค้ำจุน
- เคล็ดลับเคอร์เนล: RBF พหุนาม และซิกมอยด์
- การจำแนกประเภทด้วย SVM และ sklearn
- การถดถอยด้วย SVM (SVR)