行列分解に基づく推薦システム#
Matrix Factorization#
Matrix Factorization: A Simple Tutorial and Implementation in Python @ quuxlabs
その他の行列分解による推薦#
ALS#
ALS(Alternating Least Squares)
Alternating Least Square (ALS) でCP分解 - でかいチーズをベーグルする
iALS#
iALS(Implicit Alternating Least Squares) はALSの応用的な位置付けのモデル。
通常のALSはユーザーがアイテムに対して明示的な評価を与える場合を想定している。iALSはユーザーの行動履歴などの暗黙的なフィードバック(例:クリック、閲覧、購入履歴など)を扱う。
ライブラリ#
Surprise · A Python scikit for recommender systems.
主に行列分解系を中心に扱っているライブラリ
import time
import pandas as pd
import numpy as np
from surprise import Dataset, Reader, accuracy
from surprise.model_selection import train_test_split
from surprise import SVD, NMF
# data_ml_100k = Dataset.load_builtin(name=u'ml-100k', prompt=False)
# data_ml_100k
ML100K_URL = 'http://files.grouplens.org/datasets/movielens/ml-100k/u.data'
df = pd.read_csv(ML100K_URL, names=["userid", "itemid", "rating", "timestamp"], sep="\t")
df.tail()
userid | itemid | rating | timestamp | |
---|---|---|---|---|
99995 | 880 | 476 | 3 | 880175444 |
99996 | 716 | 204 | 5 | 879795543 |
99997 | 276 | 1090 | 1 | 874795795 |
99998 | 13 | 225 | 2 | 882399156 |
99999 | 12 | 203 | 3 | 879959583 |
reader = Reader(rating_scale=(1, 5))
data = Dataset.load_from_df(df_custom[["userid", "itemid", "rating"]], reader)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[4], line 2
1 reader = Reader(rating_scale=(1, 5))
----> 2 data = Dataset.load_from_df(df_custom[["userid", "itemid", "rating"]], reader)
NameError: name 'df_custom' is not defined
trainset, testset = train_test_split(data_custom, test_size=.2)
algo = SVD()
algo.fit(trainset)
pred = algo.test(testset)
_ = accuracy.rmse(pred),accuracy.mse(pred),accuracy.mae(pred),accuracy.fcp(pred)
RMSE: 0.9338
MSE: 0.8720
MAE: 0.7378
FCP: 0.7007