自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

快速學會一個機器學習算法:層次聚類法

發(fā)布于 2025-3-20 07:37
瀏覽
0收藏

在機器學習領域,聚類分析是一種重要的無監(jiān)督學習方法,廣泛應用于數據挖掘、圖像處理、市場細分等多個領域。本文將深入探討層次聚類算法,包括其基本介紹、算法原理以及一個完整的案例分析,幫助讀者全面理解和掌握這一經典的聚類方法。

一、算法介紹

1.1 什么是層次聚類

    層次聚類(Hierarchical Clustering)是一種通過構建層次結構來組織數據的聚類方法。與其他聚類算法不同,層次聚類不需要預先指定簇的數量,而是通過構建一個樹狀結構(樹狀圖,Dendrogram)來展示數據的分層關系。層次聚類主要分為兩類:

  • 凝聚層次聚類(Agglomerative Hierarchical Clustering):自底向上,先將每個數據點視為一個單獨的簇,然后逐步合并最相似的簇,直到所有數據點合并為一個簇或達到預定的簇數量。
  • 分裂層次聚類(Divisive Hierarchical Clustering):自頂向下,先將所有數據點視為一個整體簇,然后逐步分裂成更小的簇,直到每個簇僅包含一個數據點或達到預定的簇數量。

二、算法原理

層次聚類的核心在于如何衡量簇與簇之間的相似性或距離,以及如何選擇合適的鏈接方法來決定簇的合并或分裂。以下將詳細介紹這些關鍵概念。

快速學會一個機器學習算法:層次聚類法-AI.x社區(qū)

2.3 算法流程

凝聚層次聚類為例,其基本流程如下:

  • 初始化:將每個數據點作為一個獨立的簇。
  • 計算距離:計算所有簇之間的距離,根據選擇的鏈接方法確定簇間距離。
  • 合并簇:找到距離最近的兩個簇,將它們合并為一個新的簇。
  • 更新距離矩陣:更新新簇與其他簇之間的距離。
  • 重復步驟3-4,直到所有數據點合并為一個簇,或達到預定的簇數量。

三、案例分析

為了更好地理解層次聚類的應用,下面我們通過一個具體的案例進行分析。我們將使用Python中的??scikit-learn??庫生成模擬數據,并實現層次聚類算法。

3.1 生成模擬數據

我們將生成一個包含三簇數據的二維數據集,每個簇的數據點呈現高斯分布。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from scipy.cluster.hierarchy import dendrogram, linkage
from sklearn.cluster import AgglomerativeClustering

# 1. 生成模擬數據
X, y_true = make_blobs(n_samples=50, centers=1, cluster_std=0.60, random_state=0)

# 可視化數據
plt.figure(figsize=(8, 5))
plt.scatter(X[:, 0], X[:, 1], s=50, color='gray')
plt.title("模擬數據分布")
plt.xlabel("特征1")
plt.ylabel("特征2")
plt.show()

3.2 實現層次聚類

我們將使用??scipy???庫中的??linkage???和??dendrogram??函數來實現層次聚類,并使用不同的鏈接方法進行比較。

# 2. 構建層次聚類模型
linked = linkage(X, method='ward')

# 3. 繪制樹狀圖
plt.figure(figsize=(10, 7))
dendrogram(linked,
           orientation='top',
           distance_sort='descending',
           show_leaf_counts=True)
plt.title("層次聚類樹狀圖(Ward法)")
plt.xlabel("樣本點索引")
plt.ylabel("距離")
plt.show()

3.3 確定簇的數量

通過觀察樹狀圖,我們可以選擇一個合適的距離閾值來確定簇的數量。我們選擇將數據分為3個簇。

# 4. 確定簇的數量并進行聚類
n_clusters = 3
cluster = AgglomerativeClustering(n_clusters=n_clusters, linkage='ward')  
cluster_labels = cluster.fit_predict(X)

# 5. 可視化聚類結果
plt.figure(figsize=(8, 5))
plt.scatter(X[:, 0], X[:, 1], c=cluster_labels, cmap='viridis', s=50)
plt.title(f"層次聚類結果({n_clusters}個簇)")
plt.xlabel("特征1")
plt.ylabel("特征2")
plt.show()

3.5 運行結果

生成的模擬數據圖:

快速學會一個機器學習算法:層次聚類法-AI.x社區(qū)

層次聚類樹狀圖:

快速學會一個機器學習算法:層次聚類法-AI.x社區(qū)

層次聚類結果:

快速學會一個機器學習算法:層次聚類法-AI.x社區(qū)

    通過上述代碼,我們生成了一個二維數據集,并使用層次聚類方法將其分為三個簇。樹狀圖清晰地展示了數據的分層結構,選擇合適的距離閾值后,聚類結果與真實簇的分布高度吻合,驗證了層次聚類的有效性。

四、總結

層次聚類作為一種經典的聚類方法,具有以下優(yōu)缺點:

優(yōu)點

  • 無需預先指定簇的數量:通過樹狀圖可以靈活選擇簇的數量。
  • 能夠發(fā)現數據的層次結構:適用于需要多層次分析的數據。
  • 適用于不同形狀的簇:尤其是在選擇合適的鏈接方法時。

缺點

  • 計算復雜度高:對于大規(guī)模數據集,計算和存儲成本較高。
  • 對噪聲和異常值敏感:可能會影響聚類結果的準確性。
  • 鏈接方法的選擇依賴經驗:不同的鏈接方法可能導致不同的聚類結果。

    在實際應用中,層次聚類適用于中小規(guī)模的數據集,特別是當需要理解數據的層次結構時。然而,對于大規(guī)模數據集,可能需要考慮其他更高效的聚類算法,如K-Means或DBSCAN。

本文轉載自??寶寶數模AI??,作者:BBSM

已于2025-3-20 09:39:36修改
收藏
回復
舉報
回復
相關推薦