機器學習 - BIRCH 聚類



BIRCH(平衡迭代減少和聚類層次結構)是一種層次聚類演算法,旨在有效地處理大型資料集。該演算法透過遞迴地將資料劃分為子叢集來構建樹狀的叢集結構,直到滿足停止條件。

BIRCH 使用兩種主要的資料結構來表示叢集:聚類特徵 (CF) 和子叢集特徵 (SCF)。CF 用於總結一組資料點的統計屬性,而 SCF 用於表示子叢集的結構。

BIRCH 聚類有三個主要步驟 -

  • 初始化 - BIRCH 構造一個空的樹結構並設定節點中可以儲存的 CF 的最大數量。

  • 聚類 - BIRCH 一次讀取一個數據點並將它們新增到樹結構中。如果節點中已經存在 CF,則 BIRCH 使用新資料點更新 CF。如果節點中沒有 CF,則 BIRCH 為資料點建立一個新的 CF。然後,BIRCH 檢查節點中 CF 的數量是否超過最大閾值。如果超過閾值,BIRCH 透過遞迴地劃分節點中的 CF 來建立一個新的子叢集。

  • 細化 - BIRCH 透過合併基於距離度量的相似子叢集來細化樹結構。

在 Python 中實現 BIRCH 聚類

為了在 Python 中實現 BIRCH 聚類,我們可以使用 scikit-learn 庫。scikitlearn 庫提供了一個 BIRCH 類,該類實現了 BIRCH 演算法。

以下是如何使用 BIRCH 類對資料集進行聚類的示例 -

示例

from sklearn.datasets import make_blobs
from sklearn.cluster import Birch
import matplotlib.pyplot as plt

# Generate sample data
X, y = make_blobs(n_samples=1000, centers=10, cluster_std=0.50,
random_state=0)

# Cluster the data using BIRCH
birch = Birch(threshold=1.5, n_clusters=4)
birch.fit(X)
labels = birch.predict(X)

# Plot the results
plt.figure(figsize=(7.5, 3.5))
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='winter')
plt.show()

在此示例中,我們首先使用 scikit-learn 的 make_blobs 函式生成一個樣本資料集。然後,我們使用 BIRCH 演算法對資料集進行聚類。對於 BIRCH 演算法,我們例項化一個 Birch 物件,並將閾值引數設定為 1.5,並將 n_clusters 引數設定為 4。然後,我們使用 fit 方法將 Birch 物件擬合到資料集,並使用 predict 方法預測叢集標籤。最後,我們使用散點圖繪製結果。

輸出

執行給定程式時,它將生成以下繪圖作為輸出 -

Birch_algorithm

BIRCH 聚類的優點

與其他聚類演算法相比,BIRCH 聚類具有以下幾個優點 -

  • 可擴充套件性 - BIRCH 旨在透過使用樹狀結構來表示叢集來有效地處理大型資料集。

  • 記憶體效率 - BIRCH 使用 CF 和 SCF 資料結構來總結資料點的統計屬性,從而減少了儲存叢集所需的記憶體。

  • 快速聚類 - BIRCH 可以快速聚類資料點,因為它使用增量聚類方法。

BIRCH 聚類的缺點

BIRCH 聚類也有一些缺點,包括 -

  • 對引數設定敏感 - BIRCH 聚類的效能可能對引數的選擇敏感,例如節點中可以儲存的 CF 的最大數量以及用於建立子叢集的閾值。

  • 處理非球形叢集的能力有限 - BIRCH 假設叢集是球形的,這意味著它可能無法在具有非球形叢集的資料集上表現良好。

  • 在距離度量選擇方面的靈活性有限 - BIRCH 預設使用歐幾里得距離度量,這可能不適用於所有資料集。

廣告