K-최근접 이웃 실습 :: Python을 이용한 추천 시스템 - mindscale
Skip to content

K-최근접 이웃 실습

예제 데이터 로딩

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 KNNBasic, KNNWithMeans, KNNBaseline, KNNWithZScore
algo = KNNBasic(k=40, min_k=1, sim_options={'name': 'msd', 'user_based': True})

모든 알고리즘은 다음과 같은 공통 인자가 있다.

  • k: 이웃의 최대 개수 (기본값 40)
  • min_k: 이웃의 최소 개수 (기본값 1) 유사도가 0보다 큰 이웃이 최소 개수에 미달할 경우에는 평점을 기본값으로 추정.
  • sim_options: 유사도 계산 방법

sim_options는 사전(dict) 형태로 nameuser_based를 설정한다.

name의 종류는 다음과 같다.

  • msd
  • cosine
  • pearson
  • pearson_baseline

user_basedTrue인 경우에는 사용자 간 유사성을 계산하고, False인 경우에는 상품 간 유사성을 계산한다.

알고리즘 학습

algo.fit(trainset)
Computing the msd similarity matrix...
Done computing similarity matrix.
<surprise.prediction_algorithms.knns.KNNBasic at 0x1f5cf369940>
uid = str(196)
iid = str(302)

pred = algo.predict(uid, iid)
pred.est
3.902658210324525