2013-12-08 2 views
3

jaro 거리에 의해 주어진 유사성을 기반으로 문자열 그룹을 클러스터하려고합니다. 파이썬에서 JellyFish로 계산하고 있습니다. 나는 데이터를 클러스터하는 방법을 알아 내려고 애 쓰고있다. 나는 클러스터링에 대한 전문가가 아니며, 이것이 어떻게하는지를 파악하려는 나의 첫 번째 시도이다.문자열 클러스터링 알고리즘 - 지침

  1. 다음의 경우 첫 번째 클러스터
  2. 의 cnetroid 첫 번째 문자열을 확인 :

    현재 나는이 같은 나의 이해하기 위해 노력 분할의 싱글 패스 방식의 방법을 근사 믿는 뭔가를 작성했습니다 문자열은 Jaro Distance를 사용하여 그 중심과 유사성을 계산합니다.
  3. 가 다음 클러스터에 문자열을 추가 충분히 유사한 경우에는 문자열이 내가 어떤 힌트를 싶습니다

을 평가하기 위해 남아 있지 않을 때까지 다른

  • 반복 중심으로하여 새 클러스터를 시작하는 문자열을 사용 내 코드에 대해,하지만 더 중요한 것은 누군가가 이것을하는 더 좋은 방법을 알고 있다면. 나는 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 
    
  • +0

    기존 코드에 문제가 있습니까? 그렇다면 자세히 설명해 주시겠습니까? –

    +0

    사실 그것은 잘 작동하는 것 같습니다! 나는 단지 내가 문제에 접근하고 있음을 보여주기 위해 신속한 토론에 게시했습니다. 나는 무엇이든 방법 충고를 찾고 있었다고 생각한다. –

    +0

    [코드 검토 스택 교환] (http://codereview.stackexchange.com/)에 관심이있을 수 있습니다.이 코드는 일반적으로 작동하는 코드에 적합하며 일반적인 피드백에 관심이 있습니다. –

    답변

    2

    귀하의 질문에 나는 당신이 거기에있어 무엇보다 더 직관적이고 쉽게 구현 버전을 찾고 제안 클러스터링에 대해 단지 일반적으로합니다. 특히 FLAME 클러스터링 알고리즘은 wikipedia에 알고리즘을 구현하는 방법에 대한 환상적인 설명이 있습니다.

    +0

    하하하, 나는 내가 사용할 수있는 가장 간단한 기술로 갔다고 생각했습니다. 팁 주셔서 감사합니다, 나는 그것에 대해 조사 할 것입니다. –

    관련 문제