AI Tech

What is Pytorch (유사도)?

cpnubplzhelp 2024. 8. 7. 10:48

유사도

두개의 Tensor가 얼마나 유사한지에 대해서 측정한 값.

텐서(Tensor) 간의 유사도를 측정하는 것은 데이터 분석 및 기계 학습에서 중요할 수 있다.

 

맨해튼 유사도

두개의 Tensor 사이의 맨해튼 거리를 역수로 변환하여 계산한 값

유사도를 거리의 역수로 정의하는 경우, 거리가 클수록 유사도가 낮아지고, 거리가 작을수록 유사도가 높아지도록 한다.

(유사도가 1일경우 같은 Tensor이다)

a = torch.tensor([1.0,0.0,2.0])
b = torch.tensor([0.0,1.0,2.0])

M_distance = torch.norm(a-b,p=1)

M_similarity = 1/(1+M_distance)

print(M_distance)
print(M_similarity)

유클리드 유사도

두개의 Tensor 사이의 유클리드 거리를 역수로 변환하여 계산한 값

맨해튼 유사도와 같이 거리가 가까울수록 유사도가 높아지도록 한다.

(유사도가 1일경우 같은 Tensor이다)

a = torch.tensor([1.0,0.0,2.0])
b = torch.tensor([0.0,1.0,2.0])

E_distance = torch.norm(a-b,p=2)

E_similarity = 1/(1+E_distance)

print(E_distance)
print(E_similarity)

 

코사인 유사도

두개의 Tensor의 방향이 얼마나 유사한지를 측정한다.

코사인 유사도는 -1에서 1까지의 값을 가진다. 벡터가 완전히 동일하면 1, 서로 수직이면 0, 정반대 방향일 경우 -1이다.

a = torch.tensor([1.0,0.0,2.0])
b = torch.tensor([0.0,1.0,2.0])

dot_product = torch.dot(a, b)

norm_a = torch.norm(a)
norm_b = torch.norm(b)

cosine_similarity = dot_product / (norm_a * norm_b)

print(dot_product)
print(norm_a)
print(norm_b)
print(cosine_similarity)