訓練深度學習網絡分爲監督學習
、無監督學習
、半監督學習
、強化學習
。
聚類算法
屬於無監督學習的範疇,主要的六大算法有K-Means
、Mean Shift
、DBSCAN
、GMM
、凝聚層次聚類
、圖團體檢測
。
K-Means(K 均值聚類)
K-Means 是最知名的聚類算法,簡單地使用均值。
算法流程:
- 初始化,隨機選取k箇中心點;
- 遍歷所有數據,將每個數據劃分到最近的中心點中(歐式距離L2距離);
- 計算每個聚類的平均值,並作爲新的中心點;
- 重複2-3,直到這k箇中心點不再變化(收斂了),或執行了足夠多的迭代,結束。
時間複雜度:O(I * n * k * m)
空間複雜度:O(n * m)
其中n爲數據量,I爲迭代次數,k爲類別數,m爲數據點的維數。一般I,k,m均可認爲是常量,所以時間和空間複雜度可以簡化爲O(n),即線性的。
優點:速度快,真正在做的是計算點和組中心之間的距離。
缺點:
- k值需要我們自己來選擇,理想情況下,我們希望聚類算法能夠幫我們解決分多少類的問題,因爲它的目的是從數據中獲得一些見解。
- 當數據數量不是足夠大時,初始化分組很大程度上決定了聚類,影響聚類結果。
- 使用算術平均值對outlier不魯棒。可以換成
K-Medians
來客服這一點。
K-Means的缺點
K-Medians
是與 K-Means 有關的另一個聚類算法。區別:
- 不是用均值而是用類別的中值向量來重新計算類別中心。這種方法 對異常值不敏感(因爲使用中值),但對於較大的數據集要慢得多,因爲在計算中值向量時,每次迭代都需要進行排序。
- 步驟2使用的曼哈頓距離L1距離。
K值的選擇:參考博客,給出了很多方法,沒有完全看懂。????Cross Validation,有人用貝葉斯,還有的用bootstrap。
爲什麼K-Means使用L2距離??????
而距離度量又是另外一個問題,比較常用的是選用歐式距離。可是這個距離真的具有普適性嗎?《模式分類》中指出歐式距離對平移是敏感的,這點嚴重影響了判定的結果。在此必須選用一個對已知的變換(比如平移、旋轉、尺度變換等)不敏感的距離度量。書中提出了採用切空間距離(tangent distance)來替代傳統的歐氏距離。
Mean Shift(均值漂移聚類)
均值漂移聚類是基於滑動窗口
的算法,它試圖找到數據點的密集區域。
算法流程:
- 初始化,從一個以C點(隨機選擇)爲中心,r爲半徑的滑動窗口(高維球)開始;
Sh:以x爲中心點,半徑爲h的高維球區域;
k:包含在Sh範圍內點的個數;
xi:包含在Sh範圍內的點 - 滑動窗口通過將中心點移向窗口內點的均值,來移向更高密度區域;
Mt爲t狀態下求得的偏移均值;
xt爲t狀態下的中心; - 重複2,直到沒有滑動窗口不能容納更多的點;
- 重複1~3,創建多個滑動窗口,如果存在重疊,保留包含數據點最多的窗口,即爲聚類結果,結束。
優點:與 K-means 聚類相比,不需要選擇簇數量,因爲均值漂移自動發現這一點。
缺點:半徑r需要自己選擇,對聚類結果影響大。
應用:
- 聚類(K均值聚類)
- 圖像分割(將圖像映射到特徵空間,對採樣點進行均值漂移聚類)
- 對象輪廓檢驗(光線傳播算法)
- 目標跟蹤(求解最優化Bhattacharya係數函數)
DBSCAN(基於密度的聚類方法)
全名Density-Based Spatial Clustering of Applications with Noise,是一個基於密度的聚類算法。
算法流程:
- 初始化,將所有數據點標記爲未訪問;
- 從任意一個未訪問的數據點開始,定義一個當前簇,通過距離 ε提取鄰域;
- 如果鄰域中包含足夠數量的點(根據minPoints),則聚類開始,將所有鄰域中的點歸入當前簇,否則標記爲「噪聲」。在這兩種情況下,該點都被標記爲「已訪問」。
- 對當前簇中其它未訪問的點,重複2、3;
- 完成當前簇的聚類後,再完成其它簇的聚類,重複2~4;
優點:自動發現簇的數量,自動發現異常值。
缺點:
- 如果樣本集的密度不均勻、聚類間距差相差很大時,聚類質量較差。
這是因爲當密度變化時,用於識別鄰域點的距離閾值 ε 和 minPoints 的設置將會隨着簇而變化。 - DBScan不能很好反映高維數據。
在高維數據中,距離閾值 ε 變得難以估計。
用高斯混合模型(GMM)的最大期望(EM)聚類
下圖是K-Means的兩個失敗案例,K-Means 的一個主要缺點是它對於聚類中心均值的簡單使用,不能處理簇中心接近的情況。GMM首先假設數據點符合高斯分佈。
算法流程:
- 初始化,選擇簇的數量(如 K-Means 所做的),隨機初始化每個簇的高斯分佈參數。也可以通過快速查看數據來嘗試爲初始參數提供一個好的猜測。
- 給定每個簇的高斯分佈,計算每個數據點屬於一個特定簇的概率。一個點越靠近高斯的中心,它就越可能屬於該簇。
- 基於這些概率,使用EM的優化算法去更新每個簇的高斯分佈參數(例如均值和標準差)。可以使用數據點位置的加權和來計算這些新參數,其中權重是數據點屬於該特定簇的概率。
- 重複步驟 2 和 3 直到收斂,其中分佈在迭代中的變化不大。
優點:
- GMMs 比 K-Means 在簇協方差方面更靈活;因爲標準差參數,簇可以呈現任何橢圓形狀,而不是被限制爲圓形。K-Means 實際上是 GMM 的一個特殊情況,這種情況下每個簇的協方差在所有維度都接近 0。
- 因爲 GMMs 使用概率,所以每個數據點可以有很多簇。因此如果一個數據點在兩個重疊的簇的中間,我們可以簡單地通過說它百分之 X 屬於類 1,百分之 Y 屬於類 2 來定義它的類。
凝聚層次聚類
通過合併的方式來聚類,停止條件決定了簇的個數。
算法流程:
- 初始化,我們首先將每個數據點視爲一個單一的簇,即如果我們的數據集中有 X 個數據點,那麼我們就有 X 個簇。計算每個簇之間的距離。
- 在每次迭代中,我們根據最短距離將兩個簇合併成一個。
- 重新計算簇之間的距離。
- 重複步驟 2~3,直到只有一個包含所有數據點的簇。這樣我們只需要選擇何時停止合併簇,來選擇最終需要多少個簇。
優點:
- 層次聚類不需要我們指定簇的數量,我們甚至可以選擇哪個數量的簇看起來最好,因爲我們正在構建一棵樹;
- 對於距離度量標準的選擇並不敏感。
缺點:
- 層次聚類的這些優點是以較低的效率爲代價的,因爲它具有 O(n³) 的時間複雜度。
圖團體檢測(Graph Community Detection)
當我們的樣本以及樣本之間的關係可以被表示爲一個網絡或圖(graph)時,可能存在這樣的需求——我們想找出來網絡中聯繫比較”緊密”的樣本。
舉個例子,在社交網站中,用戶以及用戶之間的好友關係可以表示成下面的無向圖,圖中的頂點表示每個用戶,頂點之間的邊表示用戶是否爲好友關係。
算法流程:
- 初始化,每個頂點自己的獨自構成一個聚類,然後計算整個網絡的模塊性M;
- 嘗試選擇兩個聚類融合到了一起,計算由此造成的模塊性改變ΔM。
- 取ΔM出現了最大增長的兩個聚類進行融合。然後爲這個聚類計算新的模塊性 M,並記錄下來。
- 不斷重複第2步和第3步,每一次都融合一對聚類,得到ΔM的最大增益,然後記錄新的聚類模式及其相應的模塊性M。
- 直到所有的頂點都被分組成了一個聚類時爲止。然後該算法會檢查這個聚類過程中的所有記錄,然後找到其中返回了最高M值的聚類模式,這就是算法得到的聚類結構。
解釋模塊性:
L表示圖包含的邊的數量,N表示頂點數量,ki表示頂點i的度(degree),Aij的值爲鄰接矩陣中的值(真實情況下存在連接爲1,否則爲0),ci表示頂點i的聚類,δ則是克羅內克函數(Kronecker-delta function)。
克羅內克函數δ的邏輯很簡單,兩個參數相等則返回1,不等則返回0。所以如果頂點i,j屬於同一聚類,則δ(ci,cj)返回1,否則返回0。
ki*kj/2L
可以理解爲當該網絡是隨機分配的時候頂點i和j之間的預期邊數,當ki,kj都比較小的時候,連接頂點i,j的邊出現的概率就越小,描述兩個頂點關係準確性也高。
Aij−ki*kj/2L
可以理解爲網絡的真實結構和隨機組合時的預期結構之間的差。研究它的值可以發現,當 Aij=1且 ki*kj/2L
很小時,其返回的值最高。這意味着,當在頂點i和j之間存在連接,但是i, j之間存在連接的預期又比較小的時候,得到的值更高。再有,如果把這樣的兩個頂點分到一個聚類,則能提高網絡的模塊性。
優點:在典型的結構化數據中和現實網狀數據都有非常好的性能。
缺點:它的侷限性主要體現在會忽略一些小的集羣,且只適用於結構化的圖模型。
Ref
數據科學家必須瞭解的六大聚類算法:帶你發現數據之美
均值漂移(Meanshift)算法
GMM公式+代碼
GMM算法k-means算法的比較