偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

快速學(xué)會一個機器學(xué)習(xí)算法:層次聚類法

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

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

一、算法介紹

1.1 什么是層次聚類

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

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

二、算法原理

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

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

2.3 算法流程

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

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

三、案例分析

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

3.1 生成模擬數(shù)據(jù)

我們將生成一個包含三簇數(shù)據(jù)的二維數(shù)據(jù)集,每個簇的數(shù)據(jù)點呈現(xiàn)高斯分布。

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. 生成模擬數(shù)據(jù)
X, y_true = make_blobs(n_samples=50, centers=1, cluster_std=0.60, random_state=0)

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

3.2 實現(xiàn)層次聚類

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

# 2. 構(gòu)建層次聚類模型
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 確定簇的數(shù)量

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

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

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

3.5 運行結(jié)果

生成的模擬數(shù)據(jù)圖:

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

層次聚類樹狀圖:

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

層次聚類結(jié)果:

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

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

四、總結(jié)

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

優(yōu)點

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

缺點

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

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

本文轉(zhuǎn)載自??寶寶數(shù)模AI??,作者:BBSM

已于2025-3-20 09:39:36修改
收藏
回復(fù)
舉報
回復(fù)
相關(guān)推薦