본문 바로가기
딥러닝/딥러닝

데이터 유사성 분석?

by DUSTIN KANG 2024. 5. 26.

이번 과제에서 데이터간 유사성을 찾고 어떤 유사성 방법을 적용했는지 알아보는 과제를 맡았습니다.

그래서 저는 유사도에 대해 공부를 하면서 적용하려고 이 포스트를 만들게 되었습니다.

🌱 Similarity

유사도(Smiliarity)는 두 객체가 얼마나 비슷한지를 나타내는 척도를 말합니다. 그렇다면 유사도를 측정하기 위해 어떤 것들이 우선이 되어야 할까요? 유사도를 측정하는 객체의 특징이 어떤 것이냐에 따라 다르기 때문에 객체의 특징과 다양한 유사도의 방법을 생각해야합니다.

 

A라는 차와 B라는 차의 유사도를 측정할 때 속도를 기준으로 보는지 아니면 디자인을 기준으로 보는지 다르기 때문입니다.

🍀 How to measure Similarity

그럼 어떻게 유사도를 측정할까요?

유사도를 측정하는 기준으로 다양합니다. 해당사이트↗를 참고하시면 어떤 측정 방법이 있는 지 확인하실 수 있습니다.

이 포스팅에서는 대표적인 유사도 방법을 다루려고 합니다.

Distance Measures. Image by Maarten Grootendorst

MSD Similarity

평균제곱차이(Mean Squared Difference Similarity)는 동일한 항목의 두 평가지의 차이를 제곱하고 평균을 내는 방식입니다.  주로 사용자 기반 협업 필터링이나 아이템 기반 협업 필터링에서 사용되는 유사도입니다. 한 사용자가 두 아이템 간 관계를 나타낼 때 사용하죠.

 

Manhattan, Euclidean

맨허튼 거리 방식과 유클리디안 거리 방식은 차이가 있습니다. 물론, 공통적으로 두 점 사이의 거리를 구하는 방식입니다. 민코프스키 (Minkowski)  거리 구하는 방법은 두가지 방법을 일반화한 방식입니다.

  • 맨허튼(Manhattan) 거리 방식 :  음수를 양수로 변환시키기 위해 절댓값의 차이를 이용해 좌표상 거리를 계산하는 방법
  • 유클리디안(Euclidean) 거리 방식 : 다차원 공간에서 점과 점 사이의 거리를 계산하는 방법 (피타고라스 정리에서 빗면)
#맨허튼
np.sum(np.absolute(A-B)) // 2

# 유클리드
np.sqrt(np.sum(A-B)**2)

Cosine Similarity

코사인 유사도는 두 벡터간 각도를 기반으로 구할 수 있습니다. 거리 기반과는 확연한 차이가 있는데요. 만약 다음 그림처럼 길이는 다르지만 각도가 비슷한 객체의 경우 코사인 유사도는 1을 반환하게 됩니다. 반면 각도가 완전히 틀어져버린 경우엔 0이 나오게 되는 것이죠.

  • 다양한 차원에서의 유사도를 잘 나타낼 수 있습니다. 그러나 차원이 적으면 잘못된 유사도가 나올 수 있는 확률이 높습니다. 그래서 주로 2차원보다는 높거나 벡터의 크기가 중요하지 않는 데이터에 사용합니다.
  • 주로 텍스트 분석이나 추천 시스템에 사용합니다.
# 1
sim = np.dot(x,y) / (np.linalg.norm(x) * (np.linalg.norm(y))

# 2
from sklearn.metrics.pairwise import cosine_similarity
sim = cosine_similarity(generate_X,generate_Y)
sim

Jaccard Similarity

자카드 유사도는 집합을 활용해 유사도를 구하는 방식입니다. 두 집합이 동일하다면 1이고 공통 부분이 존재하지 않으면 0을 가지게 되는 방식입니다. 

union = set(set1).union(set(set2)) # 두 집합의 합집합
intersection = set(set1).intersection(set(set2)) # 두 집합의 교집합
len(intersection)/len(union) # 0.166...

Pearson Similarity

두 벡터의 상관계수를 통해 유사도로 나타냅니다. 상관계수는 두 변수 간 선형 관계 정도를 나타냅니다. 즉, 두 변수의 관계가 가상의 선과 얼마나 밀접하게 닿아있는지를 알려주는 수치입니다.

 

 


☕️ 포스팅이 도움이 되었던 자료

오늘도 저의 포스트를 읽어주셔서 감사합니다.

설명이 부족하거나 이해하기 어렵거나 잘못된 부분이 있으면 부담없이 댓글로 남겨주시면 감사하겠습니다.