K-means類聚算法從原理到實戰(zhàn)

K-means類聚算法(K-means clustering)是一種原理簡單、功能強大且應(yīng)用廣泛的無監(jiān)督機器學(xué)習(xí)技術(shù)。無監(jiān)督機器學(xué)習(xí)技術(shù)是指無需標(biāo)簽即可從數(shù)據(jù)集中做推理,得到推理結(jié)果。

K-means類聚算法的目標(biāo)是將數(shù)據(jù)集中的數(shù)據(jù)根據(jù)相似性分類,類別數(shù)為k,每類會有一個聚類中心(centroid)。數(shù)據(jù)間的相似性通常用“歐幾里得距離(Euclidean Distance)”來定義,當(dāng)然也可以設(shè)計其它的度量方式。

K-means 的算法步驟為:

  1. 定義目標(biāo)聚類數(shù)K,例如,k=3
  2. 隨機初始化的 k 個聚類中心(controids)
  3. 計算每個數(shù)據(jù)點到K個聚類中心的Euclidean Distance,然后將數(shù)據(jù)點分到Euclidean Distance最小的對應(yīng)類聚中心的那類
  4. 針對每個類別,重新計算它的聚類中心;
  5. 重復(fù)上面 3-4 兩步操作,直到達到某個中止條件(迭代次數(shù)、最小誤差變化等)

K-means算法的可視化,請參考:https://stanford.edu/class/engr108/visualizations/kmeans/kmeans.html

K-means算法的可視化

K-means算法可以直接調(diào)用sklearn的KMeans類來實現(xiàn),范例代碼如下:

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

df = pd.DataFrame({"x": [25, 34, 22, 27, 33, 33, 31, 22, 35, 34, 67, 54, 57, 43, 50, 57, 59, 52, 65, 47, 49, 48, 35, 33, 44, 45, 38, 43, 51, 46],
                   "y": [79, 51, 53, 78, 59, 74, 73, 57, 69, 75, 51, 32, 40, 47, 53, 36, 35, 59, 59, 50, 25, 20, 14, 12, 20, 5,  29, 27, 8,  7]
})

kmeans = KMeans(n_clusters=3).fit(df)
centroids = kmeans.cluster_centers_
# 打印類聚中心
print(type(centroids), centroids)

# 可視化類聚結(jié)果
fig, ax = plt.subplots()
ax.scatter(df['x'],df['y'],c=kmeans.labels_.astype(float),s=50, alpha=0.5)
ax.scatter(centroids[:, 0], centroids[:, 1], c='red', s=50)
plt.show()
K-means范例運行結(jié)果
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容