Plot Hierarchical Clustering Dendrogram
Plot Hierarchical Clustering Dendrogram
此範例使用AgglomerativeClustering(聚集聚類)和scipy中的樹狀圖法繪製Hierarchical Clustering Dendrogram(分層式聚類樹狀圖)
Hierarchical Clustering Dendrogram透過一種階層架構的方式,將資料分層反覆進行分群或聚集,以產生最後的樹狀結構,常見的方式有兩種:
如果採用聚集的方式,階層式分群法可由樹狀結構的底部開始,將資料或聚集逐次合併
如果採用分群的方式,則由樹狀結構的頂端開始,將聚集逐次分群
(一)引入函式庫
numpy : 產生陣列數值
matplotlib.pyplot : 用來繪製影像
scipy.cluster.hierarchy import dendrogram : 繪製樹狀圖
sklearn.datasets import load_iris : 匯入資料集
sklearn.cluster import AgglomerativeClustering : 匯入聚集聚類演算法
(二)定義函式
numpy.zeros() : 創建空矩陣
numpy.column_stack() : 將一維陣列堆疊成二維陣列
scipy.cluster.hierarchy.dendrogram(Z, p=30, truncate_mode=None, color_threshold=None, get_leaves=True, orientation='top', labels=None, count_sort=False, distance_sort=False, show_leaf_counts=True, no_plot=False, no_labels=False, leaf_font_size=None, leaf_rotation=None, leaf_label_func=None, show_contracted=False, link_color_func=None, ax=None, above_threshold_color='b')
Z : 決定群聚距離的定義方式
'single-linkage agglomerative algorithm'(單一連結聚合演算法):群聚間的距離可以定義為不同群聚中最接近兩點間的距離
'complete-linkage agglomerative algorithm'(完整連結聚合演算法):群聚間的距離定義為不同群聚中最遠兩點間的距離
'average-linkage agglomerative algorithm'(平均連結聚合演算法):群聚間的距離則定義為不同群聚間各點與各點間距離總和的平均
'Ward's method'(沃德法):群聚間的距離定義為在將兩群合併後,各點到合併後的群中心的距離平方和
(三)繪製圖片
uster.AgglomerativeClustering(n_clusters=2, affinity='euclidean', memory=None, connectivity=None, compute_full_tree='auto', linkage='ward', distance_threshold=None)
n_clusters : 要查找的群集數。如果distance_threshold不為None,則必須為None
affinity : 用於計算鏈接的度量
memory :暫存樹計算的輸出
connectivity : 連接矩陣
compute_full_tree : 在n_clusters處盡早停止構建樹。如果聚集的數量與樣本數相比不小的話,對於減少計算時間很有用。當有指定連接矩陣時,此選項才有作用。需要注意的是,當改變群集數量並使用暫存時,將樹完整計算完可能是有利於結果分群
linkage : 連結方式,與上面Z相同
distance_threshold : 設定閥值,鏈接距離等於高於該值時,群集將不會合併。
```python
iris = load_iris() # 匯入資料集
X = iris.data
setting distance_threshold=0 ensures we compute the full tree.
model = AgglomerativeClustering(distance_threshold=0, n_clusters=None)
model = model.fit(X) plt.title('Hierarchical Clustering Dendrogram')
plot the top three levels of the dendrogram
plot_dendrogram(model, truncate_mode='level', p=3) plt.xlabel("Number of points in node (or index of point if no parenthesis).") plt.show()
Last updated