一、層次聚類分析概述
層次聚類分析是一種將數據對象分組的技術,它根據數據對象之間的相異度構造一棵樹形結構,對於給定的數據集,聚類分析將其劃分成若干個組或類以滿足數據的規律性和可視化的需要。分為凝聚式層次聚類和分裂式層次聚類兩種方法。凝聚式從每個樣本自身作為一個類開始,逐步將樣本類別合併,分裂式從整個樣本集開始,逐步將樣本分成兩個部分。
在聚類過程中,最好的劃分是使類別內部的相似程度最高,而類別之間的相似程度最低。衡量這兩個相似程度常使用歐氏距離、曼哈頓距離、閔可夫斯基距離等距離度量。
層次聚類應用非常廣泛,如生物學、社會學等領域都應用了層次聚類手段。
二、凝聚式層次聚類
凝聚式層次聚類是另一種聚類方法,最開始每個樣本自己一個類,樣本之間的距離通過計算兩個類之間的連線得到,將距離最近的兩個類合併為一個類,更新距離矩陣。依次重複這個過程,直到所有樣本被合併到一個類中。這個過程可以用一棵樹表示,被稱為樹狀圖( Dendrogram)。
from scipy.cluster.hierarchy import dendrogram, linkageimport numpy as npimport matplotlib.pyplot as plt#生成數據np.random.seed(1)n = 100t1 = np.random.normal(loc=10, scale=2, size=(n, 2))t2 = np.random.normal(loc=3, scale=1, size=(n, 2))data = np.vstack([t1, t2])#層次聚類過程Z = linkage(data, method='ward', metric='euclidean')#獲取樹狀圖plt.figure(figsize=(16, 9))dendrogram(Z)plt.show()
三、分裂式層次聚類
分裂式層次聚類是另一種聚類方法,最開始所有樣本都在一個類中,樣本之間的距離通過計算此類的方差來得到。將該類拆分為兩個類,使得拆分後的類內方差之和最小。依次重複這個過程,直到每個樣本分別成為一個類為止。
from sklearn.cluster import AgglomerativeClusteringfrom sklearn.datasets import make_moonsimport matplotlib.pyplot as plt#生成數據X, y = make_moons(n_samples=300, noise=0.05, random_state=0)#層次聚類過程model = AgglomerativeClustering(n_clusters=2)model.fit(X)#可視化聚類結果plt.figure(figsize=(8, 6))plt.scatter(X[:, 0], X[:, 1], c=model.labels_, cmap='viridis')plt.show()
四、優缺點
層次聚類分析可以直觀描述聚類過程,可以生成樹狀圖和熱力圖,有利於對聚類結果的解釋和可視化;同時因為演算法本身沒有目標函數,對初始結果高度敏感,計算複雜度很高,對大型數據集不適用。
五、總結
層次聚類分析是一種基本而重要的聚類方法,常用於數據挖掘、統計學、生物信息、模式識別、社會網路分析等領域,在分析大型數據和模式發現上取得了積極的應用結果。在處理公司、商業、政策、數據分析和學術研究等方面也有一定的應用。
原創文章,作者:MVMKW,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/370103.html