티스토리 뷰

선형대수에서 Matrix Factorization 방법중 한가지인 NNMF 를 Jupyter 로 간단하게 구현해 보았습니다.

MF ( Matrix Factorization ) 은 머신러닝에서 자주 쓰이는 알고리즘입니다.

종종 Amazon 이나 여러 쇼핑몰 사이트에서는 내가 둘러본 상품을 바탕으로 다른 상품을 추천해 주는걸 볼 수 있는데요.

이때 많은 부분이 MF 을 이용한 추천 시스템인 것으로 알고있습니다.

Matrix 분해는 SVD, NNMF 등이 있는데 저는 가장 기본적이고 Gradient Descent 를 이용하는 NNMF 를 공부해보았습니다.




위와 같이 행은 User 를, 열은 Item 을 나타내는 NxM 크기의 Matrix (R) 가 있다고 할때

\mathbf{R} \approx \mathbf{P} \times \mathbf{Q}^T = \hat{\mathbf{R}}

가 되도록 분해하는 P 와 Q 매트릭스를 Gradient Descent 를 이용하는 구하는 방법입니다.


주로 응용되는 추천시스템을 예로들면 

아래처럼 각 User 가 어떤 영화 Item 을 얼마나 감상했는지에대한 매트릭스를 상상할수 있습니다.



그런데 어떤 한 User a 가 f 에 해당하는 장르의 영화를 많이 보아서 

(User a, Feature f) 에 대한 점수가 높으면서 동시에 어떤 영화 b 도 Feature f 에 대해 (영화 b, Feature f) 큰 값을 가질때, 

우리는 User a 가 영화 b 를 본 데이터가 0 (안봤음) 임에도

그 영화를 보도록 추천해 줄 수가 있겠지요~ (새로운 적용 가능성의 예측!)


알고리즘은 다음과 같이 간단합니다.

FOR 각 메트릭스의 요소 iteration:

    실제 R - P x Q 를 통하여 error 구하기

    error gradient 를 구하고 P, Q 의 요소를 업데이트

위를 계속 반복하여 근사값에 가까운 P, Q 를 구합니다.


사용되는 수식은 다음과 같습니다.

Error : e_{ij}^2 = (r_{ij} - \hat{r}_{ij})^2 = (r_{ij} - \sum_{k=1}^K{p_{ik}q_{kj}})^2


Gradient :   \frac{\partial}{\partial q_{ik}}e_{ij}^2 = -2(r_{ij} - \hat{r}_{ij})(p_{ik}) = -2 e_{ij} p_{ik}


Update : p'_{ik} = p_{ik} + \alpha \frac{\partial}{\partial p_{ik}}e_{ij}^2 = p_{ik} + 2\alpha e_{ij} q_{kj}


q'_{kj} = q_{kj} + \alpha \frac{\partial}{\partial q_{kj}}e_{ij}^2 = q_{kj} + 2\alpha e_{ij} p_{ik}



이 방법은 sparse 한 데이터에 응용이 자주 되곤합니다.


언뜻 전혀 무관해 보이지만, 분석해야할 데이터가 많이 쌓이고 있는 의약학 분야에서도

약물-질병의 관계를 통해 약물을 재창출 하거나 약물에 의해 교란되는 Pathway 를 확인하는 연구,

환자의 진료정보가 담긴 EMR 데이터에도 응용하는 등 연구에 응용될 여지가 많이 남아있습니다.

이번 포스팅에서는 원리와 구현에 대해 간단하게 알아보았는데요.

다음에는 applications 에 대해 알아보고 포스팅 하겠습니다.



제가 만든 소스는 다음과 같습니다.

http://nbviewer.jupyter.org/github/link9/output-ipynb/blob/master/NNMF-Tutorial.ipynb


감사합니다!


Reference)

http://www.quuxlabs.com/blog/2010/09/matrix-factorization-a-simple-tutorial-and-implementation-in-python/

http://www.slideshare.net/irecsys/matrix-factorization-in-recommender-systems

http://katbailey.github.io/post/matrix-factorization-with-tensorflow/

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2026/07   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함