我希望能够运行scikit的分层聚类算法(scikit.cluster. ward),并获得观测数据如何聚在一起的整个历史,从算法的第一次迭代(每个观测数据都是它自己的集群)到最后一次迭代(所有观测数据都在一个集群中)。scikit能做到吗?我需要的信息是,对于每次迭代,加入的簇/观测值,添加的簇/观测值,两者之间的距离。
都在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.17
中已弃用,将被AgglomerativeClustering
取代