특이값 분해 실습
예제 데이터 로딩
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