Levenshtein距离亲和传播预测查询

时间:2016-11-29 16:47:17

标签: python scikit-learn

我不太了解亲和力传播作为一个概念,但在我的项目中,我发现聚类我正在使用的文本很有用。目前,我已经广泛关注了我在网上找到的任何代码片段。

所以:

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. 或者将所有数据输入到模型中,然后用完成的模型查询会更有意义吗?在这种情况下,我如何在字符串中查询给定关键字的最近集群?
  3. 修改

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

    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也封装了测试数据。

    然后问题变成:我如何使用此模型进行查询?

1 个答案:

答案 0 :(得分:0)

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

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

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

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