Coursera Machine Learning - Week9-2 Recommender Systems

CourseraのMachine Learningについてまとめています。 前回はWeek9の前半、Anomaly Detectionついてまとめました。 

今回は、Week9の後半、Recommender Systemsについて学びます。


Recommender Systems

Recommender systemは、機械学習の重要な適用例の1つです。例えばAmazonの書籍のリコメンドやNetflixの映画のリコメンド等。今回は、このリコメンドシステムをどう構築するかについて学んでいきます。

リコメンドシステムの1例としてあげられるのが、下記図のような映画評価の予測です。各ユーザーが視聴済みの各映画に対して0~5のレート付けを行っており、評価していない映画については、"?"を記載しています。この未評価の映画について、各ユーザーがどの程度の評価を付けるかを予測し、評価が高くなりそうな映画を次に観る映画としてリコメンドします。下記の例では、上3つの映画が恋愛映画に分類でき、下2つの映画がアクション映画に分類できます。このカテゴリと各ユーザーの評価をもとに、未評価の映画がどのくらいの評価になりそうかを予測します。


Predicting movie ratings

 


Content-based recommendations

最初のアプローチとして、コンテンツベースリコメンデーションについて学びます。

まず、各映画にx1とx2の二つのFeatureがあるとします。x1はその映画がどのくらいロマンティックな映画なのか、x2はその映画がどのくらいのアクション映画なのかを測る指標です。  

Predicting movie ratings2

これにバイアス項のx0を加えて、例えば、Cute puppies of loveのFeatureベクトルx(3)は下記のように表せます。

Feature vector of Cute puppies of love


また、各ユーザーの評価を予測するために、各ユーザーのパラメータベクトルθ(1), θ(2), ... , θ(j)を学習する必要があります。例えば、Aliceのパラメータθ(1)が既に下記のように得られていたとして、AliceのCute puppies of loveの評価を予測するために、x(3)とθ(1)を掛け合わせ、4.95の評価が得られると予測できます。

Prediction example


この後コンテンツベースリコメンデーションのアルゴリズムを説明するにあたり、必要な項目を下記のように定義、整理します。

コンテンツベースリコメンデーション


パラメータθ(j)を求める方法としては、Linear regressionと同様に考えれば良く、下記のコスト関数で求めることができます。ここで、i:r(i, j)=1とは、r(i, j)=1となる(ユーザーが映画の評価を行っている)全てのiに対して総和を取るという意味です。

Cost function for user j parameter


また、実際には、1人のユーザーjに対するパラメータを求めるのではなく、全てのユーザーのパラメータを学習する必要があるため、ユーザーの総数をnuとして、コスト関数は、下記のように書き換えることができます。

Cost function for all users parameter


Gradient descentについては、下記のように計算することができます。

Gradient descent


以上が、コンテンツベースリコメンデーションのアルゴリズムで、各ユーザーの映画への評価を予測することができます。しかしながら、この方法は、映画のコンテンツ(どのくらいロマンチックなのか、アクションなのかが定義されたフィーチャー)が分かっている前提のアルゴリズムです。この後、そうでない場合のアルゴリズムについて説明していきます。

 


Collaborative filtering

Feature含めて学習する方法として、Collaborative filtering(協調フィルタリング)について学びます。

まず、各映画のFeature x1、x2が下記のように不明な状態であり、一方で、各ユーザーの好みは把握することが出来ていて、パラメータθが分かっている状態だと仮定します。

Problem motivation


この場合、映画iのFeatureは、コンテンツベースリコメンデーションの時と同様に下記のコスト関数で求めることができます。

Cost function to learn movie feature


また、全ての映画についても、同様に下記のコスト関数で求めることができます。

Cost function to learn all movie features


つまり、パラメータθが分かっていれば、Feature xを求めることができ、Feature xが分かっていれば、パラメータθを求めることができます。最初にランダムにパラメータθの値を推測しておき、θ → x → θ → x → θ ... と繰り返すことで、リーズナブルなパラメータとFeatureに収束させることができます。これが協調フィルタリングのアルゴリズムの考え方です。ちなみに、これが可能なのは、各ユーザーが複数の映画をレーティングしていて、全ての映画が複数のユーザーにレーティング場合のみとのことです。

 

θとxを行ったり来たりしながら解いていくと記載しましたが、より効率的な方法として、下記数式のように、2つのコスト関数を合わせてしまうことも可能とのことです。

Collaborative filtering algorithm


協調フィルタリングを利用する際には、下記のように進めます。

  1. x(1), x(2), ... , x(nm)とθ(1), θ(2), ... , θ(nu)を小さな値でランダムに初期化
  2. 下記のGradient descent、もしくはその他の最適化アルゴリズムを用いてコスト関数Jを最小化
  3. θとxを用いて、映画の評価を予測(θTxを計算)

Gradient descent for Collaborative filtering

 

 

プログラミング演習

Week9のプログラミング演習では、まずは、異常検知アルゴリズムを実装し、ネットワーク上のサーバーの障害検知に適用します。次に、協調フィルタリングを用い、映画のリコメンドシステムの構築を行います。演習の項目は、具体的には以下のものです。

  • Estimate Gaussian Parameters
  • Select Threshold
  • Collaborative Filtering Cost
  • Collaborative Filtering Gradient
  • Regularized Cost
  • Gradient with regularization

 プログラム演習は、今回で最後であり、Week10, 11は講義のみとなります。

 

 


次回は、Week10 Large Scale Machine Learningについてまとめます。

 

コース全体の目次とそのまとめ記事へのリンクは、下記の記事にまとめていますので、参照ください。

Coursera Machine Learningまとめ



本記事を読んでいただきありがとうございます。
機械学習を実際に使うにあたり、Coursera MLと合わせておすすめしたい書籍を紹介します。


Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎

scikit-learnを用いた機械学習を学ぶのに最適な本です。



ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

Deep Learningと言えばこれ。TensorFlowやPyTorch等のフレームワークを用いずに、基礎の理論からDeep Learningを実装します。Week4Week5の記事を読んで、より深く理解したいと思った人におすすめです。



Kaggleで勝つデータ分析の技術

データ分析について学び始めた人におすすめです。