【Coursera機械学習】week9の課題のまとめと勉強したことのメモ

coursera

9週目の課題では、前半で異常検知(anomaly detection)、後半でレコメンダシステム(Recomender Systems)に取り組みます。

課題1:estimateGaussian

概要

課題1と課題2ではサーバコンピュータの異常検知を行います。

「サーバの処理能力(throughput)」と「レイテンシ(latency)」(※ CPUなどがデータの要求をしてから、実際にデータが転送されるまでの時間)により、サーバのふるまいを評価します。

処理能力を縦軸、レイテンシを横軸にとりデータをプロットすると以下のようになります。

ガウス分布

ガウス分布は以下の式で表されます。

\( p(x;µ,\sigma^2) = \frac{1}{\sqrt{2π\sigma^2}}e^{-\frac{(x-µ)^2}{2\sigma^2}} \)

下の図のように、ガウス分布は左右対称な確率分布になります。ここで、µは分布の平均値を表します。また、σ区間(-σからσまでの区間)にデータの68 %が分布するようになっています。

この課題では、データの特徴量(処理能力とレイテンシ)それぞれに対して、ガウス分布のパラメータであるµとσを求めます。

i番目の特徴量(処理能力またはレイテンシ)に対するガウス分布のµおよびσは以下の計算式で推定することができます。ここで、mはデータ数を表します。

\( µ_i = \frac{1}{m}\sum_{j=1}^mx_i^{(j)} \)
\( \sigma^2 = \frac{1}{m}\sum_{j=1}^m(x_i^{(j)} – µ_i)^2 \)

これをoctaveで書くと以下のようになります。

octave/MATLABのvar関数はデフォルトで、データ数-1で正則化します。そのため、varの第二引数を-1にして、データ数で正則化するように設定します。

分散 – MATLAB var – MathWorks 日本

課題2:selectThreshold

異常検知のアルゴリズム

以下の式で定義されるp(x)を定義します。

\( p(x) = p(x_1;µ_1,σ_1)p(x_2;µ_2,σ_2)….p(x_n;µ_n,σ_n)\)

今回の課題の例では、特徴量は処理能力(threshold)とレイテンシ(latency)の2種類なので、p(x)は以下のようになります。

\( p(x) = p(x_{threshold};µ_{threshold},σ_{threshold})p(x_{latency};µ_{latency},σ_{latency})\)

このp(x)は、それぞれのデータに対して計算し、学習データの数分用意されることになります。

ここで、p(x)が閾値εより小さい場合は異常、閾値ε以上の場合は正常と判別されます。

\( p(x) < ε : anomaly\)

F1 socore

正しいεを決めるために、分類精度をF1 scoreで評価します。F1 scoreはprecisionとrecallにより以下のように定義されます。

\( F_1 = \frac{2 * prec * rec}{prec + rec}\)

precisionおよびrecallは以下のように計算します。

\( prec = \frac{tp}{tp+fp}\)
\( rec = \frac{tp}{tp+fn}\)

課題3:cofiCostFunc

概要

課題3からはリコメンダシステムに関する内容を扱います。ここでは、映画のレーティングを例に、ユーザーにおすすめの映画を提案するプログラムを作成します。

ユーザーはそれぞれの映画に対して1から5までの5段階で評価をします。すべての映画を評価しているわけではないので、計算を行うときには、評価している映画のみを考慮します。

ユーザー数は944、評価する映画の種類は1682です。また、行列Rは映画の種類×ユーザー数となっており、評価された場合は1、評価されていないあ場合は0を格納しています。

強調フィルタリングのアルゴリズム

強調フィルタリング(Collaborative filtering learning algorithm)はユーザーのレーティング情報を蓄積し、あるユーザーと似た嗜好性を持つ他のユーザーのレーティング情報をもとに、おすすめの商品を提示するアルゴリズムです。

レーティング(y)の推定は、映画の特徴量xとユーザーごとのパラメータθを用いて以下のように計算できます。

※ movie(i)に対するuser(j)のレーティング

\( y^{(i,j)} = (\theta^{(j)})^Tx^{(i)}\)

この課題では、強調フィルタリングのコスト関数(J)と勾配を求めますそれぞれの以下の式で計算できます。

\( J = \frac{1}{2}\sum_{(i,j):r(i,j) = 1}((\theta^{(i)})^Tx^{(i)}-y^{(i,j)})^2+(\frac{λ}{2}\sum_{j=1}^{n_u}\sum_{k=1}^{n}(\theta_k^{(j)})^2)+(\frac{λ}{2}\sum_{j=1}^{n_m}\sum_{k=1}^{n}(x_k^{(i)})^2)\)
\( \frac{\partial J}{\partial x_k^{(i)}} = \sum_{(i,j):r(i,j) = 1}((\theta^{(i)})^Tx^{(i)}-y^{(i,j)})\theta_k^{(j)}+λx_k^{(i)}\)
\( \frac{\partial J}{\partial \theta_k^{(j)}} = \sum_{(i,j):r(i,j) = 1}((\theta^{(i)})^Tx^{(i)}-y^{(i,j)})x_k^{(i)}+λ\theta_k^{(j)}\)

課題3で使われる変数は以下の通りです。

  • R(i, j):user(j)がmovie(i)を評価していれば1、していなければ0
  • y(i, j):movie(i)に対するuser(j)の評価
  • θ:userのパラメータ→934×10
  • x:movieの特徴量→1682×10

Rと掛け合わせることで、評価された値だけが計算に使われるようになっています。

タイトルとURLをコピーしました