まだタイトルない

アウトプット用です

『推薦システム実践入門』の写経で躓いた所メモ

こんにちは

『推薦システム実践入門』を写経していて本の通り動かない部分があったため、メモとして残します。

今回は5章のIMFでimplicitを使う部分

各ライブラリのバージョン

numpy:1.21.6
implicit:0.5.2
scipy:1.7.3

リンク

github.com

github.com

本題

本のコード

# モデルの初期化
model = implicit.als.AlternatingLeastSquares(
    factors=factors, iterations=n_epochs, calculate_training_loss=True, random_state=1
)

# 学習
model.fit(movielens_matrix)

# 推薦
recommendations = model.recommend_all(movielens_matrix.T)

>>> Precision@K=0.026, Recall@K=0.080

出典:風間正弘、飯塚洸二郎、松村優也著『推薦システム実践入門』(オライリー・ジャパン、ISBN978-4-87311-966-3)

自分の環境で動かすと recommendations = model.recommend_all(movielens_matrix.T)の所でuser_items needs to be a CSR sparse matrixというエラーが出ます。

ただ、エラーの言うように.tocsr()しても治らない。コレについてはfitとrecommendで片方だけ.Tしていることが原因っぽいです。

どちらに合わせるかというところですが、implicitの実装を見てみると、"A sparse CSR matrix of shape (number_of_users, number_of_items)."と記載があるため下記のように.T.tocsr()することで本の通りの出力になった。

# 学習
model.fit(movielens_matrix.T.tocsr())
# 推薦
recommendations = model.recommend_all(movielens_matrix.T.tocsr())
>>> Precision@K=0.026, Recall@K=0.080

lil_matrixを用意して値を入れていく段階で行方向をユーザーにするように変更するほうがスマートとは思います。

また躓いたら追記します。

それでは。