
Cosine Nearest Centroid (Rocchio)
59번 Manhattan Nearest Centroid 는 L1 거리로 스케일 이상치에 덜 민감. 텍스트/IR 에선 한 걸음 더 나아가 방향만 봅니다 — 문서 벡터의 길이(문서 길이)는 주제와 무관하니까.
Rocchio classifier: 클래스별 평균 벡터를 구한 뒤, 테스트 벡터와 코사인 유사도 가 가장 큰 클래스 반환.
cos(x,μc)=∥x∥∥μc∥x⋅μc
y^=argmaxccos(x,μc)
언제 좋은가
- 고차원 희소 벡터 (TF-IDF, BoW) — 길이보다 "어떤 단어가 많은가" 가 중요.
- 유클리드로는 긴 문서가 항상 멀어 보이는 문제.
주의
- 영벡터 처리 필요 (norm=0 인 경우 division by zero → 1e-12 로 clip).
- 방향만 보므로, 예: x=2μc 는 x=μc 와 동일한 유사도.
과제
함수 predict_cosine_centroid(X_train, y_train, X_test) 를 완성하세요.
- 각 클래스 평균 벡터 계산.
- 테스트 벡터와 각 평균 벡터의 코사인 유사도 → argmax.
- 반환:
(M,) 정수 레이블.
테스트 케이스
| # | 이름 | 검증 |
|---|
| 1 | shape | (M,) |
| 2 | 분리된 2 방향 → 100% | |
| 3 | 스케일 불변 | x * 10 도 같은 예측 |
| 4 | L2 와 다른 케이스 | 길이만 차이나는 경우 |
| 5 | 3-class 방향 클러스터 | ≥ 0.9 정확도 |