我想研究具有16230个特征的47532个个体。因此,我创建了一个具有16230行和47532列的矩阵
>>> import scipy.cluster.hierarchy as hcluster
>>> from scipy.spatial import distance
>>> import sklearn.cluster import AgglomerativeClustering
>>> matrix.shape
(16230, 47532)
# remove all duplicate vectors in order to not waste computation time
>>> uniq_vectors, row_index = np.unique(matrix, return_index=True, axis=0)
>>> uniq_vectors.shape
(22957, 16230)
# compute distance between each observations
>>> distance_matrix = distance.pdist(uniq_vectors, metric='jaccard')
>>> distance_matrix_2d = distance.squareform(distance_matrix, force='tomatrix')
>>> distance_matrix_2d.shape
(22957, 22957)
# Perform linkage
>>> linkage = hcluster.linkage(distance_matrix, method='complete')
所以现在我可以使用scikit-learn进行聚类
>>> model = AgglomerativeClustering(n_clusters=40, affinity='precomputed', linkage='complete')
>>> cluster_label = model.fit_predict(distance_matrix_2d)
如何使用此模型预测未来的观测?
实际上AgglomerativeClustering
不拥有predict
方法,重新计算16230 x (47532 + 1)
的距离太长了
是否可以计算新观测值与所有预先计算的聚类之间的距离?
实际上是从scipy中使用pdist
来计算距离n x n
在我的情况下,我想根据一个观测值o
与n
样本{{1 }}
感谢您的关注
答案 0 :(得分:1)
答案很简单:您不能。分层聚类不是为了预测新观测值的聚类标签而设计的。发生这种情况的原因是,它只是根据数据点的距离进行链接,而没有为每个群集定义“区域”。
我相信现阶段有两种解决方案:
KMeans
是一个不错的选择,因为它可以明确地将新的数据点分配给最近的群集。