Tensor들간의 거리를 계산하는 방법에 대해 알아보자
1.맨해튼 유사도
맨해튼 유사도(L1 노름)는 두 데이터간의 절대값 거리에 따른 유사도를 의미한다.
distance(x,y)=i=1∑p∣xi−yi∣
sim(x,y)=distance(x,y)1
이산형 데이터 및 이진형 데이터를 처리할때 사용이 많이된다.
그럼 Pytorch로 구현해보자
import torch
dist = torch.norm(A - B, p = 2)
similarity = 1 / (1 + dist)
위와 같이 단순하게 구현 가능하다.
2.유클리드 유사도
유클리드 유사도(L2 노름)는 두 데이터간의 직선거리에 따른 유사도를 의미한다.
유클리드 거리를 사용하기 위해서는 데이터를 정규화 해야하며, 데이터 차원이 증가할수록 사용하기 쉽지 않다.
우리가 많이 보던 피타고라스 정의와 유사하다.
distance(x,y)=i=1∑p(xi−yi)2
sim(x,y)=distance(x,y)1
그럼 Pytorch로 구현해보자
import torch
dist = torch.norm(A - B, p = 1)
similarity = 1 / (1 + dist)
맨해튼 유사도와 코드가 거의 유사하다. 오직norm(p=1)로 변경해주면 된다.
3.코사인 유사도
코사인 유사도는 두개 벡터값에서 코사인 각도를 구한 방법으로 코사인 유사도가 1에 근접할 수록 두값은 유사한 것으로 본다.
sim(x,y)=∣∣A∣∣2∣∣B∣∣2A∗B=∑i=1pAi2∑i=1pBi2∑i=1pAiBi
그럼 Pytorch로 구현해보자
import torch
dot_AB = torch.dot(A, B)
norm_A = torch.norm(A, p = 2)
norm_B = torch.norm(B, p = 2)
cosine_similarity = dot_AB / (norm_A * norm_B)