[DL] Cosine Similarity (코사인 유사도) , 마할라노비스 거리(Mahalanobis distance)
여기저기서 자주 등장하는 코사인유사도와 마할라노비스거리 한번 정리하려고 한다
이런 거리들은 주로 어떤 두개의 집합이 유사한가?에 대해서 이야기할 때 많이 쓰인다
이미지 매칭이나,,,등등 각각 의미와 어떤 곳에 많이 사용되는지 물리적인 의미 같은것은 공부할 때마다 틈틈히 정리할 예정이다. 그 전에 각각이 어떤 내용인지 먼저 정리하고보자
우선 MOT를 잘 이해하고 구현해보려고 기초부터 보는 중
코사인 유사도(Cosine similarity)
- 벡터간의 사잇각을 구하여 유사한 정도를 나타낸 것
: (의견)공간에 값들의 집합이 향하는 방향의 유사성을 판단한다고 이해함, 예를 들어 MOT 문제에서 인식한 객체가 이전 프레임의 물체와 같은가?를 유추할 때 Detection이 가지는 벡터에 들에 대한 관계를 코사인 유사도를 통해 확인(?) 라고 이해함
- 내적의 결과를 총 벡터 크기로 정규화(L2 Noramlization) 함
import numpy as np
# numpy를 통한 cosine similrity 구하기
def cos_similarity(vector1, vector2):
dot_product = np.dot(vector1, vector2)
l2_norm = (np.sqrt(sum(np.square(vector1))) * (np.sqrt(sum(np.square(vector2)))
similarity = dot_product / l2_norm
return similarity
마할노비스 거리
평균과의 거리가 표준 편차의 몇 배 인지를 나타내는 값(https://darkpgmr.tistory.com/41)
- (의견) 평균, 표준편차들을 이용하는 만큼 데이터들의 경향성을 반영한 거리지 않을까
- scipy.spatial.distance의 cdist() / numpy.einsum() 사용하여 계산 가능 - https://www.delftstack.com/ko/howto/python/python-mahalanobis-distance/
추가적으로 L1, L2 Norm
# L1 norm (Manhattan distance)
def get_l1_distance(x1, x2):
return ((x1 - x2).abs()).sum()
# L2 norm (Euclidean distance)
def get_l2_distance(x1, x2):
return ((x1 - x2)**2).sum()**.5
https://kh-kim.gitbook.io/natural-language-processing-with-pytorch/00-cover-4/07-similarity