16 distances by 바죠

16 distances


ML의 핵심은 데이터들 사이의 거리를 잘 정의해서 최대한 분해능 있게 자료를 재배치하는 것이다.

차별모델, 생성모델 모두 아주 이상적인 거리 측정자가 필요하다. 
다양한 샘플링을 위해서도 우리는 이상적인 거리 측정자가 필요하다.

볼츠만 머신에서는 쿨백-라이블러 거리를 이용한다.

이러한 작업을 수행하기 위해서 우리는 distance measure가 필요하다.
# calculate the kl divergence
def kl_divergence(p, q):
return sum(p[i] * log2(p[i]/q[i]) for i in range(len(p)))
# calculate the js divergence
def js_divergence(p, q):
m = 0.5 * (p + q)
return 0.5 * kl_divergence(p, m) + 0.5 * kl_divergence(q, m)


def levenshteindist(str1,str2):
    arr = [[None for _ in range(len(str1)+1)] for _ in range(len(str2)+1)]
    for i in range(len(str2)+1):
        arr[i][0] = i
    for j in range(1, len(str1)+1):
        arr[0][j] = j
        arr[1][j] = j-1
    for i in range(2, len(str2)+1):
        for j in range(1, len(str1)+1):
            if str1[j-1] == str2[i-1]:
                arr[i][j] = arr[i-1][j-1]
            else:
                arr[i][j] = min(arr[i-1][j], arr[i-1][j-1], arr[i][j-1]) + 1    
    return arr[-1][-1]

def levenshtein_distance(a, b):
    d = np.zeros((len(a), len(b)))
    for i in range(len(a)):
        d[i, 0] = i
    for j in range(len(b)):
        d[0, j] = j
    for j in range(len(b)):
        for i in range(len(a)):
            if a[i] == b[j]:
                cost = 0
            else:
                cost = 1
            d[i, j] = min(d[i-1, j]+1, d[i, j-1] + 1,d[i-1, j-1] + cost)
    return d[len(a)-1, len(b)-1]

  S = "water"
  T = "wine"
  Computed distance =    3
  Correct distance  =    3

  S = "kitten"
  T = "sitting"
  Computed distance =    3
  Correct distance  =    3

  S = "saturday"
  T = "sunday"
  Computed distance =    3
  Correct distance  =    3

  S = "pheromones"
  T = "photographer"
  Computed distance =    8
  Correct distance  =    8
import Levenshtein


덧글

댓글 입력 영역

최근 포토로그



MathJax