聚類算法總結

最近整理一下聚類相關的東西;

數據說明

  1. 凸集:在歐氏空間中,凸集是對於集合內的每一對點,連接該對點的直線段上的每個點也在該集合內;
  2. 非凸(non-convex)數據:類比上述可知;

距離&相似度

首先我們要了解衡量對象間差異的方法對象可能是一個值,也可能是序列,聚類的方式的大都通過距離或相似度來衡量,常用距離如下:
對於兩個對象的n維指標(x1,x2,….xn)|(y1,y2,…yn);

  • 歐幾里得距離:要求指標間可比
  • 曼哈頓距離
  • 切比雪夫距離
  • 明氏距離:歐幾里得距離的擴展,是多個距離公式的拓展性表述。包括歐幾里得距離、曼哈頓距離
  • 馬氏距離:解決了歐幾里得距離在指標度量上的缺陷,基於個指標維度進行標準化後再利用歐幾里得公式計算,相當於改進版。
  • 向量空間餘弦相似度
  • 皮爾遜相關係數
  • Jaccard相似係數:基於兩者指標中相同的個數的比例
  • 調整餘弦相似度:爲了衡量每個維數值的差異,通過各個維度上的數值都減去均值,修正差異,當然需結合實際,進行減各維度的均值需保證可加減,屬同一屬性。
  • 其中距離與餘弦相似度的區別在於餘弦相似度體現的是空間方向上的差距,距離體現的是絕對距離。距離能夠體現個體數值特徵的絕對差異,從維度的數值大小體現差異,受度量標準的影響;餘弦相似度對絕對的數值不敏感,更多用來體現用戶興趣的相似度和差異,同時修正了用戶間可能存在的度量標準不統一的問題。
  • 核函數K(x,y)
  • DTW:可以計算兩個不同長度的向量的距離,也可以對兩對向量中不同時間段內的數據做匹配,DTW主要用在時間序列的部分場合裏;

  • 具體距離公式及說明可參考:

    http://www.dataguru.cn/article-2749-1.html

聚類算法簡要說明

  1. 層次聚類算法(Hierarchical methods):適用於凸樣本集,根據分解順序自下而上法(bottom-up)和自上而下法(top-down),層次聚類算法分爲凝聚的層次聚類算法和分裂的層次聚類算法;算法舉例:BIRCH、ROCK、Chameleon;
  2. 基於劃分的方法(Partition-based methods):適用於凸樣本集,算法目的是類內的點都足夠近,類間的點都足夠遠,算法舉例:k-means及拓展變體算法k-medoids、k-modes、k-medians、kernel k-means;
  3. 基於密度的聚類算法(Density-based methods):既可以適用於凸樣本集,也可以適用於非凸樣本集,可以系統的解決不規則形狀的聚類,同時對噪聲數據的處理比較好,算法舉例:DBSCAN、OPTICS(dbscan的拓展:根據高密度的特點設置參數,改善了DBSCAN的不足);
  4. 基於網格單元的聚類算法(Grid-based methods):將數據空間劃分爲網格單元,並將數據對象映射到網格單元中,並計算每個單元的密度,根據預設的閾值判斷每個網格單元是否爲高密度單元,由臨近的稠密單元組形成類或簇。算法列表:STING、CLIQUE;
  5. 基於模型的聚類算法(Model-based methods):主要是指基於概率模型的方法和基於神經網絡模型的方法,尤其以基於概率模型的方法居多。算法舉例:高斯混合模型(GMM)、自組織映射模型(SOM);
    參考鏈接,對聚類算法宏觀概念的寫的很清晰,感覺很厲害,從中提取了算法列表,以便後期自己用到的時候,方便查找相關論文

常用聚類算法原理及步驟說明

  1. DBSCAN(Density-Based Spatial Clustering of Applications with Noise):

    原理
    DBSCAN是一種基於密度的聚類算法,採用查找密度可達的對象的方法進行聚類分析,表現爲同一類別的樣本之間是緊密相連的。
    首先需要了解幾個概念:

    • 密度:指以某點爲圓心,圓內所包含的點的個數。
    • 鄰域:空間中任意一點的領域是以該點爲圓心,以ε爲半徑的圓內包含的點的集合;
    • 核心點:如果空間中某一點的鄰域密度大於給定閾值MinPts,則稱改點爲核心點;
    • 邊界點:如果空間中的某一點的密度小於給定的閾值MinPts,則稱該點爲邊界點;
    • 密度直達:若某一點位於核心點的鄰域內,則稱該點由核心點密度直達,密度直達是針對核心點來說的;
    • 密度可達:對於兩個點p,q,存在樣本序列{p1,p2,…,pn},且有pi+1由pi密度直達,若p=p1,q=pn,則稱p、q兩點密度可達;密度可達具有傳遞性,且p1…p(n-1)均爲核心點
    • 密度相連:對於p,q,存在一點o,滿足p、q都由o點密度可達,則稱跑、點p、q密度相連。
    • 簇和噪聲:基於密度可達的最大的密度相連的對象的集合稱爲簇,也即我們要聚成的類,不在任何簇中的對象定義爲噪聲;

    算法步驟
    算法描述:1、輸入原始數據、從中任意選取一個數據點X,並檢查數據點X的ϵ鄰域;2、若x是核心點並且並未被劃分到某一類,則找出所有從X密度可達的點,形成一個聚類;3、如果X不是核心點且不歸屬於任何簇,則將X作爲噪聲處理;4、回到第一步,重複執行算法,直至所有的點都被處理,則算法結束。具體步驟如下:

    • 確認樣本集D=(x1,x2,…,xm),鄰域參數(ϵ,MinPts), 樣本距離度量方式;
    • 初始化核心對象集合Ω=∅, 初始化聚類簇數k=0,初始化未訪問樣本集合Γ = D, 簇劃分C = ∅;
    • 對於j=1,2,…m, 按下面的步驟找出所有的核心對象:
       a) 通過距離度量方式,找到樣本xj的ϵ-鄰域子樣本集Nϵ(xj);
       b) 如果子樣本集樣本個數滿足|Nϵ(xj)|≥MinPts, 將樣本xj加入核心對象樣本集合:Ω=Ω∪{xj};
    • 如果核心對象集合Ω=∅,則算法結束,否則轉入步驟5.
    • 在覈心對象集合Ω中,隨機選擇一個核心對象o,初始化當前簇核心對象隊列Ωcur={o}, 初始化類別序號k=k+1,初始化當前簇樣本集合Ck={o}, 更新未訪問樣本集合Γ=Γ−{o};
    • 如果當前簇核心對象隊列Ωcur=∅,則當前聚類簇Ck生成完畢, 更新簇劃分C={C1,C2,…,Ck}, 更新核心對象集合Ω=Ω−Ck, 轉入步驟4。
    • 在當前簇核心對象隊列Ωcur中取出一個核心對象o′,通過鄰域距離閾值ϵ找出所有的ϵ-鄰域子樣本集Nϵ(o′),令Δ=Nϵ(o′)∩Γ, 更新當前簇樣本集合Ck=Ck∪Δ, 更新未訪問樣本集合Γ=Γ−Δ, 更新Ωcur=Ωcur∪(Nϵ(o′)∩Ω),轉入步驟6.
    • 輸出結果爲: 簇劃分C={C1,C2,…,Ck}
      缺點
      1、參數設定偏主觀,對參數敏感;
      2、很難適應密度不均勻的數據集;
      參考鏈接1
      參考鏈接2
  2. 層次聚類法
    • 四種廣泛採用的簇間距離度量方法:最短距離法、最長距離法、中間距離法、類平均法
  3. k-means聚類
  4. 自組織映射模型(SOM)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章