機器學習中的聚類算法演變及學習筆記

【說在前面】本人博客新手一枚,象牙塔的老白,職業場的小白。如下內容僅爲我的看法,歡迎批評指正,不喜勿噴![認真看圖][認真看圖]html

【補充說明】聚類算法能夠做爲獨立方法將數據聚成不一樣簇,也能夠做爲數據挖掘任務(例如分類、關聯規則等)的預處理!python

【補充說明】聚類算法與分類算法的主要區別在於訓練時的樣本有無標籤,聚類算法無監督學習,分類算法有監督學習!面試

【再說一句】本文主要介紹機器學習中聚類算法的演變路徑,和往常同樣,不會詳細介紹各算法的具體實現,望理解!算法

1、類似性衡量方法

1. 基於距離

  • 閔可夫斯基距離(Minkowski Distance):計算距離的通用的公式

  • 曼哈頓距離(即城市塊距離Manhattan distance):h=1(例如用於L1正則化等)

  • 歐幾里德距離(用的比較多):h=2(例如用於L2正則化等)

  •  其餘距離:例如核函數距離K(x,y)、DTW距離、Mahalanobis距離等

2. 基於類似係數

例如餘弦類似度等,主要優點在於不受原線性變換的影響,能夠輕鬆地轉換爲距離,但其運算速度相對較慢。數據庫

2、基於劃分的聚類

1. K-Means聚類

主要步驟以下:網絡

(1)肯定要聚類的數量K,並隨機初始化K個簇的中心點。框架

(2)將每一個樣本分配到與其距離最近的中心點所在的簇(這裏採用歐氏距離)。機器學習

(3)計算每個簇內全部樣本點的平均值,做爲該簇的新中心點。函數

迭代重複以上這些步驟,直到各簇中心點在迭代過程當中變化不大(即小於設定的閾值)。post

K-Means聚類的優勢:

  • 原理簡單,實現容易,收斂速度快
  • 參數只有K,計算複雜度相對較低
  • 模型可解釋性強

K-Means聚類的缺點:

  • 須要事先肯定聚類的簇數(即K值)
  • 對簇中心初始值的選取比較敏感
  • 對噪聲和離羣點很敏感
  • 採用迭代方法,容易陷入局部最優
  • 適用場景有限,不能解決非凸數據

2. K值的選取

  • 根據數據的可視化分佈狀況,結合對業務場景理解,人工選定K值
  • Elbow method(即手肘法則):經過WSS隨聚類數量K的變化曲線,取手肘位置的K(例如Gap Statistic、Jump Statistic等)
  • 經過計算類內內聚程度和類間分離度來肯定K(例如使用平均輪廓係數、類內距離/類間距離等)
  • 其餘:例如使用ISODATA、Gap Statistic公式、計算不一樣K值下的BIC/AIC、X-means clustering(AIC/BIC)等

3. K-Means聚類變體:考慮到K-Means對簇中心初始值的選取比較敏感

例如k-means++、intelligent k-means、genetic k-means、CLARANS等。這裏以常見的k-means++爲例,進行介紹。

k-means++按照以下的思想選取K個聚類中心:

  • 在選取第一個聚類中心(n=1)時,一樣是經過隨機的方法。
  • 在選取第n+1個聚類中心時,距離當前n個聚類中心越遠的點會有更高的機率被選爲第n+1個聚類中心。

4. K-Means聚類變體:考慮到k-means對噪聲和離羣值很敏感

例如k-medoids、k-medians等。這裏以常見的k-medians爲例,進行介紹。

k-medians對於中心點的選取方式是中位值。緣由在於,噪聲和離羣點對中位值的變化影響不大。可是須要排序,速度較慢。

5. K-Means聚類變體:考慮到k-means不適用於類別型數據

例如k-modes等。這裏以常見的k-modes爲例,進行介紹。

k-modes算法採用差別度來代替k-means算法中的距離。k-modes算法中差別度越小,則表示距離越小。

6. K-Means聚類變體:考慮到k-means不能解決非凸數據

例如kernel k-means、譜聚類等。這裏以常見的kernel k-means爲例,進行介紹。

kernel k-means經過一個非線性映射,將輸入空間中的數據點映射到一個高維特徵空間中,使得樣本在覈空間線性可分,在特徵空間聚類。

值得一提的是,譜聚類算法是創建在圖論中的譜圖理論基礎上,其本質是將聚類問題轉化爲圖的最優劃分問題,是一種點對聚類算法。

3、基於密度的聚類

1. Mean-Shift聚類

均值漂移聚類是基於滑動窗口的算法,尋找數據點的密集區域。相似登山,每一次迭代都向密度更高的區域移動,直到收斂。

主要步驟以下:

(1)肯定滑動窗口半徑r,以隨機選取的中心點C、半徑爲r的圓形滑動窗口開始滑動。 

(2)每一次滑動到新區域,計算窗口內的均值做爲中心點,窗口內的點數量做爲密度。在每一次移動中,窗口會想密度更高的區域移動。

(3)移動窗口,直到窗口內的密度再也不增長爲止。

其中,步驟1到3會產生不少個滑動窗口,當多個滑動窗口重疊時,保留包含最多點的窗口,而後根據數據點所在的滑動窗口進行聚類。

 

Mean-Shift聚類的優勢:

  • 不一樣於K-Means算法,均值漂移聚類算法不須要知道有多少簇,可以自動發現
  • 基於密度的算法,相比於K-Means受均值影響較小

Mean-Shift聚類的缺點:

  • 窗口半徑r的選擇須要仔細考慮

2. DBSCAN聚類

DBSCAN的聚類定義很簡單,由密度可達關係導出的最大密度相連的樣本集合,即爲最終聚類的一個簇。

主要步驟以下:

(1)首先任意選擇一個沒有類別的核心對象做爲種子,而後找到全部這個核心對象可以密度可達的樣本集合,即爲一個聚類簇。

(2)接着繼續選擇另外一個沒有類別的核心對象去尋找密度可達的樣本集合,這樣就獲得另外一個聚類簇。

一直運行到全部核心對象都有類別爲止。

DBSCAN聚類的優勢:
  • 不須要知道有多少簇,可以自動發現
  • 能夠在帶有噪聲的空間數據庫中發現任意形狀的簇

DBSCAN聚類的缺點:

  • 須要肯定Eps領域半徑、MinPts在領域中點的最少個數(即密度)這兩個全局參數,較爲敏感

3. DBSCAN聚類的變體

OPTICS聚類經過優先對高密度進行搜索,而後根據高密度的特色設置參數,改善了DBSCAN的不足。

固然還有其餘算法,例如DENCLUE聚類等。

4、基於機率模型的聚類

1. 用高斯混合模型(GMM)的最大指望(EM)聚類

GMM聚類採用機率模型來表達原型,即經過統計獲得每一個樣本點屬於各個類的機率,而不是斷定它徹底屬於一個類,也會被稱爲軟聚類。

主要步驟以下:

(1)選擇簇的數量,並隨機初始化每一個簇的高斯分佈參數(即均值和方差)。

(2)給定每一個簇的高斯分佈,計算每一個數據點屬於每一個簇的機率。一個點越靠近高斯分佈的中心就越可能屬於該簇。

(3)計算高斯分佈參數,使機率最大化(EM最大指望),可用數據點機率的加權計算這些新的參數,權重就是數據點屬於該簇的機率。

重複迭代步驟2和3,直到迭代中的變化不大。

GMM聚類的優勢:

  • 使用均值和標準差,簇能夠呈現出橢圓形,而不是僅僅限制於圓形。
  • 使用機率,一個數據點能夠屬於多個簇。例如數據點X能夠有百分之20的機率屬於A簇,百分之80的機率屬於B簇。

GMM聚類的缺點:

  • 執行效率不高,特別是分佈數量不少而且數據量不多的時候

2. 其餘方法

例如基於神經網絡模型的聚類SOM、基於統計學的聚類COBWeb等。

5、基於層次的聚類

對給定的數據集進行層次似的分解,直到某種條件知足爲止。具體又可分爲「自底向上」和「自頂向下」兩種方案。

1. AGNES聚類

是一種自底向上聚合策略的層次聚類算法。

主要步驟以下:

(1)先將數據集中的每一個樣本看作是一個初始聚類簇。

(2)而後在算法運行的每一步中,找出距離最近的兩個聚類簇進行合併。該過程不斷重複,直至達到預設的聚類簇個數。

其中,如何計算簇之間的距離,並進行合併:

  • 單連接算法:兩個簇中距離最近的樣本的距離(最小距離)
  • 全連接算法:兩個簇中距離最遠的樣本的距離(最大距離)
  • 均連接算法:兩個簇中每兩個樣本之間的距離相加求平均的距離(平均距離)

AGNES聚類的優勢:

  • 距離和規則的類似度容易定義,限制少
  • 不須要預先制定聚類數
  • 能夠發現類的層次關係
  • 能夠聚類成其它形狀

AGNES聚類的缺點:

  • 計算複雜度過高 
  • 奇異值也能產生很大影響
  • 算法極可能聚類成鏈狀

2. BIRCH聚類

BIRCH算法是個樹形結構,樹的每個節點是由若干個聚類特徵CF組成。BIRCH算法比較適合於數據量大,類別數K也比較多的狀況。

對於CF Tree,通常有幾個重要參數:

  • 第一個參數是每一個內部節點的最大CF數B
  • 第二個參數是每一個葉子節點的最大CF數L
  • 第三個參數是葉節點每一個CF的最大樣本半徑閾值T

BIRCH聚類的優勢:

  • 不用輸入聚類數K值
  • 節約內存,全部的樣本都在磁盤上,CF Tree僅僅存了CF節點和對應的指針
  • 聚類速度快,只須要單遍掃描數據集就能創建CF Tree,CF Tree的增刪改都很快
  • 能夠識別噪音點,還能夠對數據集進行初步分類的預處理 

BIRCH聚類的缺點:

  • BIRCH的調參較爲複雜,幾個參數對CF Tree的最終形式影響很大
  • 因爲CF Tree對每一個節點的CF個數有限制,致使聚類的結果可能和真實的類別分佈不一樣
  • 對高維特徵的數據聚類效果很差(若是 n_features大於20,一般使用MiniBatchKMeans會更好)
  • 若是數據集的分佈簇不是相似於超球體,或者說不是凸的,則聚類效果很差

3. 其餘方法

例如Diana、ROCK、CURE、CAMELEON等。

6、基於網格的聚類

核心原理就是:

(1)將數據空間劃分爲網格單元,將數據對象集映射到網格單元中,並計算每一個單元的密度。

(2)根據預設的閾值判斷每一個網格單元是否爲高密度單元,由鄰近的稠密單元組造成」類「。

網格聚類的優勢:

  • 執行效率高,其速度只依賴於數據空間中每一個維上單元的個數

網格聚類的缺點:

  • 對參數敏感
  • 沒法處理不規則分佈的數據
  • 維數災難

STING、CLIQUE、WaveCluster等是該類方法中的表明性算法。如下是CLIQUE的例子:

7、其餘角度的聚類

例如基於約束的聚類(COD)、基於圖網絡的聚類(圖團體檢測)等。

8、聚類算法的性能度量

大佬對經常使用的聚類算法從可伸縮性、適合的數據類型、高維性、異常數據的抗干擾度、聚類形狀和算法效率6個方面進行了綜合性能評價。

還有一些對聚類的評測指標,這裏不打算展開介紹了。我的感受經過聚類來輔助具體業務場景的分析會比較重要,就像開頭說的那樣,聚類算法能夠做爲獨立方法將數據聚成不一樣簇,也能夠做爲數據挖掘任務(例如分類、關聯規則等)的預處理。這裏要提一嘴的是,不少聚類算法都已經被封裝在sklearn中,方便調用。

固然,聚類算法有不少的應用場景,例如目標用戶羣體分類、異常值檢測等。說到這裏,我接着想寫一個「異常檢測」專題了。

 

若是您對數據挖掘感興趣,歡迎瀏覽個人另幾篇博客:數據挖掘比賽/項目全流程介紹

若是你對智能推薦感興趣,歡迎先瀏覽個人另幾篇隨筆:智能推薦算法演變及學習筆記

若是您對人工智能算法感興趣,歡迎瀏覽個人另外一篇博客:人工智能新手入門學習路線和學習資源合集(含AI綜述/python/機器學習/深度學習/tensorflow)人工智能領域經常使用的開源框架和庫(含機器學習/深度學習/強化學習/知識圖譜/圖神經網絡)

若是你是計算機專業的應屆畢業生,歡迎瀏覽個人另一篇博客:若是你是一個計算機領域的應屆生,你如何準備求職面試?

若是你是計算機專業的本科生,歡迎瀏覽個人另一篇博客:若是你是一個計算機領域的本科生,你能夠選擇學習什麼?

若是你是計算機專業的研究生,歡迎瀏覽個人另一篇博客:若是你是一個計算機領域的研究生,你能夠選擇學習什麼?

若是你對金融科技感興趣,歡迎瀏覽個人另外一篇博客:若是你想了解金融科技,不妨先了解金融科技有哪些可能?

以後博主將持續分享各大算法的學習思路和學習筆記:hello world: 個人博客寫做思路

相關文章
相關標籤/搜索