メトリック機械学習 - 文字列の距離

      機械学習は、教師や教師なしのいずれかの学習は、類似度差分サンプルデータまたは異なるサンプルデータの異なる程度を取得するには、「メトリクス」の様々なを使用することを学んでいる、非常に重要な方向に人気のAI技術です。有意分類または予測アルゴリズムの精度を向上させることができ、機械学習「測定」の様々な本明細書に説明される良好な「指標」、「メトリック」は、主に二つで構成され、距離であり、類似度との相関係数から一般研究空間における線形ボディポイント、類似研究体線形ベクトル空間、相関係数の分散データ主に研究対象。本論文では、文字列の距離を表します。

1人のハミング距離 - のような位置の差の長い文字列に対応

      情報理論では、等しい長さの二つの文字列間のハミング距離(ハミング距離)が二つの位置に対応した異なる文字列の数です。言い換えれば、それは別の文字列に文字列の数を交換する必要があります。

      ハミング距離と同じ長さの文字列がヌル文字列に対する重量であるハミング、すなわち、文字列内の要素の数の非ゼロバイナリストリングのため、それは数1、そう11101であります図4は、ハミング重みれます。例えば:

      10 。1。7 。1 01~10 0。7 0 01 2との間のハミング距離
      。9 14 3 。8 9 96 23である 3 。7ハミング距離が96 3の間です。
      KA ROL KAにおけるThrのハミング距離は、間に3です。

      1は、ハミング距離の幾何学的な意味を示し、頂点に示すように、任意の2つの間の最小距離は、2つのバイナリ文字列の間のハミング距離です。


図1幾何学的な意味ハミング距離

      汉明距离是以理查德·卫斯里·汉明的名字命名的,汉明在误差检测与校正码的基础性论文中首次引入这个概念。在通信中累计定长二进制字中发生翻转的错误数据位,所以它也被称为信号距离。汉明重量分析在包括信息论、编码理论、密码学等领域都有应用。但是,如果要比较两个不同长度的字符串,不仅要进行替换,而且要进行插入与删除的运算,在这种场合下,通常使用更加复杂的编辑距离等算法。下面介绍另一个常用的字符串距离——编辑距离。

2 编辑距离——一个串变为另一个串的距离

      编辑距离是针对二个字符串(例如英文字)的差异程度的量化量测,量测方式是看至少需要多少次的处理才能将一个字符串变成另一个字符串,处理只包括插入一个字符、删除一个字符、新增一个字符。编辑距离可以用在自然语言处理中,例如拼写检查可以根据一个拼错的字和其他正确的字的编辑距离,判断哪一个(或哪几个)是比较可能的字。以下为编辑距离的例子
"kitten" and "sitting"的编辑距离是3,这是因为:

      第一次处理:kitten → sitten (替换一个字符,"s" 替换了 "k")

      第二次处理:sitten → sittin (替换一个字符, "i" 替换了 "e")

      第三次处理:sittin → sitting (插入一个字符, 字符串末尾插入了 "g").

      那么编辑距离如何计算了?假定函数dist(A, B)表示字串A转变到字串B的编辑距
离,那么对于下面3种极端情况,我们很容易给出解答(NULL表示空串)。

      dist(NULL, NULL) = 0
      dist(NULL, s) = s的长度
      dist(s, NULL) = s的长度

      对于一般的情况,dist(A, B)我们应该如何求解呢?假定我们现在正在求解dist(A+c1, B+c2),在这里A和B是字符串,c1和c2都是字符。dist(A+c1, B+c2)也就是把"A+c1"转变成"B+c2"。在这个转变过称中,我们要分情况讨论:

(1) A可以直接转变成B。这时我们只要把c1转成c2就可以了(如果c1 != c2)。

(2) A+c1可以直接转变成B。这时我们处理的方式是插入c2。

(3) A可以直接转成B+c2。这时的情况是我们需要删除c1。

      综合上面三种情况,dist(A+c1, B+c2)应该是三者的最小值。因此我们可以定义这样一个函数——edit(i, j),它表示第一个字符串的长度为i的子串到第二个字符串的长度为j的子串的编辑距离。显然可以有如下动态规划公式:

      if i = 0 且 j = 0,edit(i, j) = 0
      if i = 0 且 j > 0,edit(i, j) = j
      if i > 0 且j =0,edit(i, j) = i
      if i ≥ 1 且 j ≥ 1, 若A第i个字符等于B第j个字符edit(i, j)=min{edit(i-1, j) + 1, edit(i, j-1) + 1, edit(i-1, j-1)};否则edit(i, j)=min{edit(i-1, j) + 1, edit(i, j-1) + 1, edit(i-1, j-1) + 1}。

      结合"kitten" and "sitting"可得图2编辑距离矩阵,矩阵右下角数值就是两个字符串编辑距离。


图2 kitten和sitting编辑距离矩阵

おすすめ

転載: www.cnblogs.com/Kalafinaian/p/10992023.html
おすすめ