聚類算法彙總

聚類算法彙總

標籤(空格分隔): 機器學習


作爲無監督領域(unsupervised)一個太過famous的算法了,聚類(clustering)就是對大量未知標註的數據集,按照數據的內在相似性將數據集劃分爲多個類別,使類別內的數據相似度較大而類別間的數據相似度較小. 然而,裏面仍然有很多需要注意的地方,對於聚類本身,目前也有很多改進版本了,所以還是需要總結一下的。

相似度的度量

各種相似度的度量方式及其相關性見我的這篇博客

K-means算法

這個算法大家都熟,跟KNN是兄弟,簡單實用易操作,它也是其他一些聚類算法的鼻祖。
具體的步驟爲:
對於輸入樣本D=x1,x2,x3,...,xm :

  1. 選擇初始的K個class center μ1,μ2,...,μK ;
  2. 對於每個樣本xi ,將其標記爲距離類別中心最近的類別,即: yi=argmin1jK||xiμj|| ;
  3. 將每個類別中心更新爲隸屬該類別的所有樣本的均值:
    μj=1|cj|icjxi ;
    4.重複上述兩步,直至算法收斂。
    收斂條件爲:迭代次數/簇中心變化率/最小平方誤差MSE(Minimum Squared Error)
    E=ki=1xCi||xμi||22

簇類個數怎麼定?

  1. 根據先驗經驗:如果我們事先已經知道類的類的個數,直接設置即可。
  2. 增加交叉驗證;

初始的簇類中心怎麼定?

K-means對初始值敏感,有可能會陷入局部最優解,可以優化如下:
1. 先隨機給定1個點,然後計算所有點到這個樣本點的距離,距離越大的樣本被選中做第二個中心點的概率大,距離越小的樣本被選中的概率小;
2. 這樣便有了2個簇類中心點。然後計算所有樣本到這兩個中心點的距離,選擇其他樣本點到這兩個樣本點中較近的距離作爲衡量標準。距離越大被選中的概率越大;
3. 這樣便有了3個簇類中心點。做法依然同上,知道選出k個簇類中心。
(這樣做並不能完全使所有所有的中心店剛好取在不同的簇類中,但是可以一定程度上避免很多樣本點取自同一個簇。而在實踐中,爲了計算方便,可以直接按照距離來計算 —— 隨機選擇一個點,然後選其他中心點時如果選中的點距離該樣本點的距離小於某個閾值,則放棄。)

K-means是一個解決聚類問題的經典算法,簡單有效,但不太適合於發現非凸形狀的簇或者大小差別很大的簇,對噪聲和孤立點比較敏感。

層次聚類

層次聚類是對給定數據集進行層次的分解,直到滿足一定的條件。

  • 凝聚的層次聚類:AGNES算法。一種自底向上的策略,首先將每個對象作爲一個簇,然後依次合併那些原子簇使之形成更大的簇,直到滿足一定條件;
  • 分裂的層次聚類:DIANA算法。一種自頂向下的策略,首先將所有對象置於一個簇中,然後逐漸細分爲越來越小的簇,直到滿足一定條件。

聚類過程如圖所示:
此處輸入圖片的描述

密度聚類

密度聚類又稱基於密度的聚類(Density-based clustering),此算法假設聚類結構能通過樣本分佈的緊密程度確定。其中,最著名的而一種算法叫做DBSCAN算法(Density-Based Spatial Clustering of Application with Noise).
假設給定數據集D=x1,x2,...,xm ,給出以下概念:

  • ϵ -鄰域:對於xjD ,其鄰域包含樣本即D中與xj 的距離不大於ϵ 的樣本,即Nϵ(xj)=xiD|dist(xi,xj)ϵ ;
  • 核心對象(core object):若xjϵ -鄰域至少包含MinPts個樣本,則xj 是一個核心對象;
  • 密度直達(directly density-reachable):若xj 位於xiϵ -鄰域中,且xi 是核心對象,則稱xjxi 密度直達;
  • 密度相連(density-connected):對xixj ,若存在xk 使得xixj 均由xk 密度可達,則稱xixj 密度相連。
    此處輸入圖片的描述

算法流程:
1. 如果一個點p的ϵ -鄰域包含多於m個對象,則創建一個p作爲核心對象的新簇;
2. 尋找併合並核心對象直接密度可達的對象;
3. 沒有新點可以更新簇時,算法結束。

譜聚類

  • 譜:方針作爲線性算子,它的所有特徵值的全體統稱爲方針的譜;
    • 方陣的譜半徑爲最大的特徵值;
    • 矩陣A的譜半徑:(ATA) 的最大特徵值。
  • 譜聚類是一種基於圖論的聚類方法,通過對樣本數據的拉普拉斯矩陣的特徵向量進行聚類從而達到對樣本數據聚類的目的。

假設給定一組數據x1,x2,...,xn ,記任意兩點之間的相似度爲sij=<xi,xj> ,形成相似度圖(similarity graph):G=<V,E> ,如果sij 大於一定的閾值,則兩點是相連的,無向圖中這兩點之間的權值記作sij ;
下面用相似度圖來解決樣本數據的聚類問題:找到一個圖的劃分,形成若干個組,使得不同組之間有較低的權值,組內有較高的權值。

  • 給定無向圖G=<V,E> ,則可以得到它的鄰接矩陣W=(wij)i,j=1,...,n,(設置主對角線元素爲0);
    • 若兩個點的相似度值越大,表示這兩個點越相似;
    • 定義wij=0 表示vi,vj 兩個點滅有任何相似性;
  • 頂點的度di形成度矩陣D(是一個對角陣):di=nj=1wij
    • W的第i行元素的和爲vi 的度;
    • 除主對角線元素,D的其他位置爲0
  • 未正則的拉普拉斯矩陣:L = D - W
  • 正則的拉普拉斯矩陣:
    • 對稱拉普拉斯矩陣Lsym=D12·L·D12=ID12·W·D12

譜聚類算法

輸入:n個點pi,k
1. 計算n * n的相似度矩陣W和度矩陣D;
2. 計算拉普拉斯矩陣L = D - W;
3. 計算L的前k個特徵向量u1,u2,...,uk ;
4. 將k個列向量u1,u2,...,uk 組成矩陣UURnk ;
5. 對於i=1,2,...,n ,令yiRk 是U的第i行的向量;
6. 使用k-meas算法將點(yi)i=1,2,..,n 聚類成簇C1,C2,...,Ck ;
7. 輸出簇A1,A2,...,Ak ,其中,Ai={j|yiCi}

譜聚類算法有點像降維算法哦。
可以使用正則化的拉普拉斯矩陣代替算法中未正則過的。

發佈了45 篇原創文章 · 獲贊 14 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章