K-MEANS算法
聚類概念:
1.無監督問題:我們手里沒有標簽
2.聚類:相似的東西分到一組
3.難點:如何評估,如何調參
4.要得到簇的個數,需要指定K值
5.質心:均值,即向量各維取平均即可
6.距離的度量:常用歐幾里得距離和余弦相似度
7.優化目標:min$$ min \sum_{i=0}^k \sum_{C_j=0} dist(c_i,x)^2$$
工作流程:
(a)讀入數據
(b)隨機初始化兩個點
(c)計算每個點到質心的距離,離那個質心距離近,就暫時歸為那類
(d)重新計算評估指標,更新質心,執行c動作
(e)重新更新質心
(f)重新計算質心的距離,進行分類,直到質心不在發生變化
優勢:
簡單、快速、適合常規數據集
劣勢:
K值難確定
復雜度與樣本呈線性關系
很難發現任意形狀的簇,如下圖:
sklearn實現
#數據讀入
# beer dataset import pandas as pd beer = pd.read_csv('data.txt',sep=' ') beer
X = beer[["calories","sodium","alcohol","cost"]]
from sklearn.cluster import KMeans km = KMeans(n_clusters = 3).fit(X) km2 = KMeans(n_clusters = 2).fit(X)
print(km.labels_)
array([0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 2, 0, 0, 0, 1, 0, 0, 1, 2])
beer['cluster'] = km.labels_ beer['cluster1'] = km2.labels_ beer.sort_values('cluster') beer.sort_values('cluster1')