SVM อดีตเคยหวานปัจจุบันแอบเซง : Machine Learning 101

Mr.P L
mmp-li
Published in
3 min readNov 15, 2018

อัดๆกันครับน้อง อัดๆกันไป มี2ชิด3 มี2ชิด3 : กระเป๋ารถเมลล์ได้กล่าวไว้

วันนี้มาถึง Machine Learning อีกตัวที่เป็น Classification ที่แม่นยำมากๆในอดีต แต่ปัจจุบันก็แพ้ให้พวก Neural Network ไปแล้วแต่ถึงกระนั้น มันก็ยังใช้งานได้ง่ายมากแต่มาถึงบรรทัดแรกก็แอบไร้สาระเลย แต่ความจริงแล้ว SVM มันก็เป็นอย่างงั้นจริงเหละ เพราะมันต้องอัดๆกันเข้าไป เจ้าพวก dataset !!

SVM Support Vector Machine

เหมาะกับ dataset ที่มีฟีเจอร์เยอะๆ แต่ขนาดข้อมูลเล็ก-ปานกลาง หลักการพื้นฐานคือพยายามหาเส้นแบ่งระหว่างคลาสต่างๆในข้อมูล

ในตอนที่หาเส้นแบ่งในแต่ละคลาสจะมีหลักการคือพยายามแยก 2 คลาสให้ออกจากกันโดนการลากเส้นตรงกลาง คือเส้น C

แล้วลากเส้นคู่ขนานคือเส้น A,B อะไรก็ตามที่อยู่หลังเส้น A จะเป็นคลาสสีแดง อะไรก็ตามที่อยู่หลังเส้น B จะเป็นคลาสสีฟ้านั้นเอง

Hard Margin VS Soft Margin

แต่ยังมีข้อแม้เล็กน้อยคือพื้นที่ระหว่าง C-B , C-A

เป้าหมายหลักคืออยากให้เส้นที่แบ่งมีความกว้างมากที่สุด แต่ถ้าเส้นแคบไปก็จะไม่ยอมให้มีข้อมูลอยู่ระหว่างเส้นแบ่งและถ้ามีข้อมูลที่เป็น outlier เกิดขึ้น (ข้อมูลที่เฉลยผิด/ข้อมูลไม่ถูกต้อง)เส้นแบ่งของเราก็จะเพี้ยนแน่นอนหรือเรียกว่า Hard Margin

ทีนี้วิธีแก้ของเราคือ Soft Margin นั้นคือการทำให้เส้นแบ่งนั้นมีความกว้างมากที่สุดเท่าที่จะทำได้และ ยอมให้มีข้อมูลบางข้อมูลยู่ระหว่างเส้นแบ่งของเราบ้าง เพื่อไม่ให้เส้นมันเพี้ยนมากจนเกินไป

วิธีการในโค้ดคือการปรับค่า C ใน model svm ของเราเท่านั้นเอง

ยิ่ง C เยอะ ถนนยิ่งแคบ

ยิ่ง C น้อย ถนนยิ่งกว้าง

Kernel in SVM

ทีนี้พอเราสร้างเส้นตรงขึ้นมาแล้ว หลายๆคนที่เคยใช้ Linear Regression มาก่อนก็จะเจอปัญหาที่ว่า “ถ้าข้อมูลไม่ใช่เส้นตรงละ ? (Non-Linear)” จะทำยังไง ?

วิธีแก้ของเราคือเพิ่ม hyper parameter เข้าไป 1 อันนั้นคือ Kernel โดย Kernel มีเยอะมากทั้งที่เราคุ้นเคยกันดีอย่าง Poly,Sigmoid

poly kernal

อย่างในรูปจะเป็นแบบ Poly นั้นเอง ก็จะได้เส้นแบ่งแบบโค้งขึ้นมานั้นเอง

คณิตศาสตร์เบื้องหลัง = ไม่ยาก

จะเห็นว่าเหมือนกัน Linear Regression เลยนั้นคือการหามุม(Theta) แล้วลากเส้นออกมาแบ่งระหว่างคลาสนั้นๆ แถมในช่วงการสร้างเส้นเรายังสามารถใช้ Gradient Descent มาช่วยได้อีกด้วย โดยการเติมสมการของ SGD เข้าไปนั้นเอง(บทความนี้)

ลงมือทดลอง

บทความนี้ใช้ dataset และการ preprocessing ข้อมูลของบทความ Logistic

เพื่อให้เห็นถึงความแตกต่างว่าโมเดลแต่ละตัวจะให้ความแม่นยำไม่เท่ากันนั้นเอง

ให้เราดึงข้อมูลจาก dataset ไททานิคมาแล้วทำการ preprocessing ข้อมูลเหมือนเดิม (เติมค่าว่าง , ทำการ scale)

แต่บทความรอบก่อนได้ทิ้งท้ายไว้ว่าทำยังไงก็ได้ให้ความแม่นยำมันมากกว่าเดิมโดยการเพิ่ม feature : คำตอบคือเพิ่ม Sibsp และ Parch เข้าไปนั้นเอง และทำการแบ่งข้อมูลเหมือนเดิม

X = f[[‘Pclass’,’Fare’,’Sex_female’,’Sex_male’,’Age’,’SibSp’,’Parch’]]
y = f[‘Survived’]
from sklearn.preprocessing import StandardScaler
scale = StandardScaler()
X = scale.fit_transform(X)
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

โดยรอบนี้ให้เราทำการจูนโมเดลโดยที่โมเดล SVM คือการกำหนดค่า Margin หรือว่าค่า C นั้นเอง

from sklearn.model_selection import GridSearchCV
from sklearn import svm
parameters = { ‘C’:np.arange(1,11,0.5)}
svc = svm.SVC()
SVM=GridSearchCV(svc, parameters)
SVM.fit(X_train,y_train)
SVM.best_estimator_

ทีนี้ลองเทรนโมเดลแล้วประเมินผล

มากกว่า Logistic Regression

จะพบว่าความแม่นยำเพิ่มกว่าเดิม 2% และ f1-score เพิ่มขึ้นกว่าประมาณ 3%

แต่ถ้าคำนวณด้วย Confusion matrix (TP/FN/TN) ก็พบว่า F1-scoreลากไปถึง 0.87 ได้เลย

เห็นได้ชัดว่าดีกว่าเดิม

สรุปการทดลอง

จากการทดลองเบื้องต้น จะเห็นว่า SVM สามารถสร้างเส้นแบ่งที่มีความแม่นยำได้ดีกว่า Logistic Regression และยังสามารถทำ Multi Classification ได้อีกด้วย แต่เนื่องจากยุคสมัยนี้มีโมเดลตัวใหม่ๆที่แม่นยำกว่า SVM เกิดขึ้นมาใหม่มากมาย โดยในบทความถัดไปเราจะพูดถึงกันคือ Tree Model

บทความถัดไป :

Decision tree ใครเป็นเบาหวานอธิบายง๊ายง่าย

Github : https://github.com/peeratpop/Machine_Learning_101

Medium : https://medium.com/@pingloaf

Linkedin : https://www.linkedin.com/in/peerat-limkonchotiwat/

บทความนี้เป็นส่วนหนึ่งของบทความ

เริ่มเรียน Machine/Deep Learning 0–100 (Introduction)

--

--

Mr.P L
mmp-li
Editor for

Lifestyle of Programmer & IoT (Node-RED|Blynk) & Data Science (ML,DL,NLP) and Whatever I want to do | cat can coding too | Ph.D. -> VISTEC -> IST