如何在scikit Ward获得集群历史记录?

时间:2014-06-11 20:20:24

标签: python scikit-learn hierarchical-clustering

我希望能够运行scikit的层次聚类算法(scikit.cluster.Ward),并从算法的第一次迭代中获取观察如何聚集在一起的整个历史记录(每个观察结果都是自己的聚类)到最后一次迭代(一个簇中的所有观察)。 scikit能做到吗? 我所追踪的信息是,每次迭代,加入的聚类/观察,添加的聚类/观察,两者之间的距离。

1 个答案:

答案 0 :(得分:3)

全部在ward.children。它的每一行都告诉你哪两个特征聚集在一起,从而创建一个新特征。因此,最终会有2 * n_features - 1个索引在它们增长时索引聚类。

import numpy as np
from scipy.ndimage import gaussian_filter1d
n_samples, n_feat1, n_feat2 = 400, 20, 20
X = np.random.randn(n_samples, n_feat1, n_feat2)
X = gaussian_filter1d(X, sigma=2, axis=1)
X = gaussian_filter1d(X, sigma=2, axis=2)

from sklearn.feature_extraction.image import grid_to_graph
connectivity = grid_to_graph(n_feat1, n_feat2)

from sklearn.cluster import WardAgglomeration
ward = WardAgglomeration(connectivity=connectivity)

ward.fit(X.reshape(n_samples, -1))

print ward.children

array([[ 35,  15],
       [ 36,  16],
       [ 34,  14],
       [181, 180],
       [201, 200],
       [161, 160],
       [241, 240],
       [339, 338],
       [221, 220],
       [24,   4],
       ...])

有400个功能(索引为0-399)。第一次合并在特征35和15之间,产生特征400.第二次合并在特征36和16之间,产生特征401.第三次合并在34和14之间,产生402,依此类推。

请注意sklearn.cluster.Ward中不推荐使用0.17AgglomerativeClustering会替换{{1}}。