今回は課題と課題の間にあるoptionalに取り組みます。
2Dセットに慣れたら画像でクラスタリングをやってみよう!と問題文の
冒頭にありましたがその通り画像での演習が載っています。
(出典;『Coursera Machine Learning』 By Mr. Andrew Ng)
色数を256色から16色へ落とし込んでのData圧縮をクラスタリングで
行うという主旨のようです。
Original Dataはbird_small.pngなのでこれを読み込みます。
問題文にある通り、
A=imread(’bird_small.png')とすると
おぉ、3次元!?
3次元はこのコースで初な気がします。
どのようにOctaveで表現されるかというと、
3つ目の要素は1の時、2の時、3の時と固定して
128X128で表現していました。
例えば(50,25,3)のような情報は
最初の2つは場所を示し、最後の一つは1,2,3が赤、緑、青をそれぞれ示す、
ということです。
ここから課題プログラム全体版を読み解いていきます。
(出典;『Coursera Machine Learning』 By Mr. Andrew Ng)
doubleの意味って何だろう?
さっきimreadで読み込んだものと比較したのが下です。
依然、doubleの意味はよくわかりません。
sizeは128X128X3の3次元は同じですね。
続きの部分です。
(出典;『Coursera Machine Learning』 By Mr. Andrew Ng)
結果、Xは16384X3のベクトルになっていました。
なので
X=reshape(A,128x128=16483,3)でXは16384X3のベクトルになった模様です。
Xの最後の方の部分です。
reshapeされても
『最初の2つは場所を示し、最後の一つは1,2,3が赤、緑、青をそれぞれ示す』
のでしょうか?
一番右の列はAの3(青)のときの128行目の最下部と同じでした。
真ん中の列はAの2(緑)のときの128行目の最下部と同じでした。
違いますね。
このXの読み取り方は
青の(1.1)の濃さは0.457778と言っている
RowNo.ColumnNo.自体が場所を示していると思います。
それではプログラムを実行させてみます!
大きな問題にぶち当たりました。
プログラムを実行させたところ、40分たっても絵が描かれません!!!
2Dセットの300X2でも2-3分はかかっていたのですが、
データ量が増えて格段に時間がかかるようになってしまったようです。
findclosestcentroidsではloopではなくvectorizationした方が早いという
コメントがあったのでそれにトライします。
と思いましたが、CourseraのDiscussion Forumで
メンターのコメントを見たところ、ベクトルにしても
Single Loopは発生して劇的には改善しないということです。
どうやら私のPCスペックではダメだったようです。
諦めます。
次回は次の課題に取り組みます。