| 특징 | 사용자 기반 협업 필터링 | NMF / ALS (행렬 분해) |
|---|---|---|
| 추천 근거 | 사용자 간의 유사도 | 사용자와 아이템 간의 잠재 요인 |
| 필요 데이터 | 사용자-아이템 상호작용 데이터 | 사용자-아이템 평점 데이터 |
| 추천 방식 | 비슷한 사용자들이 좋아한 아이템 추천 | 행렬 분해로 예상 평점을 계산한 뒤 추천 |
| 장점 | 직관적이고 이해하기 쉬움 | 희소한 데이터에서도 효율적 추천 가능 |
| 단점 | 데이터 희소성이 크면 성능 저하 | 모델 학습이 상대적으로 복잡 |



왼쪽: 두개의 성분으로 표현함 ⇒ 데이터셋의 모든 포인트를 양수로 이루어진 두개의 벡터로 표현할 수 있다.
오른쪽: 1개의 성분만 이용⇒ 데이터를 가장 잘 표현하는 평균으로 향하는 벡터를 만듦

원본데이터셋

nmf 적용을 통해 얻은 25개의 feature set

pca와 비교했을 때 확연히 나은 결과!
from sklearn.decomposition import NMF
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
%matplotlib inline
iris = load_iris()
iris_ftrs = iris.data
nmf = NMF(n_components=2)
nmf.fit(iris_ftrs)
iris_nmf = nmf.transform(iris_ftrs)
plt.scatter(x=iris_nmf[:,0], y= iris_nmf[:,1], c= iris.target)
plt.xlabel('NMF Component 1')
plt.ylabel('NMF Component 2')

https://angeloyeo.github.io/2020/10/15/NMF.html
https://woolulu.tistory.com/41
https://kolikim.tistory.com/28
https://velog.io/@mios_leo/파이썬-머신러닝-완벽-가이드-7.-Dimension-Reduction2-SVD-NMF