我有一个数据框,用于保存数据框中每个文档之间的 Word Mover 距离。我正在运行 kmediods 来生成集群。
1 2 3 4 5
1 0.00 0.05 0.07 0.04 0.05
2 0.05 0.00 0.06 0.04 0.05
3. 0.07 0.06 0.00 0.06 0.06
4 0.04 0.04. 0.06 0.00 0.04
5 0.05 0.05 0.06 0.04 0.00
kmed = KMedoids(n_clusters= 3, random_state=123, method ='pam').fit(distance)
在这个初始矩阵上运行并生成集群后,我想添加要集群的新点。在向距离矩阵添加新文档后,我最终得到: 1 2 3 4 5 6
1 0.00 0.05 0.07 0.04 0.05 0.12
2 0.05 0.00 0.06 0.04 0.05 0.21
3. 0.07 0.06 0.00 0.06 0.06 0.01
4 0.04 0.04. 0.06 0.00 0.04 0.05
5 0.05 0.05 0.06 0.04 0.00 0.12
6. 0.12 0.21 0.01 0.05 0.12 0.00
我尝试在新行上使用 kmed.predict。kmed.predict(new_distance.loc[-1: ])
但是,这给了我尺寸不兼容的错误 X.shape[1] == 6
而 Y.shape[1] == 5
.如何使用新文档的这个距离来确定它应该属于哪个集群?这甚至可能吗,还是我每次都必须重新计算集群?谢谢!
最佳答案
source code对于 k-medoids 说如下:
def transform(self, X):
"""Transforms X to cluster-distance space.
Parameters
----------
X : {array-like, sparse matrix}, shape (n_query, n_features), \
or (n_query, n_indexed) if metric == 'precomputed'
Data to transform.
"""
我假设您使用 precomputed
metric(因为您计算分类器外的距离),所以在您的情况下 n_query
是新文档的数量,n_indexed
是 fit
的文档数方法被调用。在您的特定情况下,当您将模型拟合到 5 个文档然后想要对第 6 个文档进行分类时,
X
用于分类应具有形状 (1,5)
,可以计算为kmed.predict(new_distance.loc[-1: , :-1])
关于python - 如何使用距离矩阵和 kmedoids 将新观测值分配给聚类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69408535/