본문 바로가기

NEWCONCEPTS

벡터 유사도 구하기

본 내용은 '김기현의 자연어 처리 딥러닝 캠프 -파이토치편'에서 발췌한 내용이다.

 

 

L1 거리

L1 norm을 사용한 거리. 맨해튼 거리라고도 함.

두 벡터의 각 차원별 값의 차이의 절대값을 모두 합한 값

def L1_distance ( x1, x2 ) :
	return ((x1-x2).abs()).sum()

 

L2 거리

L2 norm을 이용한 거리. 유클리디안 거리. 차원별 값 차이의 제곱의 합에 루트를 취한 값

def L2_distance ( x1, x2 ) :
	return ((x1-x2)**2).sum()**.5

 

Infinity Norm

차원별 값 차이 중 가장 큰 값.

def inf_distance ( x1, x2 ) :
	return ((x1-x2).abs()).max()

 

코싸인 유사도 (Cosine Similarity)

두 벡터 사이의 방향과 크기를 모두 고려하여 계산. 두 벡터의 내적 / 각 벡터 내 값의 제곱의 합의 제곱근의 곱.

유사도의 결과가 1에 가까울수록 방향은 일치하고, 0에 가까울수록 직교, -1에 가까울수록 반대방향

수식 내 윗변의 벡터 내적 연산이나 밑변 각 벡터의 크기를 구하는 연산이 비싼 편에 속함.

def cosine_similarity ( x1, x2 ) :
	return (x1*x2).sum() / ((x1**2).sum()**.5 * (x2**2).sum()**.5)
   

 

자카드 유사도 (Jaccard Similarity)

두 집합 간의 유사도를 구하는 방법. 수식의 윗변에는 두 집합의 교집합 크기가 있고, 이를 밑변에서 두 집합의 합집합 크기로 나눔. 

def jaccard_similarity ( x1, x2 ) :
	return torch.stack([x1,x2]).min(dim=0)[0].sum() / torch.stack([x1,x2])

 

거리 재는 방법은 이 밖에도 꽤 많다.

차원의 수와 수치가 나타내는 의미 등 데이터의 본질을 고려하여 목적에 따라 알맞게 사용한다면 좋은 결과를 얻을 수 있을 것이다.

 

'NEWCONCEPTS' 카테고리의 다른 글

DecisionTree  (0) 2020.06.23
classification with localization (one object per image)  (0) 2020.06.18
알고리즘  (0) 2020.02.26
A = CR (columns) X(Rows)  (0) 2020.02.26
Maximum Likelihood Estimation (최대 우도 추정법)  (0) 2020.02.18