Notice
Recent Posts
Recent Comments
Link
헬창 개발자
코사인 유사도, 코사인 거리 구현[파이썬] 본문
1. 코사인 유사도란?
코사인 유사도(Cosine Similarity)는 두 벡터 간의 유사성을 측정하는 방법으로, 벡터 간의 각도를 기준으로 유사도를 계산합니다. 두 벡터가 동일한 방향을 가질수록 코사인 유사도는 1에 가까워지며, 반대 방향일수록 -1에 가까워집니다. 벡터 간의 각도를 측정하여 텍스트 데이터나 다른 고차원 데이터의 유사성을 평가할 때 유용합니다.
2. 코사인 유사도의 수식
코사인 유사도는 다음과 같이 정의됩니다:
3. 코사인 거리란?
코사인 거리(Cosine Distance)는 코사인 유사도(Cosine Similarity)의 보완적인 개념으로, 두 벡터 간의 유사성을 거리의 형태로 표현합니다. 코사인 유사도가 두 벡터 간의 각도를 기준으로 유사성을 측정하는 반면, 코사인 거리는 이 유사성을 거리로 변환하여 표현합니다.
코사인 거리는 두 벡터 간의 코사인 유사도를 기반으로 계산되며, 유사도가 1에 가까울수록 거리는 0에 가까워지고, 유사도가 0에 가까울수록 거리는 1에 가까워집니다. 코사인 거리의 수식은 다음과 같습니다:
4. 소스코드
#데이터 셋
dic = {'Tom Cruise' : [('Collateral','04'),('Last','Samurai','03'),('Minority','Report','02'),('Vanilla','Sky','02')],
'T_Cruise' : [('Vanilla','Sky'),('The','Last','Samurai'),('Mission','Impossible'),('Minority','Report')]
}
#코사인 유사도
class cosine_simlality:
def __init__(self, dic):
self.a=set()
self.b=set()
self.keys=[]
self.tlist=[]
for i in dic:
self.keys.append(i)
for j in dic[i]:
for k in j:
if i=='Tom Cruise':
self.a.add(k)
elif i=='T_Cruise':
self.b.add(k)
def simlality(self):
c = self.a | self.b # 합
v1=[]
v2=[]
self.tlist=list(c)
print(self.tlist)
for i in self.tlist:
if i in list(self.a):
v1.append(1)
else:
v1.append(0)
for i in self.tlist:
if i in list(self.b):
v2.append(1)
else:
v2.append(0)
print('Tom Cruise vector ', v1)
print('T Cruise vector ', v2)
sum = 0
for i in range(0, len(v1)):
sum= sum+(v1[i]*v1[i])
n1 = sum**0.5
sum = 0
for i in range(0, len(v2)):
sum= sum+(v2[i]*v2[i])
n2 = sum**0.5
print(n1)
print(n2)
v3 = 0
for i in range(0, len(v1)):
v3 = v3 + (v1[i]*v2[i])
print('||Tom x T|| : ',v3)
dist = v3 / (n1*n2)
print('코사인 유사도:', dist)
print('코사인 거리:', 1-dist)
www = cosine_simlality(dic)
www.simlality()
'데이터 분석' 카테고리의 다른 글
7. 시계열 데이터를 다뤄보자 (0) | 2022.04.27 |
---|---|
KNN 최근접 이웃 [파이썬] (0) | 2022.04.23 |
자카드 유사도, 거리 [파이썬] (0) | 2022.04.23 |
계층적 군집화(hierachical clustering) [파이썬] (0) | 2022.04.23 |
편집거리 알고리즘 [파이썬] (0) | 2022.04.23 |
Comments