courseraのmachine learning week3までを受けて
正直難しくて辛いですね。
↑で数学を避けてきた~~の記事ですごくオススメされているので始めたのですが、
確かに日本語字幕は付いているし、わかりやすいとは思います。
でもテストの文章は英語ですし、プログラミング課題の説明のPDFも英語だし、正直とっつきにくいし、なんとなく理解はしてもなんとなくだから応用っぽくなるとついていけなくなって積む。
だから本当に何回も同じやつ見たし、記事で最終的に必要なのは「鉄の意志」って書かれていた理由がわかりましたわ。
理解したと思っても、プログラミング課題になると???ってなるし、つらい。
オクターブのコーディング難しいよーー
これが僕個人としての感想です。
学習メモの記事とか見ながら講座みると少し良かった。
というわけで、プログラミング課題でちょっと詰まった所メモ。
Coursera/Machine Learning/Week 2/machine-learning-ex1/ex1 at master · tjaskula/Coursera · GitHub
答えはgitに何個かあるのでみながらやっていました。
まずは線形回帰
(X * theta)の部分は
で洗わせられるから。
なぜ転地してるかで初め悩んだ~
初めに詰まったのがなぜ転地しているかのところですかね。
なぜXのところで、転地しているかですこし考え込みました。
ただ単に転地しないと行列の計算ができないというだけでしたね。
行列の掛け算の動き的に、
ex2の最後の正規化したロジスティック回帰の公式のコーディングの問題での他サイトの答えが、
このgitではこうなっていて
coursera Machine Learning ex2 - Love_Tea_Cat的专栏 - CSDN博客
このサイトではこうなっている。
.をつけることによって、行列の各要素で計算できるようにしてたところですかね。
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になるっぽい。
coursera Machine Learning ex2 - Love_Tea_Cat的专栏 - CSDN博客
このサイトの
これがわかりやすいですね。
sigmoid(X * theta)の中身が
こうだから、0.5以上は1、それ以外は0にする。
costFunctionReg.m
ex2のcostFunctionReg.mの
mask = ones(size(theta));
mask(1) = 0;
grad = 1 / m * X' * (sigmo - y) + lambda / m * (theta .* mask);
この人の答えのmaskのところなんでこんなことしているのかと思ったら、
慣例でシータの0は省かれるから、thetaの数でコピーして、一番最初だけを0にしてただけだった。
基本は公式をコーディングしていく問題なので、ex2まではまぁ出来ましたわ。
オクターブ難しい。
X' * (sigmo - y) も (Hx - y)' * X も同じことで、ただ行列で計算するためにどっちか転地しなきゃだめというそれだけのことだったのですよね。
これだけのことで、悩んじゃいましたよ。
他に詰まったところとして、
sigmoid.m
ex2のsigmoid.mの