網(wǎng)站頁面小圖標(biāo)怎么做深圳優(yōu)化公司排名
聚合聚類(Agglomerative Clustering)是一種層次聚類算法,通過逐步合并或“聚集”它們來構(gòu)建嵌套聚類。這種方法采用自底向上的方式構(gòu)建聚類層次:它從將每個數(shù)據(jù)點作為單個聚類開始,然后迭代合并最接近的聚類對,直到所有數(shù)據(jù)點合并為一個聚類,或直到達到指定的聚類數(shù)量。以下是更詳細(xì)的概述:
聚合聚類的工作原理
- 初始化:開始時,將每個數(shù)據(jù)點視為一個單獨的聚類。因此,如果你有N個數(shù)據(jù)點,你最初會有N個聚類。
- 相似性度量:選擇一個度量標(biāo)準(zhǔn)來衡量聚類之間的距離(例如,對于空間中的點使用歐幾里得距離,但根據(jù)數(shù)據(jù)的性質(zhì)可以使用其他距離)。
- 連接準(zhǔn)則:選擇一個連接準(zhǔn)則,這決定了作為觀測對之間距離的函數(shù)的聚類集合之間的距離。常見的連接準(zhǔn)則包括:
- 最短連接:兩個聚類之間的距離定義為一個聚類中任何成員到另一個聚類中任何成員的最短距離。
- 最長連接:兩個聚類之間的距離定義為一個聚類中任何成員到另一個聚類中任何成員的最長距離。
- 平均連接:兩個聚類之間的距離定義為一個聚類中每個成員到另一個聚類中每個成員的平均距離。
- Ward方法:兩個聚類之間的距離通過兩個聚類合并后總體內(nèi)聚類方差增加量來定義。
- 迭代合并:在每一步中,根據(jù)所選的距離和連接準(zhǔn)則,找到最接近的聚類對并將它們合并為一個單獨的聚類。更新存儲聚類之間距離的距離矩陣。
- 終止:重復(fù)迭代合并,直到所有數(shù)據(jù)點合并為一個聚類或達到停止準(zhǔn)則(例如,期望的聚類數(shù)量)。
優(yōu)點和缺點
優(yōu)點:
? - 聚合聚類在距離和連接準(zhǔn)則的選擇上具有多樣性,使其適用于各種數(shù)據(jù)集。
? - 它產(chǎn)生了一個層次結(jié)構(gòu),這對于不同規(guī)模的聚類數(shù)據(jù)結(jié)構(gòu)是有信息量的。
-缺點:
? - 對于大數(shù)據(jù)集來說,它可能計算成本高,因為它需要在每次迭代中計算和更新所有聚類對之間的距離。
? - 算法的結(jié)果可能對距離和連接準(zhǔn)則的選擇敏感。
應(yīng)用
聚合聚類在廣泛的應(yīng)用領(lǐng)域中被使用,包括:
- 生物學(xué):用于構(gòu)建系統(tǒng)發(fā)育樹。
- 文檔和文本挖掘:用于對相似文檔進行分組或在語料庫中找到主題。
- 圖像分析:用于分割圖像中的相似區(qū)域。
- 客戶細(xì)分:基于購買行為或偏好識別客戶數(shù)據(jù)中的不同組。
聚合聚類是一種強大的工具,用于探索和理解復(fù)雜數(shù)據(jù)集內(nèi)的結(jié)構(gòu),通過揭示數(shù)據(jù)的
要在Python中實現(xiàn)聚合聚類,您可以使用scikit-learn
庫的AgglomerativeClustering
類。此示例演示了如何將聚合聚類應(yīng)用于合成數(shù)據(jù)集:
from sklearn.datasets import make_blobs
from sklearn.cluster import AgglomerativeClustering
import matplotlib.pyplot as plt# 生成一個合成數(shù)據(jù)集
X, _ = make_blobs(n_samples=150, centers=4, cluster_std=1.0, random_state=42)# 實例化并擬合聚合聚類模型
# n_clusters指定要找到的聚類數(shù)量
# linkage='ward'表示算法將最小化被合并的聚類的方差
agg_clustering = AgglomerativeClustering(n_clusters=4, affinity='euclidean', linkage='ward')
cluster_assignment = agg_clustering.fit_predict(X)# 繪制聚類
plt.scatter(X[:, 0], X[:, 1], c=cluster_assignment, cmap='rainbow')
plt.title('聚合聚類')
plt.xlabel('特征1')
plt.ylabel('特征2')
plt.show()
它是如何工作的:
- 使用
make_blobs
生成一組合成的數(shù)據(jù)點,這些數(shù)據(jù)點分布在幾個“blob”中。這是我們要聚類的數(shù)據(jù)集。 - 使用所需的聚類數(shù)量(
n_clusters=4
)和要使用的鏈接類型實例化AgglomerativeClustering
。在這種情況下,使用的是linkage='ward'
,它最小化了被合并的聚類的方差。 - 在數(shù)據(jù)集上調(diào)用
fit_predict
方法來執(zhí)行聚類。此方法返回每個數(shù)據(jù)點的聚類標(biāo)簽。 - 最后,用表示其聚類分配的顏色繪制數(shù)據(jù)點。這種可視化有助于理解數(shù)據(jù)點在算法創(chuàng)建的不同聚類之間的分布。
Dendograms樹狀圖解釋
樹狀圖是顯示對象之間層次關(guān)系的圖表。它通常用于描繪由層次聚類產(chǎn)生的聚類排列。樹狀圖通過在非單一聚類及其子聚類之間繪制U型鏈接來說明每個聚類是如何組成的。U型鏈接的高度指示了聯(lián)合聚類之間的距離(或不相似性)。當(dāng)您向上移動樹狀圖時,聚類之間的不相似性變得更大。在聚合聚類的上下文中,樹狀圖提供了聚類過程的視覺總結(jié),顯示了聚類合并的順序以及每次合并發(fā)生的距離。
現(xiàn)在,讓我們編寫代碼,對一個示例數(shù)據(jù)集執(zhí)行聚合聚類,然后用樹狀圖可視化層次聚類:
import numpy as np
import matplotlib.pyplot as plt
from scipy.cluster.hierarchy import dendrogram, linkage
from sklearn.datasets import make_blobs# 生成一個樣本數(shù)據(jù)集
X, labels_true = make_blobs(n_samples=50, centers=3, cluster_std=0.60, random_state=0)# 執(zhí)行層次/聚合聚類
Z = linkage(X, 'ward') # 'ward'連接方式最小化合并的聚類的方差# 繪制樹狀圖
plt.figure(figsize=(10, 7))
plt.title("聚合聚類樹狀圖")
plt.xlabel("樣本索引")
plt.ylabel("距離")
dendrogram(Z, leaf_rotation=90., leaf_font_size=8.,)
plt.show()