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