Worth spreading

Matrix Factorization _ Part 2 본문

ABCD/Data mining

Matrix Factorization _ Part 2

annual 2018. 6. 2. 18:44

이 글은 Nicolas hug씨의

Understanding mtrix factorization 

for recommendation (part 2)

을 한글로 번역한 글입니다.  


오역이나 잘못 설명된 부분을 발견하신 분은 댓글로 알려주시면 감사하겠습니다.


SVD of a (dense) rating matrix


 Part2를 시작하기 전 지난시간 했던 것들을 짧게 복습해보자.


1) 행렬 R에 대한 PCA를 통해 typical user의 정보를 얻을 수 있다. 이 typical user는 original user와 같은 크기의 벡터이다. (creepy/typical guy 예제와 같은 맥락) 그리고 typical user가 벡터이기 때문에 우리는 typical user들을 열(column)으로 갖는 행렬을 정의할 수 있다. 이 행렬을 U라고 부르자.

2) R^T에 대한 PCA를 통해서는 typical movie의 정보를 얻을 수 있다. typical movie도 마찬가지로 벡터이며 위와 같이 typical movie를 열로 갖는 행렬을 만들어 이를 M이라고 부르자.

The matrix factorization


그럼 이제 SVD에 대해서 살펴보자. SVD를 한마디로 표현하면 R과 R^T에 대한 PCA다. SVD는 R을 가지고 위의 U와 M을 동시에 구하는 것이라고 할 수 있다. 즉 SVD를 통해 typical user와 typical movie를 한번에 구할 수 있다. R을 3개의 행렬로 factorizing해서 U와 M를 구해주는 것이다. 이를 matrix factorization이라고 부르며 다음과 같이 표현한다.

즉, SVD는 R를 입력받아 다음과 같은 M,Σ 그리고 U를 반환하는 알고리즘이다.

* R은 MΣU^T 와 같다

* M의 열들은 R의 column들로 분해될 수 있다.(지난 시간에 살펴본 것)

* U의 열들은 R의 row들로 분해될 수 있다.

* M과 U의 열들은 각각 직교한다.(orthogonal하다)  이걸 먼저 말하지 않았는데 PCA의 값들은 언제가 orthogonal하다. 이건 PCA(그리고SVD)에서 정말 중요한 성질이다. 하지만 우리 추천시스템에선 크게 상관하지 않을 것이다. (뒤에서 더 살펴볼 것이다) (역자 : PCA에 더 자세한 정보는 여기를 참조)

Σ는 대각행렬이다.(뒤에서 더 살펴볼 것이다)


위 특성들을 종합해서 다음과 같이 말할 수 있다: M의 열들은 R의 열공간(column space)를 가로지르는 직교기저벡터(an orthogonal basis)이며 U의 열들은 R의 행공간(row space)를 가로르는 직교기저벡터이다. 이 구문이 잘 와닿았으면 좋겠다. 개인적으로 난 그냥 creepy guy나 typical potatoes같은 애들의 이야기를 하는 게 좋다.


The model behind SVD


우리가 rating matrix R의 SVD를 계산하고 이용하는 것은 rating(점수)를 구체적이고 의미를 가질 수 있도록  모델링하는 것으로 볼 수 있다. 모델링이라는 의미를 좀 살펴보자.

위에서 Σ를 얘기할 때 그냥 대각행렬이라고 간단히 소개했는데 행렬에 대각행렬은 곱하는 연산은 행렬을 scaling한다는 의미로 해석할 수 있다. 때문에 Σ를 제외하고 이야기해도 크게 문제가 되지 않는다. 따라서 위의 R을 다음과 같이 다시 표현할 것이다.

자 이제 이 식을 이용해 item(i)에 대한 user(u)의 점수를 살펴보자. r_(ui)로 표현할 것이다.

행렬곱의 정의에 따라 r_(ui) 값은 M의 행인 p_u(user에 대한 정보)와 와 U^T의 열인 q_i(item에 대한 정보)의 곱(내적)의 결과라고 할 수 있다.


'•'은 dot product(내적)을 뜻한다. 자 이제 우리가 전에 user와 item을 표현했던 것을 떠올려보자.


위에서 설명한 벡터 p_u와 q_i는 우리가 latent factor에게 부여한 값들과 일치한다.(Well, the values of the vectors 

pu and qi exactly correspond to the coefficients that we have assigned to each latent factor:)

벡터 p_u는 user의 각 latent factor에 대한 선호도(기여도)를 나타낸다. 이와 동일하게 벡터 q_i는 item의 각 latent factor에 대한 기여도를 나타낸다. Alice는 (10%,10%,50%, ...)으로 나타나 있는데 이를 해석하자면 alice는 액션과 코미디보다 로맨스를 더 좋아한다. Bob은 다른 것보다 액션을 선호한다. 그리고 영화 타이타닉은 로맨스에 가깝다고 할 수 있다.


우리가 R의 SVD를 이용할 때, 어떤 item i에 대한 어떤 user u의 점수를 다음과 같이 모델링한다고 할 수 있다.

달리 말하면 어떤 user u가 어떤 item i을 선호한다고 하면 r_(ui)는 큰 값을 가질 것이다.

반대로, i가 u를 좋아하지 않는다면(the coefficient don't match well), r_(ui)는 작은 값을 가질 것이다. 

우리 예제의 경우 alice의 titanic에 대한 점수는 높지만 bob의 경우는 낮다. 이는 그가 로맨스에 대한 점수가 낮기 때문이라고 볼 수 있다. 하지만 토이스토리에 대한 그의 점수는 alice의 경우보다 크다.


자 이정도면 SVD를 추천시스템에 적용하기 위해 필요한 지식을 어느정도 습득했다고 볼 수 있다. 

그 전에 우린 R이 dense matrix라고 가정할 것이다. 실제론 sparse하지만 이걸 dense하게 만드는 것이 우리 목표니까. 

다음 part에서 보자!



관련

*ㅇ


'ABCD > Data mining' 카테고리의 다른 글

Basic Collaborative-Filtering  (0) 2018.07.21
Feynman's restaurant problem  (0) 2018.06.26
Pagerank(페이지랭크)  (0) 2018.06.16
Matrix Factorization _ Part3  (0) 2018.06.03
Matrix Factorization _ Part 1  (0) 2018.06.02
Comments