機器學習 - HDBSCAN聚類



HDBSCAN聚類的運作方式

HDBSCAN使用互達性圖構建層次聚類,這是一個圖,其中每個資料點都是一個節點,它們之間的邊根據相似性或距離的度量進行加權。如果兩個點的互達距離低於給定的閾值,則透過連線這兩個點來構建該圖。

兩個點之間的互達距離是它們的達距離的最大值,這是衡量一個點從另一個點到達的難易程度的指標。兩個點之間的達距離定義為它們的距離和沿其路徑的任何點的最小密度的最大值。

然後使用最小生成樹 (MST) 演算法從互達性圖中提取層次聚類。MST 的葉節點對應於單個數據點,而內部節點對應於不同大小和形狀的聚類。

然後,HDBSCAN演算法將壓縮樹演算法應用於MST以提取聚類。壓縮樹是MST的緊湊表示,僅包含樹的內部節點。然後在特定級別切割壓縮樹以獲得聚類,切割的級別由使用者定義的最小聚類大小或基於聚類穩定性的啟發式方法確定。

Python實現

HDBSCAN作為一個Python庫可用,可以使用pip安裝。該庫提供HDBSCAN演算法的實現以及一些用於資料預處理和視覺化的有用函式。

安裝

要安裝HDBSCAN,請開啟終端視窗並鍵入以下命令:

pip install hdbscan

用法

要使用HDBSCAN,首先匯入hdbscan庫:

import hdbscan

接下來,我們使用scikit-learn中的make_blobs()函式生成一個樣本資料集:

# generate random dataset with 1000 samples and 3 clusters
X, y = make_blobs(n_samples=1000, centers=3, random_state=42)

現在,建立一個HDBSCAN類的例項並將其擬合到資料:

clusterer = hdbscan.HDBSCAN(min_cluster_size=10, metric='euclidean')

# fit the data to the clusterer
clusterer.fit(X)

這將把HDBSCAN應用於資料集並將每個點分配到一個聚類。為了視覺化聚類結果,您可以繪製資料,並根據其聚類標籤對每個點進行著色:

# get the cluster labels
labels = clusterer.labels_

# create a colormap for the clusters
colors = np.array([x for x in 'bgrcmykbgrcmykbgrcmykbgrcmyk'])
colors = np.hstack([colors] * 20)

# plot the data with each point colored according to its cluster label
plt.figure(figsize=(7.5, 3.5))
plt.scatter(X[:, 0], X[:, 1], c=colors[labels])
plt.show()

此程式碼將生成資料的散點圖,每個點根據其聚類標籤著色如下:

hdbscan

HDBSCAN還提供了一些可以調整的引數來微調聚類結果:

  • min_cluster_size - 聚類的最小大小。不屬於任何聚類的點標記為噪聲。

  • min_samples - 被認為是核心點的點鄰域中的最小樣本數。

  • cluster_selection_epsilon - 用於聚類選擇的鄰域半徑。

  • metric - 用於衡量點之間相似性的距離度量。

HDBSCAN聚類的優勢

HDBSCAN比其他聚類演算法具有幾個優勢:

  • 更好地處理不同密度的聚類 - HDBSCAN可以識別不同密度的聚類,這是許多資料集中常見的問題。

  • 能夠檢測不同形狀和大小的聚類 - HDBSCAN可以識別不一定是球形的聚類,這是許多資料集中另一個常見的問題。

  • 無需指定聚類數量 - HDBSCAN不需要使用者指定聚類數量,這在先驗很難確定。

  • 對噪聲具有魯棒性 - HDBSCAN對噪聲資料具有魯棒性,可以將異常值識別為噪聲點。

廣告
© . All rights reserved.