728x90
반응형

자카드 유사도를 검색했을 때 자카드 유사도라는 단어보다는

자카드 인덱스(Jaccard Index), 자카드 거리(Jaccard Distance)와 같은 개념으로 된 설명이 더 많이 나오는 것 같았다.

 

먼저 자카드 유사도에 대해서 이해하기 전에 유사도에 대해서 알아봤다.

 

유사도

유사도란 A 와 B 가 얼마나 유사한지에 대해서 수치로 표현한 값을 말한다.

유사도를 측정하는 방법에는 아래와 같이 다양한 방법이 있다.

  • 유클리디안 거리
  • 맨해튼 거리
  • 피어슨 상관계수
  • 코사인 유사도
  • 자카드 유사도

 

 

자카드 유사도

자카드 유사도에 대해서 간단하게 설명하자면 합집합을 교집합으로 나누면 된다.

따라서, 자카드 유사도의 공식은 다음과 같이 접을 수 있다.

 

자카드 유사도를 Python으로 구현해 보기

사실 자카드 유사도의 공식을 가지고 코드로 어떻게 적용해야 하는지가 더 중요한 것 같아서

Python을 사용해 간단한 예시를 만들어보았다.

 

예제로 한 사람의 이름을 가지고 다른 사람들의 이름과 얼마나 유사한지 자카드 유사도를 통해 수치로 나타내봤다.

X의 이름이 Y의 이름들과 얼마나 유사한지 자카드 유사도를 통해 확인해보려고 한다.

 

자카드 유사도를 계산해주는 함수를 만들었다.

def Jaccard(x, y):
    xs = set(x)
    ys = set(y)
    
    similarity = len(xs & ys) / len(xs | ys)
    return similarity

함수를 살펴보면 유사도를 계산할 문자열 2개를 가져와 집합 자료형인 set 으로 만들어준다.

set 으로 만들어주는 이유는 set 은 집합 자료형이기 때문에 자카드 유사도 계산을 쉽게 하기 위해서다.

이렇게 만든 함수를 X 의 이름과 Y 의 이름들을 하나씩 가져와 유사도를 구해준다.

def Jaccard(x, y):
    xs = set(x)
    ys = set(y)
    
    similarity = len(xs & ys) / len(xs | ys)
    return similarity

X = "김철수"
Y = ["김철수", "박영수", "김이수", "홍서연", "남서윤", "장홍복"]

for n in range(0, len(Y)):
    print(f"{X}와 {Y[n]}의 유사도는 {Jaccard(X, Y[n]) * 100}% 입니다.")

 

그렇게 실행한 결과는 다음과 같이 확인할 수 있다.

 

 

마지막으로 유사도를 구하는 방법에는 여러가지 방법이 있는 만큼
어떤 유사도를 사용하면 좋은지에 대해서 알기 위해서는 각 유사도를 구하는 방법에 대해서도 잘 이해하고 있어야 한다.
그래서 다른 유사도에 대해서도 공부해보고 정리해보고 직접 코딩을 해보면서 익숙해져봐야겠다.

 

 

- 참고사이트

https://needjarvis.tistory.com/705

 

자카드 유사도(Jaccard Similarity) 개념 이해 및 Python 구현

자카드 유사도(Jaccard Similarity)니, 자카드 계수(Jaccard Coefficient)니 자카드 지수(Jaccard Index)니 사실 다 같은 말이지만 여기서는 제목을 자카드 유사도로 지정하였고, 많은 사람들이 자카드 다음에

needjarvis.tistory.com

 

728x90
반응형

'알고리즘 > 개념정리' 카테고리의 다른 글

유클리드 호제법 (Euclidean algorithm)  (0) 2023.03.17
그리디(Greedy) 알고리즘, 탐욕법  (0) 2023.02.28
XOR 연산  (0) 2022.02.02
모듈러 연산 관련 블로그 메모  (0) 2019.08.27
알고리즘 사이트 정리  (0) 2019.07.24
복사했습니다!