데이터베이스

데이터 마이닝_비지도학습_군집분석_코사인 유사도, 코사인 거리

스윙스윙 2021. 10. 15. 22:34

▣ 데이터 마이닝_비지도학습_군집분석_코사인 유사도

코사인 유사도는 두 벡터 간의 코사인 각도를 이용하여 구할 수 있는 두 벡터의 유사도를 의미합니다. 두 벡터의 방향이 완전히 동일한 경우에는 1의 값을 가지며, 90°의 각을 이루면 0, 180°로 반대의 방향을 가지면 -1의 값을 갖게 됩니다. 즉, 결국 코사인 유사도는 -1 이상 1 이하의 값을 가지며 값이 1에 가까울수록 유사도가 높다고 판단할 수 있습니다. 이를 직관적으로 이해하면 두 벡터가 가리키는 방향이 얼마나 유사한가를 의미합니다.

 

두 벡터 A, B에 대해서 코사인 유사도는 식으로 표현하면 다음과 같습니다.

문서 간 유사도를 측정하는 방법 중 유클리드 거리 기반의 지표도 있습니다. 하지만 희소 행렬에서 문서와 문서 벡터 간의 크기에 기반한 유사도 지표는 정확도가 떨어집니다. 또한 문서가 매우 긴 경우 단어의 빈도수 또한 많기 때문에 빈도수에만 기반해서 유사도를 구하는 것은 공정한 비교가 될 수 없습니다. 예를 들어 A 문서에서 '경제'라는 단어가 5번 나왔고, B 문서에서 '경제'라는 단어가 3번 언급되었다고 A가 경제와 더 밀접한 문서라고 볼 수 없습니다. A 문서의 길이가 B 문서의 길이보다 10배 이상 크다면 오히려 B 문서가 경제와 더 관련이 있다고 판단해야 옳을 것입니다. 따라서 문서 간 유사도를 측정할 때는 코사인 유사도가 가장 많이 쓰입니다. 

 

일반적인 단어의 의미를 보면 ‘유사도’와 ‘거리’가 밀접한 관계를 가지는 것을 알 수 있다. “거리가 클수록, 유사성이 떨어진다.” 라는 표현으로 이 둘의 관계를 연결할 수 있다.

 

코사인 함수는 [0,1]로 항상 매핑되므로 다음과 같이 거리 함수인 코사인 거리(cosine distance)로 변환할 수 있다.

 


 

2021년 73번

보기 3번은 루트 31임

 

정답 : 2번

 

d(x,y) = 1- (X1*Y1 + ... + XnYn) / 루트(X1^2+ ... + Xn^2) * 루트(Y1^2+... + Yn^2)

        = 1 - (3+1+3+4+4) / 루트(9+1+9+1+4+1)*루트(1+1+4+1+4+16+9)

        = 1 - 15 / 30 = 1 - 0.5 = 0.5