특이값 분해 실습 :: Python을 이용한 추천 시스템 - mindscale
Skip to content

특이값 분해 실습

예제 데이터 로딩

from surprise import Dataset
from surprise.model_selection import train_test_split

data = Dataset.load_builtin('ml-100k')
trainset, testset = train_test_split(data, test_size=.2, random_state=42)

알고리즘 설정

from surprise import SVD

algo = SVD(n_factors=100, biased=True, reg_all=0.02)

SVD의 주요 옵션은 다음과 같다.

  • n_factors: 요인의 수. 기본값은 100
  • biased: True로 설정하면 기저선을 고려한다.
  • reg_all: 정규화항. 클 수록 파라미터가 작게 추정된다. 기본값은 0.02
algo.fit(trainset)
<surprise.prediction_algorithms.matrix_factorization.SVD at 0x2b0995f9cc0>

fit 함수를 수행하고 나면 algo.pu, .qi, .bu, .bi 네 가지 속성이 생긴다.

.pu는 SVD로 구한 사용자의 요인값이다. .shape으로 크기를 구해보면, 사용자의 수(943명)만큼 100개의 요인값이 있다.

algo.pu.shape
(943, 100)

.qi는 상품의 요인값이다.

algo.qi.shape
(1651, 100)

.bu는 사용자별 평균 평점이다.

algo.bu.shape
(943,)

.bi는 상품별 평균 평점이다.

algo.bi.shape
(1651,)

평점 예측

uid = str(196)
iid = str(302)
algo.predict(uid, iid).est
4.099317845186746