【說在前面】本人部落格新手一枚,象牙塔的老白,職業場的小白。以下內容僅為個人見解,歡迎批評指正,不喜勿噴![認真看圖][認真看圖]
【補充說明】聚類演算法可以作為獨立方法將資料聚成不同簇,也可以作為資料探勘任務(例如分類、關聯規則等)的預處理!
【補充說明】聚類演算法與分類演算法的主要區別在於訓練時的樣本有無標籤,聚類演算法無監督學習,分類演算法有監督學習!
【再說一句】本文主要介紹機器學習中聚類演算法的演變路徑,和往常一樣,不會詳細介紹各演算法的具體實現,望理解!
一、相似性衡量方法
1. 基於距離
- 閔可夫斯基距離(Minkowski Distance):計算距離的通用的公式
- 曼哈頓距離(即城市塊距離Manhattan distance):h=1(例如用於L1正則化等)
- 歐幾里德距離(用的比較多):h=2(例如用於L2正則化等)
- 其他距離:例如核函式距離K(x,y)、DTW距離、Mahalanobis距離等
2. 基於相似係數
例如餘弦相似度等,主要優勢在於不受原線性變換的影響,可以輕鬆地轉換為距離,但其運算速度相對較慢。
二、基於劃分的聚類
1. K-Means聚類
主要步驟如下:
(1)確定要聚類的數量K,並隨機初始化K個簇的中心點。
(2)將每個樣本分配到與其距離最近的中心點所在的簇(這裡採用歐氏距離)。
(3)計算每一個簇內所有樣本點的平均值,作為該簇的新中心點。
迭代重複以上這些步驟,直到各簇中心點在迭代過程中變化不大(即小於設定的閾值)。
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通過一個非線性對映,將輸入空間中的資料點對映到一個高維特徵空間中,使得樣本在核空間線性可分,在特徵空間聚類。
值得一提的是,譜聚類演算法是建立在圖論中的譜圖理論基礎上,其本質是將聚類問題轉化為圖的最優劃分問題,是一種點對聚類演算法。
三、基於密度的聚類
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聚類等。
四、基於概率模型的聚類
1. 用高斯混合模型(GMM)的最大期望(EM)聚類
GMM聚類採用概率模型來表達原型,即通過統計得到每個樣本點屬於各個類的概率,而不是判定它完全屬於一個類,也會被稱為軟聚類。
主要步驟如下:
(1)選擇簇的數量,並隨機初始化每個簇的高斯分佈引數(即均值和方差)。
(2)給定每個簇的高斯分佈,計算每個資料點屬於每個簇的概率。一個點越靠近高斯分佈的中心就越可能屬於該簇。
(3)計算高斯分佈引數,使概率最大化(EM最大期望),可用資料點概率的加權計算這些新的引數,權重就是資料點屬於該簇的概率。
重複迭代步驟2和3,直到迭代中的變化不大。
GMM聚類的優點:
- 使用均值和標準差,簇可以呈現出橢圓形,而不是僅僅限制於圓形。
- 使用概率,一個資料點可以屬於多個簇。例如資料點X可以有百分之20的概率屬於A簇,百分之80的概率屬於B簇。
GMM聚類的缺點:
- 執行效率不高,特別是分佈數量很多並且資料量很少的時候
2. 其他方法
例如基於神經網路模型的聚類SOM、基於統計學的聚類COBWeb等。
五、基於層次的聚類
對給定的資料集進行層次似的分解,直到某種條件滿足為止。具體又可分為“自底向上”和“自頂向下”兩種方案。
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等。
六、基於網格的聚類
核心原理就是:
(1)將資料空間劃分為網格單元,將資料物件集對映到網格單元中,並計算每個單元的密度。
(2)根據預設的閾值判斷每個網格單元是否為高密度單元,由鄰近的稠密單元組形成”類“。
網格聚類的優點:
- 執行效率高,其速度只依賴於資料空間中每個維上單元的個數
網格聚類的缺點:
- 對引數敏感
- 無法處理不規則分佈的資料
- 維數災難
STING、CLIQUE、WaveCluster等是該類方法中的代表性演算法。以下是CLIQUE的例子:
七、其他角度的聚類
例如基於約束的聚類(COD)、基於圖網路的聚類(圖團體檢測)等。
八、聚類演算法的效能度量
大佬對常用的聚類演算法從可伸縮性、適合的資料型別、高維性、異常資料的抗干擾度、聚類形狀和演算法效率6個方面進行了綜合效能評價。
還有一些對聚類的評測指標,這裡不打算展開介紹了。個人感覺通過聚類來輔助具體業務場景的分析會比較重要,就像開頭說的那樣,聚類演算法可以作為獨立方法將資料聚成不同簇,也可以作為資料探勘任務(例如分類、關聯規則等)的預處理。這裡要提一嘴的是,很多聚類演算法都已經被封裝在sklearn中,方便呼叫。
當然,聚類演算法有很多的應用場景,例如目標使用者群體分類、異常值檢測等。說到這裡,我接著想寫一個“異常檢測”專題了。
如果您對資料探勘感興趣,歡迎瀏覽我的另幾篇部落格:資料探勘比賽/專案全流程介紹
如果你對智慧推薦感興趣,歡迎先瀏覽我的另幾篇隨筆:智慧推薦演算法演變及學習筆記
如果您對人工智慧演算法感興趣,歡迎瀏覽我的另一篇部落格:人工智慧新手入門學習路線和學習資源合集(含AI綜述/python/機器學習/深度學習/tensorflow)、人工智慧領域常用的開源框架和庫(含機器學習/深度學習/強化學習/知識圖譜/圖神經網路)
如果你是計算機專業的應屆畢業生,歡迎瀏覽我的另外一篇部落格:如果你是一個計算機領域的應屆生,你如何準備求職面試?
如果你是計算機專業的本科生,歡迎瀏覽我的另外一篇部落格:如果你是一個計算機領域的本科生,你可以選擇學習什麼?
如果你是計算機專業的研究生,歡迎瀏覽我的另外一篇部落格:如果你是一個計算機領域的研究生,你可以選擇學習什麼?
如果你對金融科技感興趣,歡迎瀏覽我的另一篇部落格:如果你想了解金融科技,不妨先了解金融科技有哪些可能?
之後博主將持續分享各大演算法的學習思路和學習筆記:hello world: 我的部落格寫作思路