본문 바로가기

데이터 사이언스 공부/기타

SVD특이값 분해, 추천알고리즘

1. 특이값 분해(SVD)

 

# 고유값 분해

정방행렬 A 의해 선형변환된 벡터가 상수배인 벡터가 있을 수 있다. 이때 상수를 고유값, 고유값에 대응하는 벡터를 고유벡터라고 한다.

상수 하나에 대응하는 벡터가 있고, 상수는 대각 행렬로, 벡터는 방향으로 모아 행렬로 표현한다

 

고유값과 고유벡터의 값은 특성방정식을 이용하여 구한다.

 

고유값 분해의 성질을 활용하면 A determinant, transpose, 제곱을 쉽게 구할 있다.

 

# 특이값 분해

직교 행렬 A 분해해서 대각 행렬을 구할 있다.

 

대각 행렬에서 singular value 0, 비대각원소를 처리해서 A를 구하면 동일한 행렬 A가 나온다.

대각 행렬에서 0 아닌 singular value 까지 처리해서(truncated SVD) A를 구하면 근사행렬 A'이 나온다.

 

활용 1.

대각행렬의 Rank를 선택해서(대각 원소의 개수) 데이터를 압축할 있다. (대각 행렬의 일부만 이용)

 

활용 2.

벡터 공간에 있는 데이터들을 대표하는 함수를 구할 있다. 데이터를 가장 표현하는 모델을 구할 있다.

 

모든 데이터를 완벽하게 표현하는 선형 방정식은 구할 없다. 따라서 A 의사 역행렬(pseudo inverse) 구해서 Ax = b 표현된 선형식의 해를 구할 있다. 일반적으로 행렬 A 계수가 미지수인 n 함수에 독립변수 값들을 대입해서 행렬 표현한 것이다. b 종속변수의 값들이 온다.

 

계산은 python numpy polyfit에서 제공한다. poly1d로 원하는 차수의 함수를 만들어 준다.

 

 

 

2. 추천알고리즘

 

코사인 유사도식을 이용하여 유저간 혹은 항목간의 유사도 행렬을 만들 있다.

 

유저: 유저들이 평가한 점수 벡터를 행렬로 표현

항목: 항목을 선택해서 항목들을 모두 평가한 사람들의 점수 벡터를 행렬로 표현