Tag: scikit-learn

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

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