2点間の距離の式
3363 ワード
本論文では,2点間の距離を求める様々な方法を紹介した.
しかし、なぜ距離を要求するのでしょうか.距離は類似度の概念だからだ.距離が近いほど、それらの特性(feature)が似ていることを意味します.従って機械学習アルゴリズムにおいても広く用いられている.例えばK-Nearest Neighborアルゴリズムでは...
とにかく、距離を求める方法を知っておく必要があります.数学的に深く研究する必要がなくても,概念を理解し,アルゴリズムを理解し,使用しなければならない.
入る前に、まずコードで点を表現する方法を知っておく必要があります.たいしたことはない.
たとえば、よく言われるx、y軸だけの2次元で点を表したい場合は、[5,8]と一緒に使用できます.もちろん2次元だけとは限らない.5次元点は[4,8,15,16,23]と同様に表すことができる.
では、2点間の距離を検索するために関数を作成します.例えばこのような方法で
distance([1,2,3], [5,8,9])
あ、そしてここで2点が持つ次元の個数は等しいはずです.これから、2点間の距離を求める3つの方法を紹介します.
1.ユークリッド距離
「ユークリディアン通り」は英語の単語で、とにかく最も広く使われている距離計算方法です.
例えば、2次元上の点aとbの距離を求めると、このように表すことができる.
ピタゴラスの定理を思い出す.
また、上記の例は2次元であるが、n次元から2点までの距離を求めると、このように表すことができる.各次元の差に値の平方根を乗算します.
Python関数で以下のように実現する.
def euclidean_distance(pt1, pt2):
distance = 0
for i in range(len(pt1)):
distance += (pt1[i] - pt2[i]) ** 2
return distance ** 0.5
2.マンハッタン距離
マンハッタン距離もユークリッド距離に似ており,各次元の差を乗じて使用するのではなく,絶対値を直接計算する.
下図のような概念で理解するのは簡単です.実際、マンハッタン通りという名前も、都市の路地(街)を歩くときの姿に似ていることから名付けられた.(aからbまでいくつかのブロックを移動することを想像してみてください)
図に示すように、マンハッタンの距離は常にユークリッドの距離より大きいか、等しい.
n次元上の2点間の距離を求めると、このように表すことができます.
Python関数で以下のように実現する.
def manhattan_distance(pt1, pt2):
distance = 0
for i in range(len(pt1)):
distance += abs(pt1[i] - pt2[i])
return distance
3.海明距離
ヘミングストリートは前述のユークリッドストリート、マンハッタンストリートとは少し異なる概念です.
ヘミングストリートでは、次元ごとに違いを探しているのではなく、「全く同じ」かどうかを考えているだけです.そのため,主にスペルチェックなどのアルゴリズムに用いられる.
例えば、単語thereと誤字theteとの間のhamming距離は1に等しい.各文字は次元であるため、この例では4番目の文字「r」および「t」を除いて、各次元は同じ値を有する.つまり、最終的には異なる文字数しか計算されません.
距離を解く方法をPython関数として以下に示す.
def hamming_distance(pt1, pt2):
distance = 0
for i in range(len(pt1)):
if pt1[i] != pt2[i]:
distance += 1
return distance
SciPyで距離を求める
PythonのライブラリScriptyを使うと、紹介する距離を簡単に見つけることができます.
ユークリッド通り:
.euclidean()
マンハッタン通り:
.cityblock()
海明街:
.hamming()
そして上記の海明通りをScriptyで0と1の間の値を返します.いくつかの階層に差があるため、統計を取ってから、総階層の個数で除算します.したがって,上で自分で記述した関数で[1,2,3]と[7,2,10]の間のHamming距離を求めると2となるが,scipyでは2/3となる.
要するにscipyではこのように直接距離を求めることができる.
from scipy.spatial import distance
print(distance.euclidean([1, 2], [4, 0]))
print(distance.cityblock([1, 2], [4, 0]))
print(distance.hamming([5, 4, 9], [1, 7, 9]))
このような距離を求める方法を理解すれば,KNNアルゴリズムを理解することができる.ソース
https://hleecaster.com/ml-distance-formula/
Reference
この問題について(2点間の距離の式), 我々は、より多くの情報をここで見つけました https://velog.io/@hyesoup/두-점-사이의-거리-공식テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol