Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 集群(尤其是字符串集群)是如何工作的?_String_Cluster Analysis_Data Mining - Fatal编程技术网

String 集群(尤其是字符串集群)是如何工作的?

String 集群(尤其是字符串集群)是如何工作的?,string,cluster-analysis,data-mining,String,Cluster Analysis,Data Mining,我听说过将相似数据分组的方法。我想知道它在字符串的特定情况下是如何工作的 我有一张10万多字的桌子 我想识别同一个单词,但有些不同(例如:house,house!!,hoouse,house,@house,“house”,等等…) 需要什么来识别相似性并将每个单词分组?对此,建议使用哪种算法?您可以使用类似的算法进行距离计算和聚类 Levenshtein距离是用于测量两个序列之间差异量的字符串度量 做一些测试,找出每个单词的相似性阈值,这将决定您的组。要理解什么是聚类,请想象一幅地理地图。您可以

我听说过将相似数据分组的方法。我想知道它在字符串的特定情况下是如何工作的

我有一张10万多字的桌子

我想识别同一个单词,但有些不同(例如:
house,house!!,hoouse,house,@house,“house”,等等…


需要什么来识别相似性并将每个单词分组?对此,建议使用哪种算法?

您可以使用类似的算法进行距离计算和聚类

Levenshtein距离是用于测量两个序列之间差异量的字符串度量


做一些测试,找出每个单词的相似性阈值,这将决定您的组。

要理解什么是聚类,请想象一幅地理地图。您可以看到许多不同的对象(例如房屋)。他们中的一些人彼此接近,而另一些人则相距遥远。基于此,可以将所有对象拆分为组(例如城市)。群集算法正是这样做的——它们允许您将数据拆分为组,而无需事先指定组边界

所有聚类算法都基于两个对象之间的距离(或可能性)。在地理地图上,它是两栋房子之间的正常距离,在多维空间中,它可能是欧几里得距离(实际上,地图上两栋房子之间的距离也是欧几里得距离)。对于字符串比较,必须使用不同的内容。这里有两个不错的选择,分别是和。在您的特定情况下Levenshtein distance如果更可取(汉明距离仅适用于相同大小的字符串)

现在您可以使用一种现有的聚类算法。有很多,但不是所有的都能满足你的需要。例如,这里已经提到的纯k-means对您几乎没有帮助,因为它需要找到组的初始数量,而对于大型字符串字典,它可能是100、200、500、10000—您只是不知道数字。因此,其他算法可能更合适

其中之一是算法。它的优点是可以自动找到聚类数目。然而,在实践中,它给出的结果往往不如其他算法精确,因此在EM上使用k-means是正常的,也就是说,首先使用EM找到簇数及其中心,然后使用k-means调整结果

算法的另一个可能分支,可能适合您的任务,是。在这种情况下,聚类分析的结果不是一组独立的组,而是树(层次结构),在树(层次结构)中,几个较小的簇被分组为一个较大的簇,所有簇最终都是一个大簇的一部分。在你的例子中,这意味着所有的单词在某种程度上彼此相似

有一个名为的包,允许使用多个。从该页复制粘贴:

  • 汉明距离:两个字符串中具有相同符号的位置数。仅为长度相等的字符串定义
  • Levenshtein距离:将字符串a转换为字符串b所需的最小插入、删除和替换次数
  • (完整)Damerau-Levenshtein距离:与Levenshtein距离类似,但允许相邻符号的换位
  • 最佳字符串对齐/限制Damerau-Levenshtein距离:与(完整)Damerau-Levenshtein距离类似,但每个子字符串只能编辑一次
  • 最长公共子字符串距离:两个字符串中必须删除的最小符号数,直到生成的子字符串相同为止
  • q-gram距离:两个字符串的N-gram向量之间的绝对差值之和
  • 余弦距离:1减去两个N-gram向量的余弦相似性
  • Jaccard距离:1分钟是共享N克和所有观察到的N克的商
  • Jaro距离:Jaro距离是由4个值组成的公式,实际上是p=0的Jaro-Winkler距离的特例
  • Jaro-Winkler距离:该距离是由从[0,0.25]中选择的两个比较字符串(a、B、m、t、l)和p确定的5个参数组成的公式

这会给你一段距离。您可能不需要执行聚类分析,也许按字符串距离本身排序就足够了。我已经创建了一个脚本来提供基本功能。。。您可以根据需要对其进行改进。

对于字符串聚类,什么算法更值得推荐?什么是更值得推荐的?有一些聚类算法,对吗?以问题中的house为例,哪种算法更适合得到这种类型的结果?我想把所有的单词放在同一个聚类中。你可以用它来聚类,用Levenshtein距离来计算距离。你会怎么计算平均值?非常好的解释。非常感谢你。但我现在有一个疑问。必须为每个单词的另一个字符串计算一个字符串到另一个字符串的距离?如果我有100个单词,我会将每个单词与99个单词进行比较?或者根据算法进行这种更改(例如,仅与集群中心进行比较)?是的,这取决于算法,但通常大多数算法会多次比较元素。聚类算法本身在计算上非常困难(例如,k-means是一项NP难任务),但其中许多算法都有启发式改进,使其更易于执行。有关您感兴趣的特定算法,请参阅文档。EM上的k-means?从没听说过。例如,Bishop给出的建议(“模式识别和机器学习”,Springer 2006)正好相反:EM更好,但启动速度较慢,因此通过几轮k-means优化来引导它。此外,建议EM或k-means结合字符串编辑距离也没有意义。k-均值不仅需要距离度量,还需要一组sam的定义良好的均值