
Kaggle – วิธีการใช้ K-Means บนข้อมูล iris
ต่อจาก Kaggle – วิธีการใช้ Logistic Regression บนข้อมูล Iris ซึ่งเป็น Machine Learning แบบ Supervised Learning คราวนี้ ลองมาดูว่า ถ้า เราไม่รู้ว่า ข้อมูลแบบออกเป็นกี่กลุ่ม จะให้ Machine แบ่งกลุ่มได้อย่างไร หนึ่งในวิธีที่ได้รับความนิยมคือ K-Means Clustering มีคลิป ที่อยากให้ลองชม เพื่อความเข้าใจ StatQuest: K-Means Clustering เริ่มกันเลย 1. นำเข้าข้อมูล และ Package ที่ต้องการ import pandas as pd import numpy as np from sklearn.cluster import KMeans iris = pd.read_csv(‘../input/mydata2/4-iris.data’) data=iris.values X=data[:,[0,1]] Y = data[:,4] 2. แสดงผลจากข้อมูล 2 มิติ ของ Sepal Length กับ Sepal Width จำแนกสีของจุดที่พลอตตาม Species import matplotlib.pyplot as plt # Truth label = set(iris[‘species’]) for i in label: species=iris[iris[‘species’]==i] plt.scatter(species[‘sepal_length’], species[‘sepal_width’]) plt.show() ผลที่ได้ 3. จากนั้น ลองใช้ K-Means จำแนก Cluster สมมุติเราไม่รู้ว่ามีกี่ชนิด เริ่มต้นจาก 2 ก่อน from sklearn.cluster import KMeans kmeans = KMeans(n_clusters=2).fit_predict(X) kmeans ค่า kmeans จะได้ผลประมาณนี้ (คือ สิ่งที่ Machine จำแนกให้) 4. นำข้อมูลมา Plot c=np.insert(X,2,kmeans, axis=1) import matplotlib.pyplot as plt # Kmeans Predict label = set(kmeans) for i in label: species=c==i] plt.scatter(species[:,0], species[:,1]) plt.show() ผลที่ได้ 5. ลองปรับค่า n_cluster=3 from sklearn.cluster import KMeans kmeans = KMeans(n_clusters=3).fit_predict(X) kmeans3 ผลที่ได้ 5. ลองปรับค่า n_cluster=4 from sklearn.cluster import KMeans kmeans = KMeans(n_clusters=4).fit_predict(X) kmeans3 ผลที่ได้ จะเห็นได้ว่า K-Means สามารถแบ่งกลุ่มของข้อมูลได้ โดยไม่ต้องอาศัย Label แต่ความถูกต้องอาจจะไม่มากนัก เหมาะสำหรับข้อมูลจำนวนมาก ๆ ที่ต้องการทราบว่า มีการกระจายตัวอย่างไรในเบื้องต้น ในเบื้องต้น ก็ขอให้ทราบถึง วิธีการใช้งานคร่าว ๆ ง่าย ๆ ก่อนครับ