Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

行列分解に基づく推薦システム

その他の行列分解による推薦

ALS

ALS(Alternating Least Squares)

Alternating Least Square (ALS) でCP分解 - でかいチーズをベーグルする

iALS

iALS(Implicit Alternating Least Squares) はALSの応用的な位置付けのモデル。

通常のALSはユーザーがアイテムに対して明示的な評価を与える場合を想定している。iALSはユーザーの行動履歴などの暗黙的なフィードバック(例:クリック、閲覧、購入履歴など)を扱う。

iALSの論文実装と評価〜推薦システムの手法〜 #Python - Qiita

ライブラリ

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
Trying to download dataset from https://files.grouplens.org/datasets/movielens/ml-100k.zip...
Done! Dataset ml-100k has been saved to /root/.surprise_data/ml-100k
<surprise.dataset.DatasetAutoFolds at 0x7fa71c03bcd0>
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()
Loading...
reader = Reader(rating_scale=(1, 5))
data = Dataset.load_from_df(df_custom[["userid", "itemid", "rating"]], reader)
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