首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算成对的简单散列“距离”

计算成对的简单散列“距离”
EN

Stack Overflow用户
提问于 2013-08-30 00:48:46
回答 1查看 1.7K关注 0票数 1

我想要构造一个成对距离矩阵,其中“距离”是两个字符串之间作为实现的这里之间的相似分数。我正在考虑使用sci学习的成对距离方法来完成这个任务,就像我以前在其他计算中使用过的那样,而且简单的并行化非常好。

下面是相关代码:

代码语言:javascript
复制
def hashdistance(str1, str2):
    hash1 = simhash(str1)
    hash2 = simhash(str2)

    distance = 1 - hash1.similarity(hash2)

    return distance   


strings = [d['string'] for d in data]
distance_matrix = pairwise_distances(strings, metric = lambda u,v: hashdistance(u, v))

strings看起来像['foo', 'bar', 'baz']

当我尝试这样做时,它会抛出错误ValueError: could not convert string to float。这可能是一件很愚蠢的事情,但我不知道为什么要在这里进行转换,以及为什么要抛出这个错误:metric中的匿名函数可以接受字符串并返回一个浮点数;为什么输入需要浮动,以及如何基于simhash‘距离’创建这个成对的距离矩阵?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-30 01:05:03

根据文献资料,只允许来自scipy.spatial.distance的度量,或者可以从:

代码语言:javascript
复制
In [26]: sklearn.metrics.pairwise.pairwise_distance_functions
Out[26]:
{'cityblock': <function sklearn.metrics.pairwise.manhattan_distances>,
 'euclidean': <function sklearn.metrics.pairwise.euclidean_distances>,
 'l1': <function sklearn.metrics.pairwise.manhattan_distances>,
 'l2': <function sklearn.metrics.pairwise.euclidean_distances>,
 'manhattan': <function sklearn.metrics.pairwise.manhattan_distances>}

一个问题是,如果metriccallable,那么sklearn.metrics.pairwise.check_pairwise_arrays会尝试将输入转换为浮动(scipy.spatial.distance.pdist会做类似的事情,所以您在那里运气不好),因此您的错误。

即使您可以传递一个可调用的函数,它也不会很好地扩展,因为pairwise_distances中的循环是纯Python。看来你得自己写循环了。我建议阅读pdist和/或pairwise_distances的源代码,以获得如何这样做的提示。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18523207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档