courseraのmachine learning week3までを受けて

正直難しくて辛いですね。

qiita.com

↑で数学を避けてきた~~の記事ですごくオススメされているので始めたのですが、

 

確かに日本語字幕は付いているし、わかりやすいとは思います。

でもテストの文章は英語ですし、プログラミング課題の説明のPDFも英語だし、正直とっつきにくいし、なんとなく理解はしてもなんとなくだから応用っぽくなるとついていけなくなって積む。

だから本当に何回も同じやつ見たし、記事で最終的に必要なのは「鉄の意志」って書かれていた理由がわかりましたわ

理解したと思っても、プログラミング課題になると???ってなるし、つらい。

オクターブのコーディング難しいよーー

これが僕個人としての感想です。

 

 

学習メモの記事とか見ながら講座みると少し良かった。

 

forgetzimbnot.com

 

qiita.com

というわけで、プログラミング課題でちょっと詰まった所メモ。

 

Coursera/Machine Learning/Week 2/machine-learning-ex1/ex1 at master · tjaskula/Coursera · GitHub

coursera-machine-learning/machine-learning-ex1/ex1 at master · benoitvallon/coursera-machine-learning · GitHub

答えはgitに何個かあるのでみながらやっていました。

 

まずは線形回帰

J = 1 / (2 * m) * sum(((X * theta) - y).^2);

(X * theta)の部分は

f:id:alakialaca:20170730235841j:plain

で洗わせられるから。

f:id:alakialaca:20170731000314j:plain

 

 

なぜ転地してるかで初め悩んだ~

初めに詰まったのがなぜ転地しているかのところですかね。

最急降下法のところで、

 

theta -= alpha * (1 / m) * (X' * *1

 

なぜXのところで、転地しているかですこし考え込みました。

ただ単に転地しないと行列の計算ができないというだけでしたね。

行列の掛け算の動き的に、

f:id:alakialaca:20170731004159j:plain

 

ex2の最後の正規化したロジスティック回帰の公式のコーディングの問題での他サイトの答えが、

coursera-machine-learning/machine-learning-ex2 at master · benoitvallon/coursera-machine-learning · GitHub

このgitではこうなっていて

 

grad = 1 / m * X' * (sigmo - y) + lambda / m * (theta .* mask);

 

coursera Machine Learning ex2 - Love_Tea_Cat的专栏 - CSDN博客

このサイトではこうなっている。

grad = 1/m * *2

 .をつけることによって、行列の各要素で計算できるようにしてたところですかね。

 

predict.m

 predict.mの答えが

machine-learning-coursera-1/predict.m at master · Borye/machine-learning-coursera-1 · GitHub

 

p = sigmoid(X * theta)>=0.5 ;

これになっているのにちょっと戸惑った。

ちゃんと調べてないけど、この書き方で0.5以上なら1、以下なら0になるっぽい。

1が真、0が偽ってやつかな。

coursera Machine Learning ex2 - Love_Tea_Cat的专栏 - CSDN博客

 このサイトの

Hx = sigmoid(X * theta); 

for iter = 1:m 

  if Hx(iter) >= 0.5  

    p(iter) = 1;

  else  

    p(iter) = 0; 

  end; 

end; 

 

これがわかりやすいですね。

sigmoid(X * theta)の中身が

f:id:alakialaca:20170803214136j:plain

 

こうだから、0.5以上は1、それ以外は0にする。

 

costFunctionReg.m

ex2のcostFunctionReg.mの

coursera-machine-learning/costFunctionReg.m at master · benoitvallon/coursera-machine-learning · GitHub

 

mask = ones(size(theta));

mask(1) = 0;

grad = 1 / m * X' * (sigmo - y) + lambda / m * (theta .* mask);

 

 

この人の答えのmaskのところなんでこんなことしているのかと思ったら、

慣例でシータの0は省かれるから、thetaの数でコピーして、一番最初だけを0にしてただけだった。

f:id:alakialaca:20170802204830j:plain

 

基本は公式をコーディングしていく問題なので、ex2まではまぁ出来ましたわ。

オクターブ難しい。

 

 

 

 

 

*1:X * theta) - y

*2:Hx - y)' * X) + lambda/m * theta';

 

 X' * (sigmo - y) も (Hx - y)' * X も同じことで、ただ行列で計算するためにどっちか転地しなきゃだめというそれだけのことだったのですよね。

これだけのことで、悩んじゃいましたよ。

 

他に詰まったところとして、

 

sigmoid.m

 

ex2のsigmoid.mの

 

g=1./(1+exp(-1*z