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つの映画がアクション映画に分類できます。このカテゴリと各ユーザーの評価をもとに、未評価の映画がどのくらいの評価になりそうかを予測します。
Content-based recommendations
最初のアプローチとして、コンテンツベースリコメンデーションについて学びます。
まず、各映画にx1とx2の二つのFeatureがあるとします。x1はその映画がどのくらいロマンティックな映画なのか、x2はその映画がどのくらいのアクション映画なのかを測る指標です。
これにバイアス項のx0を加えて、例えば、Cute puppies of loveのFeatureベクトルx(3)は下記のように表せます。
また、各ユーザーの評価を予測するために、各ユーザーのパラメータベクトルθ(1), θ(2), ... , θ(j)を学習する必要があります。例えば、Aliceのパラメータθ(1)が既に下記のように得られていたとして、AliceのCute puppies of loveの評価を予測するために、x(3)とθ(1)を掛け合わせ、4.95の評価が得られると予測できます。
この後コンテンツベースリコメンデーションのアルゴリズムを説明するにあたり、必要な項目を下記のように定義、整理します。
パラメータθ(j)を求める方法としては、Linear regressionと同様に考えれば良く、下記のコスト関数で求めることができます。ここで、i:r(i, j)=1とは、r(i, j)=1となる(ユーザーが映画の評価を行っている)全てのiに対して総和を取るという意味です。
また、実際には、1人のユーザーjに対するパラメータを求めるのではなく、全てのユーザーのパラメータを学習する必要があるため、ユーザーの総数をnuとして、コスト関数は、下記のように書き換えることができます。
Gradient descentについては、下記のように計算することができます。
以上が、コンテンツベースリコメンデーションのアルゴリズムで、各ユーザーの映画への評価を予測することができます。しかしながら、この方法は、映画のコンテンツ(どのくらいロマンチックなのか、アクションなのかが定義されたフィーチャー)が分かっている前提のアルゴリズムです。この後、そうでない場合のアルゴリズムについて説明していきます。
Collaborative filtering
Feature含めて学習する方法として、Collaborative filtering(協調フィルタリング)について学びます。
まず、各映画のFeature x1、x2が下記のように不明な状態であり、一方で、各ユーザーの好みは把握することが出来ていて、パラメータθが分かっている状態だと仮定します。
この場合、映画iのFeatureは、コンテンツベースリコメンデーションの時と同様に下記のコスト関数で求めることができます。
また、全ての映画についても、同様に下記のコスト関数で求めることができます。
つまり、パラメータθが分かっていれば、Feature xを求めることができ、Feature xが分かっていれば、パラメータθを求めることができます。最初にランダムにパラメータθの値を推測しておき、θ → x → θ → x → θ ... と繰り返すことで、リーズナブルなパラメータとFeatureに収束させることができます。これが協調フィルタリングのアルゴリズムの考え方です。ちなみに、これが可能なのは、各ユーザーが複数の映画をレーティングしていて、全ての映画が複数のユーザーにレーティング場合のみとのことです。
θとxを行ったり来たりしながら解いていくと記載しましたが、より効率的な方法として、下記数式のように、2つのコスト関数を合わせてしまうことも可能とのことです。
協調フィルタリングを利用する際には、下記のように進めます。
- x(1), x(2), ... , x(nm)とθ(1), θ(2), ... , θ(nu)を小さな値でランダムに初期化
- 下記のGradient descent、もしくはその他の最適化アルゴリズムを用いてコスト関数Jを最小化
- θとxを用いて、映画の評価を予測(θTxを計算)
プログラミング演習
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を実装します。Week4、Week5の記事を読んで、より深く理解したいと思った人におすすめです。
Kaggleで勝つデータ分析の技術
データ分析について学び始めた人におすすめです。