1. 程式人生 > >無監督學習 —— 聚類

無監督學習 —— 聚類

無監督學習 —— 聚類

聚類

聚類的目標是發現數據中的相似群,稱為簇(cluster),保證簇內間距小,簇間距離大。
聚類不需要對資料進行標註,因而被看做是無監督學習。

原型聚類,基於資料劃分

K-means

K-means是硬聚類的,一個數據點只能屬於一個簇。
K-means演算法將資料劃分為K個簇,K由使用者來指定,每一個簇有一箇中心,centroid
簇的中心最初是隨機設定的,因而容易陷入區域性最優解。

輸入:資料$D={x_1,x_2,...,x_n}$,簇數目K
1、隨機選取K個種子資料點作為K個簇中心
2、repeat
3、  foreach x \in D do
4、      計算每一個x與每一個簇中心的距離
5、      將x劃分到距離最近的簇中心
6、  endfor
7、  用當前的簇內點重新計算K個簇的中心位置
8、until(達到終止條件,收斂,當前均值向量都未更新)

K-means是一個【資料劃分】和【簇中心】交替更新的演算法,首先固定簇中心,對資料進行劃分,根據劃分結果更新簇中心,進行下一輪劃分,交替進行,收斂時停下來,是一種alternative optimization的方式。K-means使用greedy的方法對於資料進行劃分。

K-means的終止條件:
①資料不再(很少)被重新指定到不同的簇
②中心位置不在變化或者變化很小
③SSE(Sum of Squared Error)不再減少
\[SSE=\sum^K_{k=1} \sum_{x_i \in C_k} dist(x_i,m_k) \]
dist是資料點與簇中心的距離。

然而正是由於是利用貪心的方法進行資料劃分,導致初始選擇的資料中心對最終結果影響很大,不同的初始中心可能會得到不同的結果,當K的值較小的時候可以通過多次隨機選取初始值來進行訓練,以得到更好的效果。

K-means易於理解和實現,高效,時間複雜度較低。但容易陷入區域性最優解,一般來說要求特徵值為數值型,類別型特徵不好求解mean,另外K值需要在訓練前確定,這個就需要經驗來決定然後再不斷調整,對於離群點敏感,距離其他資料點很遠的點會因為在訓練時去適應這個很遠的點導致結果出現偏差。

對聚類結果的評價

聚類問題沒有統一的評價標準,利用間接評價的方式:通過評價使用聚類結果後對其他應用任務的改進幅度來對聚類進行評價。
也可以直接對聚類結果進行評價:假設資料是有標註的,每一個簇是一個類別,利用標註好的資料對聚類演算法進行評價,根據聚類結果與標註資料構造混淆矩陣(Confusion Matrix),
混淆矩陣




也可以通過聚類結果的總體熵或總體純度來評價聚類結果。
聚類結果的總體熵,\(Pr(c_j)\)表示\(D_i\)中標註為\(c_j\)的資料比例:
\[H_{total}(D)=\sum^k_{i=1} \frac{|D_i|}{|D|}H(D_i)\]
\[H(D_i)=\sum_{i=1}^{k}Pr(c_j)\log(Pr(c_j))\]
聚類結果的總體純度,\(purity(D_i)=\max_j Pr(c_j)\)
\[purity_{total}(D)=\sum_{i=1}^k \frac{|D_i|}{|D|}purity(D_i)\]

學習向量量化(Learning Vector Quantization)

【待整理】

高斯混合聚類

【待整理】

密度聚類

DBSCAN

【待整理】

層次聚類

AGNES

【待整理】

參考文獻

1、混淆矩陣(Confusion Matrix) https://www.jianshu.com/p/0fc8a0b784f1