ward_tree#
- sklearn.cluster.ward_tree(X, *, connectivity=None, n_clusters=None, return_distance=False)[原始碼]#
基於特徵矩陣的 Ward 分群。
遞迴合併會最小化群內變異數增加的成對群集。
慣性矩陣使用基於 Heapq 的表示法。
這是結構化版本,會考慮樣本之間的一些拓撲結構。
更多資訊請見使用者指南。
- 參數:
- Xarray-like,形狀 (n_samples, n_features)
表示要分群的
n_samples
樣本的特徵矩陣。- connectivity{array-like,稀疏矩陣},default=None
連通性矩陣。為每個樣本定義遵循給定資料結構的相鄰樣本。假設矩陣是對稱的,並且只使用上半三角部分。預設為 None,即 Ward 演算法是非結構化的。
- n_clustersint,default=None
n_clusters
應小於n_samples
。在n_clusters
處提前停止樹的建構。如果群集數量與樣本數量相比不大,這對於減少計算時間很有用。在這種情況下,不會計算完整的樹,因此「子節點」輸出用途有限,應該使用「父節點」輸出。此選項僅在指定連通性矩陣時有效。- return_distancebool,default=False
如果
True
,則傳回群集之間的距離。
- 傳回值:
- childrenndarray,形狀 (n_nodes-1, 2)
每個非葉節點的子節點。小於
n_samples
的值對應於樹的葉節點,這些葉節點是原始樣本。大於或等於n_samples
的節點i
是非葉節點,並且具有子節點children_[i - n_samples]
。或者,在第 i 次疊代時,children[i][0] 和 children[i][1] 合併以形成節點n_samples + i
。- n_connected_componentsint
圖中連通元件的數量。
- n_leavesint
樹中的葉節點數量。
- parentsndarray,形狀 (n_nodes,) 或 None
每個節點的父節點。僅在指定連通性矩陣時傳回,否則傳回「None」。
- distancesndarray,形狀 (n_nodes-1,)
僅當
return_distance
設定為True
時傳回(為了相容性)。節點中心之間的距離。distances[i]
對應於節點children[i, 1]
和children[i, 2]
之間的加權歐氏距離。如果節點指的是樹的葉節點,則distances[i]
是它們的未加權歐氏距離。距離以下列方式更新(來自 scipy.hierarchy.linkage)新的項目 \(d(u,v)\) 計算如下:
\[d(u,v) = \sqrt{\frac{|v|+|s|} {T}d(v,s)^2 + \frac{|v|+|t|} {T}d(v,t)^2 - \frac{|v|} {T}d(s,t)^2}\]其中 \(u\) 是新合併的群集,由群集 \(s\) 和 \(t\) 組成,\(v\) 是森林中未使用的群集,\(T=|v|+|s|+|t|\),而 \(|*|\) 是其引數的基數。這也稱為增量演算法。
範例
>>> import numpy as np >>> from sklearn.cluster import ward_tree >>> X = np.array([[1, 2], [1, 4], [1, 0], ... [4, 2], [4, 4], [4, 0]]) >>> children, n_connected_components, n_leaves, parents = ward_tree(X) >>> children array([[0, 1], [3, 5], [2, 6], [4, 7], [8, 9]]) >>> n_connected_components 1 >>> n_leaves 6