헬창 개발자

자카드 유사도, 거리 [파이썬] 본문

데이터 분석

자카드 유사도, 거리 [파이썬]

찬배 2022. 4. 23. 21:31

1. 자카드 유사도란?

자카드 유사도(Jaccard Similarity)는 두 집합 간의 유사성을 측정하는 방법으로, 두 집합 간의 교집합과 합집합의 비율을 계산합니다. 자카드 유사도는 0에서 1 사이의 값을 가지며, 1에 가까울수록 두 집합이 유사하다는 것을 의미합니다.

수식

자카드 유사도는 다음과 같이 정의됩니다

 

2. 자카드 거리란?

자카드 거리(Jaccard Distance)는 자카드 유사도의 보완적인 개념으로, 두 집합 간의 차이를 거리로 표현합니다. 자카드 거리는 0에서 1 사이의 값을 가지며, 1에 가까울수록 두 집합 간의 차이가 크다는 것을 의미합니다.

수식

자카드 거리는 다음과 같이 정의됩니다

 

3. 소스코드

dic={'ullman' : [('jeff', 'ullman', 'jennifer', 'widom', 'xml', 'security', 'vldb04'),
                 ('jeff', 'ullman', 'hector', 'garcia-molina', 'hashing', 'vldb04'),
                 ('jeff', 'ullman', 'xml', 'query', 'vldb04'),
                 ('jeff','ullman', 'xml', 'vldb06')],
     'widom' : [('hector', 'garcia-molina', 'jennifer', 'widom', 'jeff', 'ullman', 'ranking', 'vldb04')]
    }
    
 #자카드 유사도
class jaccard_simlality:
    def __init__(self, dic):
        self.a=set()
        self.b=set()
        self.keys=[]
        for i in dic:
            self.keys.append(i)
            for j in dic[i]:
                for k in j:
                    if i=='ullman':
                        self.a.add(k)
                    elif i=='widom':
                        self.b.add(k)
    def simlality(self):
        c = self.a | self.b # 합
        d = self.a & self.b # 교
        sim = len(d)/len(c)
        print('합집합 {}'.format(c))
        print('교집합 {}'.format(d))
        print('simlality : %.2f' %sim)
        print('distance : %.2f' %(1-sim))
www = jaccard_simlality(dic)
www.simlality()

Comments