특이값 분해 실습
예제 데이터 로딩
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: 요인의 수. 기본값은100biased: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