暇人日記

アラフォーおっさんのコーセラの機械学習の課題を解こうと頑張っています!

Coursera Machine Learning Week8 課題 苦闘日記④

今回も↓の課題に取り組みます。

 

f:id:omoshiroamericanews:20191121104447p:plain

 (出典;『Coursera Machine Learning』 By Mr. Andrew Ng)

 

①idxが1のときにはXはそのままで

 idxが=2と3のXの要素は0にさせて、

②縦行ごとに平均をとろうという作戦でした。

 

まず①の実験です。

f:id:omoshiroamericanews:20191122011233p:plain

 

結果です。

f:id:omoshiroamericanews:20191122011412p:plain

うまくいきました

 

続いて②の平均をとります。

mean(X)としました。

 

f:id:omoshiroamericanews:20191122011854p:plain

 

正解は前回の日記のとおり、これ↓なのですが、一致しませんね。。。

[ 2.428301  3.157924 ]<--コレ

[ 5.813503  2.633656 ]

[ 7.119387  3.616684 ]

 

ただ、mean(X)は合計数/300としている気がします。

本当は合計数/1の数 にしたいので、もう少し検証します。

 

1の数はWeek3で出てきたposを利用します。

f:id:omoshiroamericanews:20191122012838p:plain

これで1になっているidxだけ引き出せるので、

size(pos=find(idx==1),1)とすると191あることがわかりました。

 

続いてSum(X)すると463.81 603.16が出てきます。

これを191で割ると2.4283   3.1579!

正解になりました!

 

ではプログラムの式にしていきます。

まずはカテゴリー1の計算の完成を目指します。

 

f:id:omoshiroamericanews:20191122013556p:plain

これで2.4283   3.1579の結果が出ました。

 

これをカテゴリー2/3にするにはKのループがよさそうです。

 

Kの1-3のループの中に1-300のループが欲しいです。

そして平均値の計算は1-300のループが終わった後がいいです。

ということでこうしました。

f:id:omoshiroamericanews:20191122015512p:plain

 

答えもばっちりです!

f:id:omoshiroamericanews:20191122015617p:plain

ここでcomputeCentroids.mを完成させにかかります。

computeCentroidsはX,idx,Kを変数としてcentroidsを計算する関数でした。

meanの代わりにcentroidsを入れます。

 

ただこれだと履歴取り出しにはならず,

centroidsは計算が最後のK=3のときだけが出てきます。

 

なのでK=1~3のループで出てくる回答をcentroid,

履歴で複数重なったものをcentroidsとして

↓のようにしました。

 

f:id:omoshiroamericanews:20191122105439p:plain

 

Error↓がでました。

 

f:id:omoshiroamericanews:20191122105813p:plain

K=1のときのcentroidはできましたが、centroidsにするときに、

1X2であることが問題になっているようです。

 

これはfindclosestcentroidsの課題の時も、Week7の64通りシュミでも

苦労したところです。

 

どうやら

XX(i)=△△

で履歴を取り出す技はどうやら△△が1x1でないとだめなようです。

 

△△が1X3で取り出した実践例はWeek7の64通り取り出しになるので

こちらでTryします。

 

Week7の実践例のまとめはこちらでした。

f:id:omoshiroamericanews:20191122110244p:plain


 一つ問題に気づきました。

centroidsは

centroids = zeros(K,n)

と決定されていました。(回答者は変更不要とされている領域でこうなっています)

 

なので、centroids=にしない方向でいったんすすめます。

 

f:id:omoshiroamericanews:20191122110437p:plain

 

結果です↓。

f:id:omoshiroamericanews:20191122111029p:plain

 

最初の0の3セットがなければ成功ですね。

これはcentroids = zeros(K, n);からきているので、

この部分を削除してみます。

そーすると、0の3セットが消えてうまくいくかもしれません。

 

f:id:omoshiroamericanews:20191122111245p:plain

ダメでした。

 

やはりcentroids=にした方が良さそうです。

 

f:id:omoshiroamericanews:20191122111502p:plain

うまくいきました!

 

この次のK-means example on dataseは

コードが用意されていたのでそのままできました。

なるほどーこーやって動いていくんですね。

f:id:omoshiroamericanews:20191123005525p:plain

 

次のRandom Initializationも問題文に答えが書いているので、

これを↑のグラフに足してどうなるかをみてみます。

確かに最初の場所が変わったので、違う絵になりました!

f:id:omoshiroamericanews:20191123011540p:plain

 

今回はここまでです。また次回頑張ります!