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 แต่ความถูกต้องอาจจะไม่มากนัก เหมาะสำหรับข้อมูลจำนวนมาก ๆ ที่ต้องการทราบว่า มีการกระจายตัวอย่างไรในเบื้องต้น

ในเบื้องต้น ก็ขอให้ทราบถึง วิธีการใช้งานคร่าว ๆ ง่าย ๆ ก่อนครับ