Liz's Blog

Python學習筆記#17:機器學習之K Means Clustering實作篇

| Comments

K Means Clustering是非監督式學習的一種,依照群聚資料的相似度來分類。非監督式學習的特點在於不需預測結果,重點在於找出特定模式。在K Means Clustering演算法中,我們會先定義總共有幾個分群。演算法會隨機分佈任一觀察值到群組內,找到每個群組的centroid,演算法會重複上面這兩個過程,直到組內差異達到最小。組內差異是計算資料點和各自群組中心的距離總和。K值代表共多少分群,真實的資料常常會很難選擇最好的K值,可以選擇elbow method,也就是測試一連串的K值後,再來選擇最好的值。

Udemy
課程名稱:Python for Data Science and Machine Learning Bootcamp
講師:Jose Portilla

1.載入套件

import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline

2.匯入scikit learn中的make_blobs資料集

from sklearn.datasets import make_blobs

#建立資料,選擇樣本數、變數、群組、群組標準差、隨機種子
data = make_blobs(n_samples=200,n_features=2,centers=4,cluster_std=1.8,random_state=101)

3.視覺化資料

#在data[0]中,可以看到這是一個二維陣列
#[:,0]=[第一橫排:最後橫排 ,第0行(或稱第一個變數)]
#[:,1]=[第一橫排:最後橫排 ,第1行(或稱第二個變數)]
#data[1]代表分群結果
plt.scatter(data[0][:,0],data[0][:,1],c=data[1],cmap='rainbow')

4.載入KMeans建立Clusters(群組)

from sklearn.cluster import KMeans

#設定分成四組(因為知道原始資料是分成四組,但改成其他分組數字,就可以從下方圖表比較出差異)
kmeans = KMeans(n_clusters=4)

#使用KMeans演算法來建立模型
kmeans.fit(data[0])

#因為分成四組,所以centroid的點也有四個
kmeans.cluster_centers_

#分群結果
kmeans.labels_

5.製圖比較使用KMeans及原始分群結果

#plt.subplot(橫排數量,每個橫排有幾個圖並列)
#sharey=True共享y軸
f, (ax1, ax2) = plt.subplots(1, 2, sharey=True,figsize=(10,6))
ax1.set_title('K Means')
ax1.scatter(data[0][:,0],data[0][:,1],c=kmeans.labels_,cmap='rainbow')
ax2.set_title("Original")
ax2.scatter(data[0][:,0],data[0][:,1],c=data[1],cmap='rainbow')

Comments

comments powered by Disqus