【问题标题】:Levenshtein distance affinity propagation prediction queryLevenshtein 距离亲和传播预测查询
【发布时间】:2017-04-13 18:25:26
【问题描述】:

我对相似性传播这个概念了解不多,但在我的项目中,我发现对我正在使用的文本进行聚类很有用。目前,我已经广泛遵循我在网上可以找到的任何代码 sn-ps。

所以:

lev_similarity = -1*np.array([[Levenshtein.distance(w1,w2) for w1 in new_data] for w2 in new_data])
ap = sklearn.cluster.AffinityPropagation(affinity="euclidean", damping=0.5)
ap.fit(lev_similarity)

如您所见,我使用 Levenshtein 算法来定义两点之间的距离。

现在我的问题:

http://scikit-learn.org/stable/modules/generated/sklearn.cluster.AffinityPropagation.html

  1. 此时我想使用这个模型给我一个新点的最近集群,但我不知道如何向量化我的原始字符串。为了使用 ap.predict 方法,在这种情况下如何将字符串转换为适当的形式?
  2. 或者将我的所有数据输入到拟合模型中,然后使用完成的模型进行查询是否更有意义?在这种情况下,我将如何准确查询字符串中给定关键字的最近簇?

编辑:

显然我正在使用预先计算的距离测量,因此使用 affinity="precomputed" 似乎是正确的选择。在这种情况下,

lev_similarity = -1*np.array([[Levenshtein.distance(w1,w2) for w1 in new_data] for w2 in new_data])
ap = sklearn.cluster.AffinityPropagation(affinity="precomputed", damping=0.5)
ap.fit(lev_similarity)

new_data 也封装了测试数据。

那么问题就变成了:如何用这个模型进行查询?

【问题讨论】:

    标签: python scikit-learn


    【解决方案1】:

    对于您的第一个问题,您提供的文档链接说“预测”方法接受并返回和数组 - 这是一个列表。在用户指南(文档中的链接)中,我找到了这个输入/输出示例:

        labels_true = [0, 0, 0, 1, 1, 1]
        labels_pred = [0, 0, 1, 1, 2, 2]. 
    

    所以,如果您已经有一个包含要建模的数据的字符串,只需将其转换为列表即可。

    该文档还描述了 AffinityPropagation 类返回哪些方法来回答您的第二个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-14
      • 2014-08-04
      • 2015-01-28
      • 2014-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多