繁体   English   中英

键值对的聚类

[英]Clustering of key-value pairs

我有这个问题。 我有非常大的一组键值对(以百万计),这些键值对具有特定的唯一ID作为键,而字符串则作为值(两个或更多键的字符串可能完全相似)。 我必须将这些键值对分组在一起,因为组1包含一些id字符串对,组2包含其他一些对等。分组需要根据字符串之间的相似性(它们实际上是该对值)进行。 我已经在这些字符串之间实现了Levenshtein距离,并将距离小于阈值距离的线对组合在一起。 而且我已经以传统的方式(非常糟糕)实现了它:将每个字符串相互比较。

我需要一些有关如何优化此技巧的提示。 我真的可以在Hadoop中使用Map-Reduce将键值对组合在一起吗? 我认为map和reduce函数的输入是单独且独立的,因此不能“组合”在一起。 这是k均值聚类问题吗? 您能否提出其他一些更快,更有效的技术? 谢谢。

拼写检查器使用Burkhard-Keller树(BK-Tree),在这里可以找到一个示例https://github.com/mkarlesky/csharp-bk-tree 这可以在现有列表上测试一个新单词的速度非常快,而且可以根据将字符串更改为下一个字符串所需的操作次数来提供“距离”度量。 与简单的“包含”测试为您提供布尔值不同,这为您提供了一种组织可用选项的方法。 您可以在此处了解更多信息: http : //blog.notdot.net/2007/4/Damn-Cool-Algorithms-Part-1-BK-Trees 我怀疑您可以利用距离来帮助聚类。

我想关于bk树的主要问题是您可以继续使用Levenshtein距离。 但是,也许您已经在使用它了? 这种技术不适用于像k-means那样选择任意数量的聚类。 但是我确实看到了一篇有趣的文章,介绍了在k均值的上下文中利用一些新的并行处理,这可能会帮助您在C#中加快处理速度:

http://www.codethinked.com/multi-threaded-k-means-clustering-in-net-40

该示例未使用字符串,但是我也许AsParallel概念将有助于提高您已有解决方案的性能?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM