python - 如何使用距离矩阵和 kmedoids 将新观测值分配给聚类?

标签 python nlp cluster-analysis distance k-means

我有一个数据框,用于保存数据框中每个文档之间的 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] == 6Y.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_indexedfit 的文档数方法被调用。
在您的特定情况下,当您将模型拟合到 5 个文档然后想要对第 6 个文档进行分类时,X用于分类应具有形状 (1,5) ,可以计算为
kmed.predict(new_distance.loc[-1: , :-1])

关于python - 如何使用距离矩阵和 kmedoids 将新观测值分配给聚类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69408535/

相关文章:

python - 从列表名称作为列名称的多个列表创建数据框

python - SpaCy NLP-检测动词形式

r - R 中用于文本分析的常见名字列表?

algorithm - 哪个集群节点应该处于事件状态?

python - 插入 python mysql 未在数据库中更新

python - 通过 kwargs 更新模型 django

c# - 类似于一组字符串的字符串

algorithm - 将 2d 整数坐标聚类成最多 N 个点的集合

python - 从自上而下的相机确定多边形表面旋转的方法

nlp - 使用 word2vec 时删除停用词