Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.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

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
Python 字符串聚类算法-制导_Python_String_Fuzzy Search - Fatal编程技术网

Python 字符串聚类算法-制导

Python 字符串聚类算法-制导,python,string,fuzzy-search,Python,String,Fuzzy Search,我试图根据jaro距离给出的相似性对一组字符串进行聚类。我是用python中的水母来计算的。我一直在努力找出如何对数据进行集群。我不是集群方面的专家,这是我第一次尝试找出如何做到这一点 目前,我已经写了一些我认为近似于我理解的单通道分区方法的东西,如下所示: 使第一个字符串成为第一个群集的cnetroid 对于下一个字符串,使用Jaro距离计算与该质心的相似性 如果它们足够相似,则将该字符串添加到簇中,否则使用该字符串以其作为质心启动新簇 重复此操作,直到没有字符串可供计算 我想要任何关于我的代

我试图根据jaro距离给出的相似性对一组字符串进行聚类。我是用python中的水母来计算的。我一直在努力找出如何对数据进行集群。我不是集群方面的专家,这是我第一次尝试找出如何做到这一点

目前,我已经写了一些我认为近似于我理解的单通道分区方法的东西,如下所示:

  • 使第一个字符串成为第一个群集的cnetroid
  • 对于下一个字符串,使用Jaro距离计算与该质心的相似性
  • 如果它们足够相似,则将该字符串添加到簇中,否则使用该字符串以其作为质心启动新簇
  • 重复此操作,直到没有字符串可供计算
  • 我想要任何关于我的代码的提示,但更重要的是,如果有人知道更好的方法来做这件事。我读过关于k-means的书,但我不知道如何指定k(更不用说如何实际实现了)。如果你真的决定提供建议,用外行的语言表达出来,告诉你在哪里可以找到指导,这将是非常有益的。谢谢

    关于代码的一些注释。 1.我洗牌列表,因为起点是任意的 2.如果一个匹配的分数比前一个匹配的分数高,我会更新质心-这对于集群的第一个字符串是任意的,但这是试图获得“最真实”的字符串作为集群质心

    提前感谢您的指导

    def SLINK(SList):
        shuffle(SList)
        Clusters = []
        Centroid = []
        Scores = []
        for string in SList:
        Matched = 0
    
        if len(Clusters) == 0:
            Clusters.append([string])
            Centroid.append([string])
            Scores.append([])
            continue
    
        for ClustNum in xrange(len(Clusters)):
            Dist = jf.jaro_distance(string, Centroid[ClustNum][0])
    
            if Dist > 0.8:
                Clusters[ClustNum].append(string)
    
                if len(Scores[ClustNum]) == 0:
                    Scores[ClustNum].append(Dist)
                else:
                    if Dist > Scores[ClustNum]:
                        Scores[ClustNum][0] = Dist
                        Centroid[ClustNum][0] = string
    
                Matched = 1
                break
    
        if Matched ==0:       
            Clusters.append([string])
            Centroid.append([string])
            Scores.append([])
    
    return Clusters
    

    如果您的问题只是关于集群的,我建议您寻找一个比现有版本更直观、更易于实现的版本。具体来说,FLAME聚类算法对如何在上实现该算法进行了精彩的解释

    您的现有代码有问题吗?如果是这样的话,你能详细说明一下吗?事实上,它似乎很管用!我只是发布它来促进讨论,我想,以显示我是如何处理这个问题的。我想我是在寻找方法建议。你可能会感兴趣的是,哪种方法通常更适合于有效的代码,你会对一般的反馈感兴趣。啊,很酷,我从来没有听说过。谢天谢地,我以为我是在追求最简单的技术。谢谢你的提示,我会调查的。