ก่อนหน้านี้เคยได้แนะนำการสร้างข้อมูลเป็นกลุ่มๆก้อนๆและพระจันทร์เสี้ยวเพื่อใช้ทดสอบแบบจำลองการเรียนรู้ของเครื่องไป
https://phyblas.hinaboshi.com/20161127 https://phyblas.hinaboshi.com/20171202 คราวนี้มาลองข้อมูลทดสอบอีกแบบ คือ make_circles เอาไว้สร้างข้อมูลที่มีการกระจายตัวเป็นวงสองวงซ้อนกันคล้ายไข่ดาว
ตัวอย่างการใช้ ถ้าใช้โดยไม่ได้ปรับแต่งอะไร ก็จะได้ ๑๐๐ จุด อยู่วงในและวงนอกอย่างเป็นระเบียบแบบนี้
ถ้าใส่ตัวเลือกเพิ่มเติมเข้าไปสิ่งที่สามารถปรับแต่งได้มีดังนี้
|
ความหมาย |
ค่าตั้งต้น |
n_samples |
จำนวนข้อมูลทั้งหมด |
100 |
shuffle |
จะสุ่มการจัดเรียงแต่ละกลุ่มหรือไม่ |
True |
noise |
ขนาดของคลื่นรบกวน |
0 |
factor |
อัตราส่วนขนาดวงในต่อวงนอก |
0.8 |
random_state |
หมายเลขชุดของการสุ่ม |
None |
ลองวาดภาพเทียบกรณีที่ค่า factor และ noise ต่างกันออกไปเทียบกันดู
ข้อมูลลักษณะแบบนี้เหมาะเอาไว้ใช้เป็นตัวอย่างเรื่องการใช้ลูกเล่นเคอร์เนล (kernel trick) หรือการแบ่งด้วยวิธีการที่ไม่เป็นเชิงเส้น
ต่อมา ลองสร้างชุดข้อมูลขึ้นมาแล้วทดสอบการแบ่งกลุ่มข้อมูลนี้ด้วยแบบจำลองการแบ่งกลุ่มที่ต่างกัน ๔ แบบดู
-
การถดถอยโลจิสติก (逻辑回归, logistic regression)
-
วิธีการเพื่อนบ้านใกล้สุด k ตัว (K-近邻算法, k-nearest neighbor, KNN)
-
เครื่องเวกเตอร์ค้ำยัน (支持向量机, support vector machine, SVM)
-
ป่าสุ่ม (随机森林, random forest)
ทั้งหมดนี้ก็ใช้ sklearn ทำทั้งหมด
จะเห็นได้ว่าแต่ละวิธีมีลักษณะการแบ่งที่ต่างกันออกไป
- การถดถอยโลจิสติกจะแบ่งได้แต่เส้นตรงเท่านั้น จึงไม่สามารถใช้ประโยชน์ในกรณีนี้ได้เลย
- เพื่อนบ้านใกล้สุด k ตัวจะแบ่งได้เส้นหยึกหยักไม่เรียบ
- SVM เมื่อใช้เคอร์เนล RBF จึงสามารถแบ่งเป็นเส้นโค้งเรียบ ดูแล้วแบ่งได้เป็นธรรมชาติที่สุด
- ป่าสุ่ม จะได้เส้นแบ่งตามแนวตั้งแนวนอนเป็นก้อนๆไม่สม่ำเสมอ