Algorithm 除了Levenshtein之外,用于有序词集和后续聚类的距离度量更好

Algorithm 除了Levenshtein之外,用于有序词集和后续聚类的距离度量更好,algorithm,nlp,cluster-analysis,data-mining,levenshtein-distance,Algorithm,Nlp,Cluster Analysis,Data Mining,Levenshtein Distance,我试图解决一个问题,即比较大量的词集,每个词集都包含一组词中大量有序的词(总共约600多个词,维度非常高!),以获得相似性,然后将它们分为不同的组。解决方案需要尽可能不受监督 数据看起来像 [苹果、香蕉、橘子……] [苹果、香蕉、葡萄…] [果冻、茴香、橘子…] [草莓、香蕉、橘子……] …等等 每组单词的顺序很重要([苹果,香蕉,橙色]不同于[苹果,橙色,香蕉] 到目前为止,我一直使用的方法是使用Levenshtein距离(受距离阈值限制)作为Python脚本中计算的度量,每个单词都是唯一标识

我试图解决一个问题,即比较大量的词集,每个词集都包含一组词中大量有序的词(总共约600多个词,维度非常高!),以获得相似性,然后将它们分为不同的组。解决方案需要尽可能不受监督

数据看起来像

[苹果、香蕉、橘子……]
[苹果、香蕉、葡萄…]
[果冻、茴香、橘子…]
[草莓、香蕉、橘子……]
…等等

每组单词的顺序很重要([苹果,香蕉,橙色]不同于[苹果,橙色,香蕉]

到目前为止,我一直使用的方法是使用Levenshtein距离(受距离阈值限制)作为Python脚本中计算的度量,每个单词都是唯一标识符,从距离生成一个相似矩阵,并将该矩阵放入KNIME中的k-Mediods中进行分组

我的问题是:

  • 对于这个问题,Levenshtein是最合适的距离度量吗
  • mean/medoid原型集群是进行分组的最佳方式吗
  • 我还没有花太多的心思来验证聚类中对“k”的选择。评估聚类的SSE曲线是最好的方法吗
  • 我的方法有什么缺陷吗
  • 作为未来解决方案的一个扩展,给定培训数据,是否有人对如何为集群分配概率有任何想法?例如,集合1有80%的几率在集群1中,等等
我希望我的问题不要显得太傻,或者答案不要太明显,我对数据挖掘还比较陌生


谢谢!

请查看sourceforge上的SimMetrics,了解一个支持多种指标的平台,该平台可用于评估任务的最佳性能


对于商业上有效的版本,请查看K-Now.co.uk中的K-Similarity。

是的,Levenshtein是一种非常合适的方法。但是如果序列的大小变化很大,您最好将这些距离除以序列长度之和进行归一化,否则您会发现观测到的距离趋于to对于“平均距离”(对于一些小k,在对应的k长度子串之间的平均距离的意义上)为常数的长序列对的增加

示例:这对
([Apple,Banana],[Carrot,Banana])
可以说与
([Apple,Banana,Widget,木琴],[Carrot,Banana,Yam,木琴])具有相同的“平均”距离,因为每两个项目都匹配,但后一对的原始Levenshtein距离将是前者的两倍


还请记住,Levenshtein并没有特别考虑到“块移动”:如果您获取一个字符串,并将其子字符串之一移动到足够远的地方,则结果对(原始和修改的字符串)将有相同的LevsHeTin得分,就像第二个字符串在子串移动到的位置完全不同的元素一样。如果你想考虑这一点,考虑使用A。(虽然我在那里说过,它在计算距离时很有用,而不考虑顺序,但它当然支持有序相似性而不是无序相似性。)

也许更多的背景信息会有所帮助。你能告诉我更多的相似性吗?分组的目的是什么?如果我在原始帖子中给出的每一个例子都代表一篮子食品(食品在篮子中的摆放顺序很重要),我希望能够根据篮子内容的相似程度对篮子进行分组,并能够标记每个分组进行分析(当然,必须手动进行标记)。篮子[苹果、香蕉、橘子]与[苹果、香蕉、葡萄]更相似,而非[果冻、茴香、橘子],因为后者中的两个项目需要更改,而前者中的一个项目则需要更改。我建议除以长度的最大值,这将为您提供一个范围为[0..1]的良好相似性数字.j_random_hacker给了我迄今为止最好的答案,尽管我希望继续输入。@don:谢谢,如果你愿意,你也可以单击upvote按钮;)