机器学习中不同的距离定义汇总(二:字符串的距离)

本文主要参考了此博客和文末列出的参考内容

汉明距离(Hamming Distance)

  1. 1011101与1001001之间的汉明距离是2。
  2. 2143896与2233796之间的汉明距离是3。
  3. “toned”与”roses”之间的汉明距离是3。

python实现:

def HammingDistance(x, y):
    return sum(x_ch != y_ch for x_ch, y_ch in zip(x, y))

编辑距离(Edit Distance,Levenshtein Distance)

编辑距离是针对二个字符串(例如英文字)的差异程度的量化量测,量测方式是看至少需要多少次的处理才能将一个字符串变成另一个字符串。编辑距离可以用在自然语言处理中,例如拼写检查可以根据一个拼错的字和其他正确的字的编辑距离,判断哪一个(或哪几个)是比较可能的字。DNA也可以视为用A、C、G和T组成的字符串,因此编辑距离也用在生物信息学中,判断二个DNA的类似程度。Unix 下的 diff 及 patch 即是利用编辑距离来进行文本编辑对比的例子。

编辑距离有几种不同的定义,差异在可以对字符串进行的处理。

python实现:

def EditDistance(x, y):
    dp = np.zeros((len(x) + 1,len(y) + 1))
    for i in range(len(x) + 1):
        dp[i][0] = i    
    for j in range(len(y) + 1):
        dp[0][j] = j
     
    for i in range(1, len(x) + 1):
        for j in range(1, len(y) + 1):
            delta = 0 if x[i-1] == y[j-1] else 1
            dp[i][j] = min(dp[i - 1][j - 1] + delta, min(dp[i-1][j] + 1, dp[i][j - 1] + 1))
    return int(dp[len(x)][len(y)])

参考