【說在前面】本人博客新手一枚,象牙塔的老白,職業場的小白。如下內容僅爲我的看法,歡迎批評指正,不喜勿噴![認真看圖][認真看圖]html
【補充說明】聚類算法能夠做爲獨立方法將數據聚成不一樣簇,也能夠做爲數據挖掘任務(例如分類、關聯規則等)的預處理!python
【補充說明】聚類算法與分類算法的主要區別在於訓練時的樣本有無標籤,聚類算法無監督學習,分類算法有監督學習!面試
【再說一句】本文主要介紹機器學習中聚類算法的演變路徑,和往常同樣,不會詳細介紹各算法的具體實現,望理解!算法
例如餘弦類似度等,主要優點在於不受原線性變換的影響,能夠輕鬆地轉換爲距離,但其運算速度相對較慢。數據庫
主要步驟以下:網絡
(1)肯定要聚類的數量K,並隨機初始化K個簇的中心點。框架
(2)將每一個樣本分配到與其距離最近的中心點所在的簇(這裏採用歐氏距離)。機器學習
(3)計算每個簇內全部樣本點的平均值,做爲該簇的新中心點。函數
迭代重複以上這些步驟,直到各簇中心點在迭代過程當中變化不大(即小於設定的閾值)。post
K-Means聚類的優勢:
K-Means聚類的缺點:
例如k-means++、intelligent k-means、genetic k-means、CLARANS等。這裏以常見的k-means++爲例,進行介紹。
k-means++按照以下的思想選取K個聚類中心:
例如k-medoids、k-medians等。這裏以常見的k-medians爲例,進行介紹。
k-medians對於中心點的選取方式是中位值。緣由在於,噪聲和離羣點對中位值的變化影響不大。可是須要排序,速度較慢。
例如k-modes等。這裏以常見的k-modes爲例,進行介紹。
k-modes算法採用差別度來代替k-means算法中的距離。k-modes算法中差別度越小,則表示距離越小。
例如kernel k-means、譜聚類等。這裏以常見的kernel k-means爲例,進行介紹。
kernel k-means經過一個非線性映射,將輸入空間中的數據點映射到一個高維特徵空間中,使得樣本在覈空間線性可分,在特徵空間聚類。
值得一提的是,譜聚類算法是創建在圖論中的譜圖理論基礎上,其本質是將聚類問題轉化爲圖的最優劃分問題,是一種點對聚類算法。
均值漂移聚類是基於滑動窗口的算法,尋找數據點的密集區域。相似登山,每一次迭代都向密度更高的區域移動,直到收斂。
主要步驟以下:
(1)肯定滑動窗口半徑r,以隨機選取的中心點C、半徑爲r的圓形滑動窗口開始滑動。
(2)每一次滑動到新區域,計算窗口內的均值做爲中心點,窗口內的點數量做爲密度。在每一次移動中,窗口會想密度更高的區域移動。
(3)移動窗口,直到窗口內的密度再也不增長爲止。
其中,步驟1到3會產生不少個滑動窗口,當多個滑動窗口重疊時,保留包含最多點的窗口,而後根據數據點所在的滑動窗口進行聚類。
Mean-Shift聚類的優勢:
Mean-Shift聚類的缺點:
DBSCAN的聚類定義很簡單,由密度可達關係導出的最大密度相連的樣本集合,即爲最終聚類的一個簇。
主要步驟以下:
(1)首先任意選擇一個沒有類別的核心對象做爲種子,而後找到全部這個核心對象可以密度可達的樣本集合,即爲一個聚類簇。
(2)接着繼續選擇另外一個沒有類別的核心對象去尋找密度可達的樣本集合,這樣就獲得另外一個聚類簇。
一直運行到全部核心對象都有類別爲止。
DBSCAN聚類的缺點:
OPTICS聚類經過優先對高密度進行搜索,而後根據高密度的特色設置參數,改善了DBSCAN的不足。
固然還有其餘算法,例如DENCLUE聚類等。
GMM聚類採用機率模型來表達原型,即經過統計獲得每一個樣本點屬於各個類的機率,而不是斷定它徹底屬於一個類,也會被稱爲軟聚類。
主要步驟以下:
(1)選擇簇的數量,並隨機初始化每一個簇的高斯分佈參數(即均值和方差)。
(2)給定每一個簇的高斯分佈,計算每一個數據點屬於每一個簇的機率。一個點越靠近高斯分佈的中心就越可能屬於該簇。
(3)計算高斯分佈參數,使機率最大化(EM最大指望),可用數據點機率的加權計算這些新的參數,權重就是數據點屬於該簇的機率。
重複迭代步驟2和3,直到迭代中的變化不大。
GMM聚類的優勢:
GMM聚類的缺點:
例如基於神經網絡模型的聚類SOM、基於統計學的聚類COBWeb等。
對給定的數據集進行層次似的分解,直到某種條件知足爲止。具體又可分爲「自底向上」和「自頂向下」兩種方案。
是一種自底向上聚合策略的層次聚類算法。
主要步驟以下:
(1)先將數據集中的每一個樣本看作是一個初始聚類簇。
(2)而後在算法運行的每一步中,找出距離最近的兩個聚類簇進行合併。該過程不斷重複,直至達到預設的聚類簇個數。
其中,如何計算簇之間的距離,並進行合併:
AGNES聚類的優勢:
AGNES聚類的缺點:
BIRCH算法是個樹形結構,樹的每個節點是由若干個聚類特徵CF組成。BIRCH算法比較適合於數據量大,類別數K也比較多的狀況。
對於CF Tree,通常有幾個重要參數:
BIRCH聚類的優勢:
BIRCH聚類的缺點:
例如Diana、ROCK、CURE、CAMELEON等。
核心原理就是:
(1)將數據空間劃分爲網格單元,將數據對象集映射到網格單元中,並計算每一個單元的密度。
(2)根據預設的閾值判斷每一個網格單元是否爲高密度單元,由鄰近的稠密單元組造成」類「。
網格聚類的優勢:
網格聚類的缺點:
STING、CLIQUE、WaveCluster等是該類方法中的表明性算法。如下是CLIQUE的例子:
例如基於約束的聚類(COD)、基於圖網絡的聚類(圖團體檢測)等。
大佬對經常使用的聚類算法從可伸縮性、適合的數據類型、高維性、異常數據的抗干擾度、聚類形狀和算法效率6個方面進行了綜合性能評價。
還有一些對聚類的評測指標,這裏不打算展開介紹了。我的感受經過聚類來輔助具體業務場景的分析會比較重要,就像開頭說的那樣,聚類算法能夠做爲獨立方法將數據聚成不一樣簇,也能夠做爲數據挖掘任務(例如分類、關聯規則等)的預處理。這裏要提一嘴的是,不少聚類算法都已經被封裝在sklearn中,方便調用。
固然,聚類算法有不少的應用場景,例如目標用戶羣體分類、異常值檢測等。說到這裏,我接着想寫一個「異常檢測」專題了。
若是您對數據挖掘感興趣,歡迎瀏覽個人另幾篇博客:數據挖掘比賽/項目全流程介紹
若是你對智能推薦感興趣,歡迎先瀏覽個人另幾篇隨筆:智能推薦算法演變及學習筆記
若是您對人工智能算法感興趣,歡迎瀏覽個人另外一篇博客:人工智能新手入門學習路線和學習資源合集(含AI綜述/python/機器學習/深度學習/tensorflow)、人工智能領域經常使用的開源框架和庫(含機器學習/深度學習/強化學習/知識圖譜/圖神經網絡)
若是你是計算機專業的應屆畢業生,歡迎瀏覽個人另一篇博客:若是你是一個計算機領域的應屆生,你如何準備求職面試?
若是你是計算機專業的本科生,歡迎瀏覽個人另一篇博客:若是你是一個計算機領域的本科生,你能夠選擇學習什麼?
若是你是計算機專業的研究生,歡迎瀏覽個人另一篇博客:若是你是一個計算機領域的研究生,你能夠選擇學習什麼?
若是你對金融科技感興趣,歡迎瀏覽個人另外一篇博客:若是你想了解金融科技,不妨先了解金融科技有哪些可能?
以後博主將持續分享各大算法的學習思路和學習筆記:hello world: 個人博客寫做思路