无监督学习 | KMeans与KMeans++原理
文章目錄
- 1. 原型聚類
- 1.1 KMeans
- 1.1.1 最小化成本函數
- 1.1.2 實例
- 1.2 KMeans++
- 1.2.1 KMeans++ 初始化實例
- 2. 在線可視化 KMeans
- 參考資料
相關文章:
機器學習 | 目錄
機器學習 | 聚類評估指標
機器學習 | 距離計算
無監督學習 | KMeans之Sklearn實現:電影評分聚類
無監督學習 | 層次聚類 之凝聚聚類原理及Sklearn實現
無監督學習 | DBSCAN 原理及Sklearn實現
無監督學習 | GMM 高斯混合聚類原理及Sklearn實現
1. 原型聚類
原型聚類亦稱“基于原型的聚類”(prototypr-based clustering)。此類算法假設聚類結構能通過一組原型刻畫,在現實聚類任務重及其常用。通常情形下,算法先對原型進行初始化,然后對原型進行迭代更新求解。采用不同的原型表示、不同的求解方式,將產生不同的算法,如 KMeans、LVQ、高斯混合。下面介紹 KMeans 算法,我們將在下一篇文章中介紹高斯混合算法。
“原型”是指樣本空間具有代表性的點
1.1 KMeans
給定樣本集 D=x1,x2,?,xmD={x_1,x_2,\cdots,x_m}D=x1?,x2?,?,xm?,“$k$ 均值”(k-means)算法針對聚類所得簇劃分 C=C1,C2,?,CkC={C_1,C_2,\cdots,C_k}C=C1?,C2?,?,Ck? 最小化平方誤差(殘差平方和 SES_ESE?):
E=∑i=1k∑x∈Ci∥x?μi∥22(1)E=\sum_{i=1}^k \sum_{x\in C_i}\|x-\mu_i\|_2^2 \tag{1}E=i=1∑k?x∈Ci?∑?∥x?μi?∥22?(1)
其中 μi=1∣Ci∣∑x∈Cix\mu_i=\frac{1}{|C_i|}\sum_{x\in C_i}xμi?=∣Ci?∣1?∑x∈Ci??x 是簇 CiC_iCi? 的均值向量。直觀來看,式 (1) 在一定程度上刻畫了簇內樣本圍繞簇均值向量的緊密程度,EEE 值越小則簇內樣本相似度越高。
1.1.1 最小化成本函數
最小化式 (1) 并不容易,找到它的最優解需考察樣本集 DDD 所有可能的簇劃分,這是一個 NP 難問題。因此,k均值算法采用了貪心策略,通過迭代優化來近似求解式 (2) 。算法流程如下圖所示:
圖1 k 均值算法其中第 1 行對均值向量進行初始化,在第 4-8 行對當前簇劃分迭代更新,第 9-16 行對均值向量迭代更新,若迭代更新后均值結果保持不變,則在第 18 行對當前簇劃分結果返回。
為避免運行時間過長,通常設置一個最大運行輪數(max_iter)或最小調整幅度閾值(tol),若達到最大輪數或調整幅度小于閾值,則停止運行。
1.1.2 實例
下面對西瓜數據集為例演示 k 均值算法的學習過程。為方便敘述,我們將變好為 iii 的樣本稱為 xix_ixi?,這是一個包含“密度”與“含糖率”兩個屬性值的二維向量。
表1 西瓜數據集假定聚類簇數(n_clusters)k=3k=3k=3 ,算法開始時隨機選取三個樣本 x6,x12,x27x_6,x_{12},x_{27}x6?,x12?,x27? 作為初始均值向量,即:
μ1=(0.403;0.237),μ2=(0.343;0.0999),μ3=(0.532;0.472)\mu_1=(0.403;0.237),\mu_2=(0.343;0.0999),\mu_3=(0.532;0.472)μ1?=(0.403;0.237),μ2?=(0.343;0.0999),μ3?=(0.532;0.472)
考察樣本 x1=(0.697;0.460)x_1=(0.697;0.460)x1?=(0.697;0.460) ,它與當前均值向量 μ1,μ2,μ3\mu_1,\mu_2,\mu_3μ1?,μ2?,μ3? 的距離分別為 0.369,0.506,0.166,因此 x1x_1x1? 將劃入簇 C3C_3C3? 中。類似的,對數據集中的所有樣本考慮一遍后,可得當前簇劃分為:
C1={x5,x6,x7,x8,x9,x10,x13,x14,x15,x17,x18,x19,x20,x23};C2={x11,x12,x16};C3={x1,x2,x3,x4,x21,x22,x24,x25,x26,x27,x28,x29,x30;}\begin{aligned} C_1& =\{x_5,x_6,x_7,x_8,x_9,x_{10},x_{13},x_{14},x_{15},x_{17},x_{18},x_{19},x_{20},x_{23}\}; \\ C_2& = \{x_{11},x_{12},x_{16}\};\\ C_3& = \{x_{1},x_{2},x_{3},x_{4},x_{21},x_{22},x_{24},x_{25},x_{26},x_{27},x_{28},x_{29},x_{30};\} \\ \end{aligned} C1?C2?C3??={x5?,x6?,x7?,x8?,x9?,x10?,x13?,x14?,x15?,x17?,x18?,x19?,x20?,x23?};={x11?,x12?,x16?};={x1?,x2?,x3?,x4?,x21?,x22?,x24?,x25?,x26?,x27?,x28?,x29?,x30?;}?
于是,可從 C1、C2、C3C_1、C_2、C_3C1?、C2?、C3? 分別求出新的均值向量:
μ1′=(0.473;0.214),μ2′=(0.394;0.066),μ3′=(0.623;0.388)\boldsymbol{\mu}_{1}^{\prime}=(0.473 ; 0.214), \boldsymbol{\mu}_{2}^{\prime}=(0.394 ; 0.066), \boldsymbol{\mu}_{3}^{\prime}=(0.623 ; 0.388) μ1′?=(0.473;0.214),μ2′?=(0.394;0.066),μ3′?=(0.623;0.388)
更新當前均值向量后,不斷重復上述過程,如下圖所示,第五輪迭代產生的結果與第四輪迭代相同,于是算法停止,得到最終的簇劃分:[1]
圖2 k 均值算法 4 輪迭代后的簇劃分標準 KMeans 的聚類結果受初始均值向量的影響,初始點不同,則聚類結果就有可能不同,因此可以通過多次隨機初始化(n_init)聚類中心最終選取最優結果。
1.2 KMeans++
由于 KMeans 算法的分類結果會收到初始點的選取而有所區別,因此提出了標準 KMeans 的改進 KMeans++。
其改進在于對初始均值向量的選擇,其他步驟同標準 KMeans 相同。初始均值向量選取的基本思路是:初始的聚類中心之間的相互距離要盡量遠。
初始均值向量選取如下:
步驟一:隨機選取一個樣本作為第一個聚類中心 c1;
步驟二:
-
計算每個樣本與當前已有類聚中心最短距離(即與最近一個聚類中心的距離),用 D(x)表示;
-
接著計算每個樣本被選為下一個聚類中心的概率:
D(x)2∑x∈XD(x)2(2)\frac{D(x)^2}{\sum_{x\in X}D(x)^2} \tag{2}∑x∈X?D(x)2D(x)2?(2)
這個值越大,表示被選取作為聚類中心的概率較大;
- 最后,用輪盤法選出下一個聚類中心;
步驟三:重復步驟二,直到選出 k 個聚類中心。[2]
1.2.1 KMeans++ 初始化實例
假設經過步驟一后 6 號點被選擇為第一個初始聚類中心,那在進行步驟二時每個樣本的 D(x)D(x)D(x) 和被選擇為第二個聚類中心的概率 P(x)P(x)P(x) 如下表所示:
表2 第二個聚類中心的選擇其中的 P(x)P(x)P(x) 就是每個樣本被選擇為下一個聚類中心的概率。因此 P(x)P(x)P(x) 可以看作 PDF,Sum 可以看作 CDF,是 P(x)P(x)P(x) 的累加和,用于輪盤法選擇出第二個聚類中心。
輪盤法方法就是隨機產生一個 0~1 之間的隨機數,判斷隨機數屬于 Sum 行的哪個區間,那么該區間對應的序號就是被選擇出來的第二個聚類中心了。例如 1 號點的區間為 [0,0.2)[0,0.2)[0,0.2) ,2 號點的區間為 [0.2,0.525)[0.2,0.525)[0.2,0.525)。
從表中可以直觀的看到第二個初始聚類中心有 90% 的概率落在 1~4 號點。而這 4 個點正好是離第一個聚類中心 6 號點較遠的四個點。這也驗證了 KMeans++ 的思想:即離當前已有聚類中心較遠的點有更大的概率被選為下一個聚類中心。
當 k 值大于 2 時,每個樣本會有多個距離,需要取最小的那個距離作為 D(x)D(x)D(x)。
重復步驟 2 直到選出 k 個聚類中心,并利用這 k 個初始聚類中心來運行標準 KMeans 算法。[3]
2. 在線可視化 KMeans
這個網站可以通過自己設定初始值方式以及數據分布,來進行迭代過程的可視化,有興趣的也可以試試看。
參考資料
[1] 周志華. 機器學習[M]. 北京: 清華大學出版社, 2016: 202-205.
[2] 寒杰士.[ML] K-means與K-means++[EB/OL].https://www.cnblogs.com/wang2825/articles/8696830.html, 2018-04-02.
[3] 0過把火0.[ML] K-means++[EB/OL].https://www.jianshu.com/p/680dbffad345, 2018-10-19.
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的无监督学习 | KMeans与KMeans++原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 这个为生信学习打造的开源Linux/Ba
- 下一篇: pandas学习笔记三之赋值操作