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