본 포스팅은 Fastcampus 강의를 수강하며 일부 내용을 정리한 글임을 밝힙니다. 보다 자세한 내용은 아래 강의를 통해 확인해주세요.
참고 : Fastcampus 딥러닝을 활용한 추천시스템 구현 올인원 패키지 Online
Ch 04. Contents-based Recommender System
k-Nearest Neighbor(KNN) 알고리즘
-
데이터(유저/아이템)로부터 거리가 가까운 K개의 다른 데이터를 선택
-
다른 데이터사이의 거리를 측정할 때 Euclidean Distance 지표 사용
-
회귀(Regression)의 k-NN 알고리즘
- k개의 nearest neighbor값들의 평균 (주변의 값들 이용해서 평균 값으로 점을 쭉 이어나간다)
-
분류(Classification)의 k-NN 알고리즘
- k개의 nearest neighbor 중 과반수로 분류
-
클러스터링(unsupervised learning)과의 차이점은 label을 사용하기때문에 supervised learning임
-
Model-based Learning이 아닌 Lazy Model
- 이유: 딱히 무언가를 학습하는 것이 없고 주어진 데이터를 좌표공간에 뿌려놓고, 새 데이터 들어왔을 때 데이터들과 거리 계산하는 것 => 이미 주어진 상황에서 어느 데이터와 관련있는지 판단
k값과 거리측정 방법 ➡️ 알고리즘 성능의 가장 중요한 hyperparameter
- k값
- k값에 따라 overfitting과 underfitting 발생
- 개별 데이터 모두를 반영한 지역적 모델 or 과도한 정규화로 label 특성 반영 안된 모델 발생할 수 있다
- 현재는 하나하나 시도하는 방법이나 grid-search로 찾아야 함
- 거리측정 metric
- Euclidean Distance: 두 변수의 직선 거리 사용
- Mahalanobis Distance: 변수 상관관계 고려, 변수 내 분산과 변수간 공분산 반영
- Manhattan Distance: 좌표축 따라 이동한 거리(절댓값)를 사용
특징
- k는 홀수로 하는 것이 일반적(과반수 선택)
- 장점
- 훈련이 없음 ➡️ 빠르게 학습 가능한 알고리즘(loss 계산 같은 학습이라는 뜻이 아니라 거리 계산만 하면 되는 것)
- 수치 기반 데이터에서 우수한 성능
- 단순하고 효율적
- 단점
- 명목 or 더미 데이터 처리 어려움
- 변수가 많은 데이터 ➡️ 처리 속도 느리고 정확도 많이 떨어짐
- ⭐️ 적절한 k 선택 어려움
- 변수를 이해하는 알고리즘 X, label과의 관계 파악 등 설명력 떨어짐
- 각 변수마다 스케일이 다른 경우 동일한 거리 척도 사용 어려움
✅ k-NN 구현을 위한 고려 사항
- 변수 간의 분포가 다르기 때문에 정규화를 꼭 해야 함
- Z-Score, Min-Max Normalization 등
- 데이터 간의 거리 측정 효율화
- Locality Sensitive Hashing(LSH), Network based Indexer 등
- 굳이 모든 거리를 구하지 않더라도 거리 계산을 효율적으로 할 수 있도록 구현 상에서 중요한 포인트
- 공간 상에서 데이터의 representation 상태 확인
- 다른 모델에 비해 outlier에 강건한 편(outlier면 거리가 더 머니까 더 배척할 수 있겠지), but 전반적으로 성능 끌어내기 위해서 주어진 공간에 데이터 특성에 따라 위치와 거리가 적절히 분포(데이터 representation이 조금 더 중요하다)되어 있어야 함