演算法金 | K-均值、層次、DBSCAN聚類方法解析

算法金「全网同名」發表於2024-06-23


大俠幸會,在下全網同名「演算法金」 0 基礎轉 AI 上岸,多個演算法賽 Top 「日更萬日,讓更多人享受智慧樂趣」

接微*公號往期文章:10 種頂流聚類演算法,附 Python 實現

聚類分析概述

聚類分析的定義與意義

聚類分析(Clustering Analysis)是一種將資料物件分成多個簇(Cluster)的技術,使得同一簇內的物件具有較高的相似性,而不同簇之間的物件具有較大的差異性。這種方法在無監督學習(Unsupervised Learning)中廣泛應用,常用於資料預處理、模式識別、影像處理和市場分析等領域

透過聚類分析,可以有效地發現資料中的結構和模式,為進一步的資料分析和挖掘提供基礎。例如,在市場分析中,聚類分析可以幫助企業將客戶群體進行細分,從而制定更有針對性的營銷策略

常見聚類演算法概覽

聚類演算法種類繁多,常見的主要有以下幾種:

  • K-均值(K-Means):一種基於劃分的聚類方法,透過迭代最佳化目標函式將資料分為K個簇。它具有計算簡單、效率高等優點,但對初始值敏感,容易陷入區域性最優
  • 層次聚類(Hierarchical Clustering):一種基於層次結構的聚類方法,包括凝聚式和分裂式兩種。凝聚式層次聚類從每個物件開始逐步合併,分裂式層次聚類從整個資料集開始逐步分裂。它可以生成樹狀結構(樹狀圖),但計算複雜度較高
  • DBSCAN(Density-Based Spatial Clustering of Applications with Noise):一種基於密度的聚類方法,透過定義核心點、邊界點和噪聲點來識別簇。它能有效處理噪聲和發現任意形狀的簇,但對引數選擇較為敏感

聚類分析在資料科學中的應用

聚類分析在資料科學中有廣泛的應用,以下是一些典型場景:

  • 客戶細分:透過對客戶進行聚類分析,企業可以將客戶分成不同的群體,從而制定更加精準的營銷策略
  • 影像分割:在影像處理領域,聚類分析可以用於影像分割,將影像分成具有相似畫素特徵的區域
  • 異常檢測:聚類分析可以幫助識別資料中的異常點,這在金融欺詐檢測、網路入侵檢測等方面有重要應用
  • 文字聚類:在自然語言處理領域,聚類分析可以用於文字聚類,將具有相似主題的文件分在一起,方便後續的資訊檢索和推薦系統

更多內容,見演算法知識直達星球:https://t.zsxq.com/ckSu3

K-均值聚類方法

定義與基本原理

K-均值(K-Means)是一種常見的劃分式聚類演算法,其目標是將資料集分成 ( K ) 個簇,使得每個簇內的資料點與該簇的中心點(質心)之間的距離平方和最小。該演算法的基本原理是透過迭代最佳化,逐步調整簇中心位置,直到簇中心不再發生變化或達到預設的迭代次數

演算法步驟

K-均值演算法的具體步驟如下:

  1. 隨機選擇 ( K ) 個初始質心
  2. 將每個資料點分配到最近的質心所在的簇
  3. 計算每個簇的質心,即該簇中所有資料點的平均值
  4. 檢查質心是否發生變化,若發生變化,則重複步驟2和3,直到質心不再變化或達到預設的迭代次數

K值選擇與初始中心問題

K值選擇是K-均值聚類中的一個關鍵問題。通常可以透過肘部法則(Elbow Method)來選擇合適的 ( K ) 值。肘部法則透過繪製不同 ( K ) 值對應的聚類誤差平方和(SSE),選擇拐點處的 ( K ) 值

初始中心的選擇對K-均值演算法的收斂速度和聚類效果有重要影響。常用的改進方法是K-means++,它透過一種機率分佈方法選擇初始質心,能有效提高演算法效能

優缺點分析

優點:

  • 演算法簡單,計算效率高,適用於大規模資料集
  • 易於實現和理解

缺點:

  • 對初始質心敏感,可能陷入區域性最優
  • 需要預先指定 ( K ) 值
  • 不能處理非凸形狀的簇和具有不同大小的簇
  • 對噪聲和異常值敏感

適用場景及例項

K-均值聚類適用於以下場景:

  • 資料集規模較大,且簇的形狀接近凸形
  • 需要快速獲取聚類結果,用於初步資料分析
  • 希望對簇進行簡單的解釋和視覺化

更多內容,見微*公號往期文章:再見!!!K-means

層次聚類方法

定義與基本原理

層次聚類(Hierarchical Clustering)是一種基於層次結構的聚類方法。它透過構建樹狀的簇結構,逐層合併或分裂資料點,形成一個層次化的簇結構。層次聚類主要有兩種型別:凝聚式(Agglomerative)和分裂式(Divisive)。

  • 凝聚式聚類:從每個資料點開始,將最近的兩個簇逐步合併,直到所有資料點都被合併到一個簇中。
  • 分裂式聚類:從整個資料集開始,將資料點逐步分裂成更小的簇,直到每個資料點都成為一個單獨的簇。

演算法步驟

以凝聚式層次聚類為例,演算法步驟如下:

  1. 初始化:將每個資料點作為一個單獨的簇
  2. 計算簇之間的相似度矩陣
  3. 合併最相似的兩個簇,更新相似度矩陣
  4. 重複步驟3,直到所有資料點合併到一個簇中

分裂式與凝聚式聚類

  • 分裂式聚類:從整個資料集開始,透過遞迴地分裂資料集,形成樹狀結構。
  • 凝聚式聚類:從每個資料點開始,透過遞迴地合併最近的簇,形成樹狀結構。

兩者的主要區別在於聚類過程的方向,分裂式自頂向下,凝聚式自底向上。

優缺點分析

優點:

  • 無需預先指定簇數 ( K )
  • 能夠生成樹狀結構(樹狀圖),方便觀察不同層次的聚類結果
  • 對任意形狀的簇有較好的適應性

缺點:

  • 計算複雜度高,尤其是大規模資料集
  • 對噪聲和異常值敏感
  • 聚類結果不可逆,一旦合併或分裂無法撤銷

適用場景及例項

層次聚類適用於以下場景:

  • 需要觀察不同層次的聚類結果
  • 資料集規模較小,計算複雜度可接受
  • 希望獲得更直觀的聚類結構

抱個拳,送個禮

點選 ↑ 領取

DBSCAN聚類方法

定義與基本原理

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一種基於密度的聚類方法,透過識別資料點的密度連線區域來形成簇。DBSCAN不需要預先指定簇的數量,能夠識別任意形狀的簇,並且對噪聲和異常點有較好的處理能力

DBSCAN的基本原理是定義兩個引數:( \varepsilon ) (Epsilon,鄰域半徑)和 ( \text{minPts} ) (最小點數),以確定簇的密度。資料點分為三類:

  • 核心點(Core Point):在其 ( \varepsilon ) 鄰域內包含至少 ( \text{minPts} ) 個點的點
  • 邊界點(Border Point):在其 ( \varepsilon ) 鄰域內包含少於 ( \text{minPts} ) 個點,但在核心點鄰域內的點
  • 噪聲點(Noise Point):既不是核心點,也不是邊界點的點

演算法步驟

DBSCAN 演算法的具體步驟如下:

  1. 隨機選擇一個未訪問的資料點
  2. 檢查該點的 ( \varepsilon ) 鄰域,如果鄰域內的資料點數量大於等於 ( \text{minPts} ),則將該點標記為核心點,並將鄰域內的所有點加入同一簇
  3. 對鄰域內的點進行遞迴擴充套件,直到所有核心點的鄰域都被訪問
  4. 對所有未標記的點,如果其屬於任何一個核心點的鄰域,則標記為邊界點;否則,標記為噪聲點
  5. 重複上述步驟,直到所有點都被訪問

核心點、邊界點與噪聲點

  • 核心點:鄰域內包含至少 ( \text{minPts} ) 個點
  • 邊界點:鄰域內少於 ( \text{minPts} ) 個點,但在核心點鄰域內
  • 噪聲點:既不是核心點,也不是邊界點的點

優缺點分析

優點:

  • 無需預先指定簇數 ( K )
  • 能處理任意形狀的簇
  • 對噪聲和異常點有較好的處理能力

缺點:

  • 對引數 ( \varepsilon ) 和 ( \text{minPts} ) 較為敏感
  • 計算複雜度較高,不適合大規模資料集

適用場景及例項

DBSCAN 聚類適用於以下場景:

  • 資料集具有任意形狀的簇
  • 存在噪聲和異常點,需要識別並處理
  • 希望在不預先指定簇數的情況下進行聚類

[ 抱個拳,總個結 ]

聚類方法比較與應用

三種聚類方法的比較

在前面章節中,我們詳細介紹了K-均值、層次聚類和DBSCAN這三種聚類方法。下面將從多個維度對這三種方法進行比較。

如何選擇適合的聚類方法

在實際應用中,選擇適合的聚類方法需要考慮以下因素:

  1. 資料集規模:對於大規模資料集,優先選擇計算複雜度較低的方法,如K-均值。
  2. 簇的形狀:如果資料中的簇形狀不規則或具有不同的密度,優先選擇DBSCAN或層次聚類。
  3. 噪聲和異常點:如果資料集中存在較多噪聲和異常點,DBSCAN是較好的選擇,因為它能夠有效處理噪聲。
  4. 計算資源:層次聚類的計算複雜度較高,適用於小規模資料集。在計算資源有限的情況下,可以選擇K-均值。
  5. 對簇數的預知:如果不能預先確定簇的數量,可以選擇層次聚類或DBSCAN。

透過以上內容,我們對K-均值、層次聚類和DBSCAN這三種聚類方法進行了解析,並比較了它們的優缺點和適用場景。希望這些內容能幫助大俠們在實際資料分析中選擇合適的聚類方法,提高資料處理和分析的效果。

更多內容見微*公號往期文章:10 種頂流聚類演算法,附 Python 實現

- 科研為國分憂,創新與民造福 -

日更時間緊任務急,難免有疏漏之處,還請大俠海涵

內容僅供學習交流之用,部分素材來自網路,侵聯刪

[ 演算法金,碎碎念 ]

基礎還是很重要的

能一步一步往前走是很幸福的

畢竟,不確定是常態

演算法知識直達星球:https://t.zsxq.com/ckSu3

全網同名,日更萬日,讓更多人享受智慧樂趣

如果覺得內容有價值,煩請大俠多多 分享、在看、點贊,助力演算法金又猛又持久、很黃很 BL 的日更下去;

同時邀請大俠 關注、星標 演算法金,圍觀日更萬日,助你功力大增、笑傲江湖

相關文章