除了Levenshtein之外,对于有序字集和随后的聚类,更好的距离度量

时间:2010-12-01 23:12:29

标签: algorithm nlp cluster-analysis data-mining levenshtein-distance

我正在尝试解决一个涉及比较大量单词集的问题,每个单词集都包含一组单词中大的有序数量的单词(总计大约600+,非常高维度!),用于相似性将它们聚类成不同的分组。解决方案需要尽可能无人监督。

数据看起来像

[Apple,Banana,Orange ...]
[Apple,Banana,Grape ...]
[Jelly,Anise,Orange ...]
[草莓,香蕉,橘子......]
...等

每组中单词的顺序很重要([Apple,Banana,Orange]与[Apple,Orange,Banana]截然不同

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

我的问题是:

  • Levenshtein是用于此问题的最合适的距离指标吗?
  • 是什么意思/ medoid原型聚类是分组的最佳方式?
  • 我还没有考虑过验证聚类中'k'的选择。评估聚类的SSE曲线是最好的解决方法吗?
  • 我的方法有什么缺陷吗?
  • 作为未来解决方案的扩展,在给定培训数据的情况下,是否有人会想到为群集分配分配概率?例如,集合1有80%的机会进入集群1等。

我希望我的问题看起来不是太愚蠢或答案非常明显,我对数据挖掘相对较新。

谢谢!

2 个答案:

答案 0 :(得分:3)

是的,Levenshtein是一个非常合适的方法。但是如果序列的大小变化很大,那么通过除以序列长度的总和,你可能会更好地归一化这些距离 - 否则你会发现对于长序列对,观察到的距离往往会增加其“平均距离”(在相应的k长度子串之间的平均距离意义上,对于一些小k)是恒定的。

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

另外请记住,Levenshtein没有为“阻挡动作”做出特殊限制:如果你拿一根弦,并将其中一个子弦移动到足够远的地方,那么就会产生一对(原始的)和修改后的字符串)将具有相同的Levenshtein分数,就好像第二个字符串在子字符串移动到的位置具有完全不同的元素一样。如果您想考虑这一点,请考虑改用compression-based distance。 (虽然我说它对于计算距离而不考虑顺序很有用,但它当然有利于有序相似性与无序相似性。)

答案 1 :(得分:0)

在sourceforge上查看SimMetrics,了解支持各种指标的平台,这些指标可用作评估最佳任务的方法。

商业有效版本从K-Now.co.uk查看K-Similarity。