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

coursera

8週目の内容はk平均法(k-means)と主成分分析(PCA)に関する内容でした。課題は、前半でk-means、後半でPCAを扱っています。k平均法と主成分分析に関しては別の記事にまとめているので、興味のある方はご参考にしてください。

課題1:findClosestCentroids

この課題では、すべての学習データを最も近い”centroid”に基づいてクラスターに分けます。

「最も近いcentroid」は以下の式を最小にするcentroidです。

\( || x^{(i)} – µ_j ||^2 \)

この課題では、それぞれの学習データ(X)に対する最も近いcentroidのインデックス(idx)を取得します。

課題2:computeCentroids

続いて、あるcentroid kに割り当てられた学習データ(Ck)の平均値(µk)を以下の式で求めます。

\( µ_k := \frac{1}{|C_k|}\sum_{i{\in}C_k}x^{(i)} \)

例えばx(2)と x(5) がcentroid 2に割り当てられた場合、その平均は以下のように計算できます。

\( µ_k := \frac{1}{2}(x^{(3)} + x^{(5)}) \)

課題1と課題2を実装してrunすると、下の図が表示されます。それぞれのイテレーションごとにどのようにcentroidが移動しているのかを見ることができます。

課題3:kMeansInitCentroids

この課題のソースコードはex7のpdfに記載するものをコピペすればOKです。

最初のcentroidを以下のような手順で、ランダムに決める作業を行っています。

  1. 学習データをランダムに並べ替える
  2. 並び変えた後の学習データの最初のK番目までをcentroidの初期値とする

octaveのrandpermに関しては以下の記事を参考にしてください。

Mathworkds ドキュメンテーション|randperm

補足:画像データの圧縮

上で作成したコードを用いて、画像データの圧縮をします。画像サイズは128×128です。k-means algorithmで、画像に使われる色を16色まで減らすと以下のようになります。

課題4:pca

ここからはPCAの内容に移ります。以下のような2Dのデータセットを1Dに変換することで、学習データを256次元から50次元まで削減します。

まず、下の式に従って、データセットの共分散(covariance)を取ります。

\( \Sigma = \frac{2}{m}X^TX \)
  • m:学習データ数
  • X:学習データ

続いて、Octave/MATLABのSVD関数を使って固有ベクトル(U)を求めます。Octave/MATLABのSVD関数については以下のサイトを参考にしてください。

特異値分解 – MATLAB svd – MathWorks 日本

上の図のように、主成分がプロットされます。

課題5:projectData

課題4で得た主成分Uの始めのK個を新たに主成分とします。この主成分に学習データのベクトルを掛け合わせることで、主成分への射影を得ることができます。

課題6:recoverData

最後に、主成分に射影したデータZの各要素を、元の画像データの場所に反映させます。

補足:画像データのPCA

上で作成したPCAのコードを画像データに応用します。元画像は32×32=1024次元の顔写真です。これをPCAにより100次元まで、次元の削減をすると以下のようになります。

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