聚類演算法總結

2021-09-10 15:18:26 字數 3811 閱讀 4983

訓練深度學習網路分為監督學習無監督學習半監督學習強化學習

聚類演算法屬於無監督學習的範疇,總結的演算法有k-meansmean shiftdbscangmm凝聚層次聚類圖團體檢測

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-medians是與 k-means 有關的另乙個聚類演算法。區別:

不是用均值而是用類別的中值向量來重新計算類別中心。這種方法對異常值不敏感(因為使用中值),但對於較大的資料集要慢得多,因為在計算中值向量時,每次迭代都需要進行排序。

步驟2使用的曼哈頓距離l1距離。

k值的選擇:參考部落格,給出了很多方法,沒有完全看懂。????cross validation,有人用貝葉斯,還有的用bootstrap。

為什麼k-means使用l2距離??????

而距離度量又是另外乙個問題,比較常用的是選用歐式距離。可是這個距離真的具有普適性嗎?《模式分類》中指出歐式距離對平移是敏感的,這點嚴重影響了判定的結果。在此必須選用乙個對已知的變換(比如平移、旋轉、尺度變換等)不敏感的距離度量。書中提出了採用切空間距離(tangent distance)來替代傳統的歐氏距離。

均值漂移聚類是基於滑動視窗的演算法,它試圖找到資料點的密集區域。

演算法流程:

初始化,從乙個以c點(隨機選擇)為中心,r為半徑的滑動視窗(高維球)開始;

sh:以x為中心點,半徑為h的高維球區域;

k:包含在sh範圍內點的個數;

xi:包含在sh範圍內的點

滑動視窗通過將中心點移向視窗內點的均值,來移向更高密度區域;

mt為t狀態下求得的偏移均值;

xt為t狀態下的中心;

重複2,直到沒有滑動視窗不能容納更多的點;

重複1~3,建立多個滑動視窗,如果存在重疊,保留包含資料點最多的視窗,即為聚類結果,結束。

優點:與 k-means 聚類相比,不需要選擇簇數量,因為均值漂移自動發現這一點。

缺點:半徑r需要自己選擇,對聚類結果影響大。

應用:

演算法流程:

初始化,將所有資料點標記為未訪問;

從任意乙個未訪問的資料點開始,定義乙個當前簇,通過距離 ε提取鄰域;

如果鄰域中包含足夠數量的點(根據minpoints),則聚類開始,將所有鄰域中的點歸入當前簇,否則標記為「雜訊」。在這兩種情況下,該點都被標記為「已訪問」。

對當前簇中其它未訪問的點,重複2、3;

完成當前簇的聚類後,再完成其它簇的聚類,重複2~4;

優點:自動發現簇的數量,自動發現異常值。

缺點:

下圖是k-means的兩個失敗案例,k-means 的乙個主要缺點是它對於聚類中心均值的簡單使用,不能處理簇中心接近的情況。gmm首先假設資料點符合高斯分布。

演算法流程:

初始化,選擇簇的數量(如 k-means 所做的),隨機初始化每個簇的高斯分布引數。也可以通過快速檢視資料來嘗試為初始引數提供乙個好的猜測。

給定每個簇的高斯分布,計算每個資料點屬於乙個特定簇的概率。乙個點越靠近高斯的中心,它就越可能屬於該簇。

基於這些概率,使用em的優化演算法去更新每個簇的高斯分布引數(例如均值和標準差)。可以使用資料點位置的加權和來計算這些新引數,其中權重是資料點屬於該特定簇的概率。

重複步驟 2 和 3 直到收斂,其中分布在迭代中的變化不大。

優點:通過合併的方式來聚類,停止條件決定了簇的個數。

演算法流程:

初始化,我們首先將每個資料點視為乙個單一的簇,即如果我們的資料集中有 x 個資料點,那麼我們就有 x 個簇。計算每個簇之間的距離。

在每次迭代中,我們根據最短距離將兩個簇合併成乙個。

重新計算簇之間的距離。

重複步驟 2~3,直到只有乙個包含所有資料點的簇。這樣我們只需要選擇何時停止合併簇,來選擇最終需要多少個簇。

優點:缺點:

當我們的樣本以及樣本之間的關係可以被表示為乙個網路或圖(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演算法的比較

聚類演算法總結

最近要在spark上做乙個聚類的專案,資料量和類的個數都比較大。kmeans效果尚可,但是有點慢,因而重新看了下常用的演算法。最終選用mini batch kmeans,使用類似kmeans 的方法來初始化類中心。kmeans attention init centers randomize vs ...

聚類演算法總結

凸集 在歐氏空間中,凸集是對於集合內的每一對點,連線該對點的直線段上的每個點也在該集合內 非凸 non convex 資料 模擬上述可知 首先我們要了解衡量物件間差異的方法物件可能是乙個值,也可能是序列,聚類的方式的大都通過距離或相似度來衡量,常用距離如下 對於兩個物件的n維指標 x1,x2,xn ...

聚類 分類演算法 聚類演算法和分類演算法總結

k means 是一種典型的劃分聚類演算法,它用乙個聚類的中心來代表乙個簇,即在迭代過程中選擇的聚點不一定是聚類中的乙個點,該演算法只能處理數值型資料 k modes k means演算法的擴充套件,採用簡單匹配方法來度量分型別資料的相似度 k prototypes 結合了k means和k mod...