Machine Learning(EP.4)- ตัวจำแนกแบบไบรารี่ (Binary Classifier)

KongRuksiam Studio
3 min readJan 19, 2020

--

เส้น Hyperplane แบ่งข้อมูลออกเป็น 2 ส่วน

ตัวจำแนกแบบไบนารี (Binary Classifier) เป็นวิธีการแบ่งข้อมูลออกเป็น 2 กลุ่ม (Binary Class) จากภาพตัวอย่างจะแบ่งข้อมูลออกเป็น 2 กลุ่ม คือ กลุ่มสีแดงและกลุ่มสีน้ำเงิน (Class สีแดง และ Class สีน้ำเงิน)โดยใช้เส้น Hyperplane
(เส้นสมมุติ | เส้น Linear Regression) แบ่งกลุ่มข้อมูลทั้ง 2 กลุ่มแยกออกจากกัน

Target MNIST Dataset

ภายใน LAB จะยกตัวอย่างเพื่อให้เห็นการแบ่งกลุ่มของข้อมูลโดยใช้ MNIST Dataset ว่าข้อมูลกลุ่มใดแสดงกลุ่มตัวเลข 0–9 โดยข้อมูลทั้งหมดจะมี 70,000 ชุดจะต้องเขียนโปรแกรมแบ่งข้อมูลออกเป็น 2 ส่วนได้แก่
- Training Set 60,000 ชุด
- Test Set 10,000 ชุด

จากบทที่ 1 :การแบ่งชุดข้อมูล MNIST Dataset

  • ข้อมูลชุดเรียนรู้ (Training Set) จัดเรียงและแบ่งกลุ่มเป็น Class 0 — Class 9
  • ข้อมูลชุดทดสอบ (Test Set) จัดเรียงและแบ่งกลุ่มเป็น Class 0 — Class 9

Gradient Descent Algorithm (GD)— อัลกอริทึมสำหรับใช้หาจุดต่ำสุดหรือสูงสุดของฟังก์ชั่นที่กำหนดขึ้นมาโดยใช้วิธีการวนหาค่าที่ทำให้ได้ค่าต่ำสุดจากการคำนวณความชัน ณ จุดที่เราอยู่แล้วพยายามเดินไปทางตรงข้ามกับกับความชันนั้น

จากแผนภาพอธิบายได้ดังนี้
หากเรายืนอยู่บนยอดภูเขาไฟ(สีแดง) เราก็จะวนหาทางลงเพื่อเดินทางไปยังทะเล (สีน้ำเงิน)แต่ทะเลมีหลายบริเวณ หากเราเดินทางลงมาจากจุดที่ต่างกันก็จะเห็นทะเลคนละแบบ เช่นเราอยู่ที่จุด A ก็จะเจอทะเลที่น้ำไม่ลึกมาก (Local Minima) ถ้าเราเดินอีกฝั่งหนึ่งก็จะเจอทะเลอีกแบบคือ ทะเลน้ำลึก (Global Minina)

ความซับซ้อนของอัลกอริทึม

  • Best case คือ จำนวนการวนรอบที่น้อยที่สุด
  • Worst case คือ จำนวนวนรอบที่มากที่สุด

รูปแบบการใช้งาน

  • คำนวนข้อมูลทั้งหมดทีเดียว (Full Batch Gradient Descent Algorithm)
  • คำนวนข้อมูลแค่บางส่วน (Stochastic Gradient Descent Algorithm)

จาก LAB ตัวอย่างเนื้อหา Linear Regression การหาอุณหภุมิสูงสุดต่ำสุด เรื่องการวัดประสิทธิภาพโมเดลยังมี Error อยู่พอสมควรซึ่งวัดได้จากค่า MSE (Mean Square Error) ตัว Gradient Descent จะช่วยทำให้โมเดลของเรามีค่า Loss Function ลงไปยังจุดที่ใกล้ 0 มากที่สุด (จุดต่ำสุด) เพื่อให้ได้โมเดลที่มีประสิทธิภาพมากยิ่งขึ้น

ใน LAB จะยกตัวอย่างจะใช้งาน Stochastic Gradient Descent (SGD) ภายในเนื้อหา Binary Classifier ในการทำนายผลข้อมูลของตัวเลขอารบิก
สามารถเข้าดูเนื้อหา คลิกที่นี่!

ทำไมต้องใช้ Stochastic Gradient Descent ใน LAB
ทำนายผลข้อมูลของตัวเลขอารบิก

การวัดประสิทธิภาพ

Cross-validation Test การทดสอบประสิทธิภาพของโมเดลด้วยวิธี Cross-validation นี้จะทําการแบ่งข้อมูลออกเป็นหลายๆส่วน (k) เช่นกำหนดให้ k-fold=3 แสดงว่ามีการแบ่งข้อมูลออกเป็น 3 ส่วน หรือการทดลอง 3 ครั้งโดยผลลัพธ์ที่ได้จะบอก ผลการทดลองครั้งที่ 1 , 2 และ 3 ตามลำดับ

การประเมินประสิทธิภาพด้วยอัลกอริทึม Confusion Matrix

import matplotlib.pyplot as plt
import itertools
def displayConfusionMatrix(cm,cmap=plt.cm.GnBu):
classes=["Other Number","Number 5"]
plt.imshow(cm,interpolation='nearest',cmap=cmap)
plt.title("Confusion Matrix")
plt.colorbar()
trick_marks=np.arange(len(classes))
plt.xticks(trick_marks,classes)
plt.yticks(trick_marks,classes)
thresh=cm.max()/2
for i , j in itertools.product(range(cm.shape[0]),range(cm.shape[1])):
plt.text(j,i,format(cm[i,j],'d'),
horizontalalignment='center',
color='white' if cm[i,j]>thresh else 'black')
plt.tight_layout()
plt.ylabel('Actually')
plt.xlabel('Prediction')
plt.show()

ใน Machine Learning หลังจากที่เราเราเทรนโมเดลใช้ในงานต่าง ๆจะมีการคำนวน Metrics เพื่อแสดงผลให้ทราบว่าโมเดลนั้น ๆ ทำงานได้ดีแค่ไหนซึ่งจะยกตัวอย่างโดยใช้ Accuracy, Precision, Recall และ F1 Score
ถ้าค่าความแม่นยำมากกว่า 90% ขึ้นไปสำหรับข้อมูลขนาดเล็กๆก็ถือว่าโมเดลมีประสิทธิภาพดี แต่ในบางกรณีข้อมูลของเรามีจำนวนเยอะมากความแม่นยำก็อาจจะลดลงบ้างถือเป็นเรื่องปกติ

ในส่วนของ Accuracy, Precision, Recall และ F1 Score จะอาศัยข้อมูลจาก Confusion Matrix มาคำนวณค่า

คำจำกัดความ

True Positive (TP) — ทายว่าถูกต้อง แล้วตอบตรงตามที่ทายไว้
True Negative (TN) — ทายว่าไม่ถูกต้อง แล้วตอบตรงตามที่ทายไว้
False Positive (FP) — ทายว่าถูกต้อง แต่คำตอบคือไม่ถูกต้อง
False Negative (FN)- ทายว่าไม่ถูกต้อง แต่คำตอบคือถูกต้อง

🌎 ติดตามข่าวสารเพิ่มเติมได้ที่
Facebook | YouTube | TikTok

--

--

KongRuksiam Studio
KongRuksiam Studio

Written by KongRuksiam Studio

เรียนรู้การเขียนโปรแกรมนอกห้องเรียน