간단 요약
2차원 행렬을 두 개의 잠재요인 행렬과 하나의 대각행렬로 분해하는 기법
eigen vector, eigen value
- 2차원 행렬 분해 기법
- 유저 잠재요인 행렬 ⇒ 유저 임베딩
- 잠재요인 대각행렬 ⇒ 임베딩의 중요도
- 아이템 잠재요인 행렬 ⇒ 아이템 임베딩
- 차원축소 기법
- 행렬을 대각화하는 방법
- 모든 m x n 행렬에 대해 적용 가능
Rating Matrix $R$
에 대해 유저와 아이템의 잠재 요인을 포함할 수 있는 행렬로 분해한다.
Full SVD
기존 행렬을 온전하게 3개의 행렬로 분해한다.
$$
\tt Full\ \ SVD :R = U\Sigma V^T
$$
-
$U$
: 유저와 Latent Factor의 관계$U$
의 열벡터는$R$
의 left singular vector -
$V$
: 아이템과 Latent Factor의 관계$V$
의 열벡터는$R$
의 right singular vector -
$\Sigma$
: Latent Factor의 중요도$RR^T$
을 고유값 분해해서 얻은 직사각 대각 행렬대각 원소들은
$R$
의 singular value(특이치)
Truncated SVD
$\Sigma$
를 일부만 사용한다.
$$
\tt Truncated \ \ SVD: R \approx \widehat{U} \Sigma_k \widehat{V^T}=\hat{R}
$$
$\Sigma$
는 중요도로 정렬되어 있기 때문에, 상위 k개만 활용하여 기존의 행렬을 거의 유사하게 나타낼 수 있다.
즉, 몇 개의 특이치만을 가지고도 유용한 정보를 유지한다.
분해된 행렬이 부분 복원되면서 가장 중요한 정보로 요약된다.
$\widehat R$
은 축소된 $\widehat U, \widehat {V^T}, \Sigma_k$
에 의해 계산된다.
각각의 K개의 Latent Factor는 유추할 수 있을 뿐, 정확히 무엇을 의미하는지 알 수 없다.
SVD의 한계
-
분해(Decomposition)하려는 행렬에 결측치가 없어야 한다.
User-Item 행렬의 경우 모든 값이 채워져야 한다.
Sparsity가 높은 데이터의 경우 결측치가 매우 많다.
실제 데이터는 대부분 Sparse Matrix
-
Imputation 후 SVD를 수행 → Computation 비용 증가
Imputation은 데이터의 양을 상당히 증가시키기 때문
Imputation에 의해 데이터 왜곡 발생 시 성능 저하
행렬의 entry가 매우 적을 때 SVD를 적용하면 과적합 되기 쉽다.