Re:ゼロから始めるML生活

どちらかといえばエミリア派です

recsys-pythonをやる (第7章 評価履歴の次元削減・第8章 評価値行列の次元削減)

この記事は (1人で)基礎から学ぶ推薦システム Advent Calendar 2022の4日目の記事です。

前回に引き続きrecsys-pythonをやっていきます。

www.nogawanogawa.com

今回は7章からやっていきたいと思います。

第7章 評価履歴の次元削減

なんで次元削減が必要?

推薦で扱うデータでは、場合によっては特徴量の次元数が大きくなってしまうことがあります。 このようなデータでは、特徴量の次元数が増加するのに応じて大きなデータセットが必要になり、扱いが難しくなってしまいます。 また、特徴量空間も疎になりやすく、特定の特徴量を持つデータがほとんどないために、そこだけ推薦がうまく行かないといったこともありえます。

そこで、高次元な特徴量空間を低次元な特徴量空間に変換する次元削減という手法が取られたりします。 次元削減のメジャーなやり方だと主成分分析によって行うケースかと思います。

やってみる

やってみたほうが早いのでやってみようと思います。

recsyslab.github.io

第8章 評価値行列の次元削減

考え方

前回までやっていた協調フィルタリングなどでは、一般に疎行列を扱うことになります。 このような疎行列では、共通のアイテムを評価しているユーザーのペアが少なくなる一方、行列のサイズは肥大化していってしまいます。 推薦システムで扱うデータでは、ユーザー・アイテムのどちらも非常に値が大きくなるので、場合によっては現実的な計算時間で推薦の計算が終わらなくなる、といったことも起きてしまいます。

そこで、疎な評価値行列を次元圧縮でより小さな密な行列に直すことで、行列の疎性による問題に対応することができます。 ここではユーザー・アイテムのどちらかに対して次元削減をしていますが、両方同時に次元削減したのが行列分解(Matrix Factorization)って感じですかね。

やってみる

recsyslab.github.io

参考文献

下記の文献を参考にさせていただきました。

感想

推薦関係の論文を読んでいると、「特徴がスパースである」という文言をよく見かけます。 こうした問題は推薦では避けられず、その意味では次元削減と密接に関わってきますし、一つ大事なテーマであることは確かですね。