코사인유사도
[python] 코사인 유사도를 이용한 추천시스템 - 기초
코사인 유사도는 벡터의 '방향'이라는 특징으로만 벡터간 유사도를 구할 수 있습니다. 유클리드 거리는 방향은 무시한 채, 거리가 얼마나 가까운지에 기반하여 추천 시스템의 엔진이 되었죠. 두 추천 알고리즘 모두 완벽하거나 현재 이상적으로 활발하게 사용되는 추천 시스템은 아닙니다. 하지만 다른 고급(?) 알고리즘의 기초가 되는 만큼 간단하게 이해하고 넘어가는 것이 좋다고 생각합니다. 또한 NLP를 처음 공부한다면, Bag of Words에 기반한 단어 표현 방법인 Document Term Matrix, TF-IDF 등과 같이 단어를 수치화할 수 있는 방법을 알고 있다면, 코사인 유사도는 위 표현식에 아주 적용하기 쉬운 알고리즘입니다. 이를 기반으로 "문서의 유사도"를 구하는 게 가능합니다. 코사인 유사도는 기..
내적과 코사인유사도 (dot product & cosine similarity)
벡터끼리의 내적은 매우 유용한 정보를 줄 수 있다. 이를 테면, 인공지능의 다양한 연산에 기초가 되기도 하며, 이미지 인식, 음성 인식 그리고 구매 이력에 기반한 상품 등을 추천할 때 최종 엔진에서 활용되는 연산이기도 하다. 이게 어떻게 가능한 지에 대한 원리를 알아보려면, 우선 내적의 식을 유도할 필요가 있다. 간단하게 내적을 정의해보자 정의) 내적(inner product = dot product) 임의의 두 벡터 \( \mathbf{a}=(a_1, a_2) \) 와 \( \mathbf{b}=(b_1, b_2) \)에 대해서 내적은 다음과 같이 정의될 수 있다. $$ \mathbf{a} \cdot \mathbf{b} = a_1b_1 + a_2b_2 = \mathbf{b}^T \mathbf{a} $$ ..
정형데이터 관점에서의 벡터
선형대수의 개념을 모르는 사람이더라도, 엑셀은 사용해봤으리라 생각이 든다. 우리는 어떠한 정보를 기록해두기 위해서 엑셀을 사용하는데, 엑셀 테이블의 행과 열이 선형대수 관점에서 어떻게 사용되고 있을까? 아래의 사람의 개인정보를 담은 테이블을 보자 각 행은 한 사람에 대한 데이터를 담고 있다. 이 맨 윗 행에 대한 정보를 테이블에서 똑 떼와서 본다면 160cm, 80kg, 19세, 남성 이라는 정보가 --> (160, 80, 19, 1) 이렇게 하나의 벡터로 표현을 할 수 있다. 물론 파이썬 pandas의 관점에서 생각을 해보면, 하나의 열 (키, 몸무게, 연령, 성별) 이라는 변수들이 벡터로서 표현되어 각 열벡터가 하나로 취합되어 테이블(=데이터프레임=행렬)로써 표현이 되고 있다. 마찬가지로 두번째 세번..