2016-11-29 49 views
0

我不太了解亲和力传播作为一个概念,但在我的项目中,我发现将我正在使用的文本聚类很有用。目前我已经广泛地遵循我可以在网上找到的任何代码片段。Levenshtein距离亲和力传播预测查询

所以:

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. 或者,它会更有意义输入我所有的数据到拟合模型,然后与完成的模型查询?在这种情况下,我将如何精确查询字符串中给定关键字的最近聚类?

编辑:

显然我与预先计算的距离测量工作,所以有亲和力= “预计算”似乎是正确的选择。在这种情况下,

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

那么问题就变成了:我怎么用这个模型查询?

回答

0

对于第一个问题,您提供的文档链接说'预测'方法接受并返回数组 - 这是一个列表。在用户手册(在doc链接),我发现输入/输出的这个例子:

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

所以,如果你已经有了数据模型字符串,只需将它转换成一个列表。

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