cousera Machine Learning で自分が詰まったところメモ

#はじめに
2週間ほど前からcouseraでMachine Learningを受講しています。

なにそれ？って方向けには既に色々なところで[紹介されている](https://www.google.co.jp/search?ei=SyZCW_WICcqk0gTQnJvoCw&q=coursera+machine+learning&oq=+Machine+Learning&gs_l=psy-ab.3.3.35i39k1j0i7i30k1l7.2258.2258.0.5064.1.1.0.0.0.0.93.93.1.1.0....0...1c.1.64.psy-ab..0.1.93....0.R1GhNEvWVAU "紹介されている")ので割愛しますが、
今カリキュラム通り2週目を終えて(プログラミング課題をぎりぎりに提出し、)
これは気付きをアウトプットしておかないとまずいなと思いましたので書くことにしました。

※プログラミング課題について答えをそのまま書くことはしませんが自分で気付くことが大事な要素もかなりあると思いますので、受講中の方は閲覧注意でお願いします。

※おかしな内容ありましたら、コメントいただけると大変うれしいです。

#１週目
ここは講義内容も課題も優しかったので難なくこなせた。

#２週目
プログラミング課題で結構忘れている内容があってビデオを行ったり来たりしたのでそこを中心に。

##Computing the cost J(θ)

### __見直したビデオ__

第１週：__Model And Cost Function__ Cost Function
第１週：__Parameter Learning__ Gradient Descent For Linear Regression
第２週：__Multivariate Linear Regression__ Multiple Features
第２週：__Multivariate Linear Regression__ Gradient Descent for Multiple Variables

### __覚えておくこと__

### ・コスト関数の導き方###

```math
h_θ(x) = θ^T x
```
と置くことができるので、
 
```math
J(θ) = \frac{1}{2m}  \sum_{i=1}^m( h_θ(x^{(i)} ) − y^{(i)})^2
```
の

 ```math
( h_θ(x^{(i)} ) − y^{(i)})^2
```
は下記のようにおくことができる。(ループのたびに入ってくるθが更新される前提)

```math
( θ^T x　-y)^2
```
Octaveで下記のように書ける

```Octave:computeCost.m
(X*theta - y).^2
```
(↑ふと思ったが$θ^T$って$theta'$なのでは・・・？要復習)

### ・Σ計算について

sum()で一発



##Gradient descent

### __見直したビデオ__

第１週：__Model And Cost Function__ Model Representation
第１週：__Model And Cost Function__ Cost Function
第１週：__Parameter Learning__ Gradient Descent For Linear Regression
第２週：__Multivariate Linear Regression__ Gradient Descent for Multiple Variables

### __覚えておくこと__

### ・計算順

```math
\sum_{i=1}^m( h_θ(x) ) − y)^2*x
```

の計算を

```math
(\sum_{i=1}^m( h_θ(x) ) − y)^2)*x
```
とやっていておかしかった。ただのアホ。正しくは下記

```math
\sum_{i=1}^m(( h_θ(x) ) − y)^2*x)
```

### θの更新タイミング
下記は同時更新なので、θは一時的に変数に控えて置くなどして変わらないようにしないとダメ。

```math
θ_0:=θ_0−α\frac{1}{m}\sum_{i=1}^m(h_θ(x_i)−y_i)
```
```math
θ_1:=θ_1−α\frac{1}{m}\sum_{i=1}^m(h_θ(x_i)−y_i)x_i
```

意識はしていたのだが2個目の式の右辺側の$θ_1$を普通にthetaにしてしまっていて収束しなかった。

###・　.* と　*　の違い
どこかのビデオでやったのかもしれないが忘れてしまっていて混乱した。
* で掛け算をすると、行列同士では普通の行列の計算になるが、
.*で掛け算すると同じマス同士がかけられたものが出力される。

```Octave:computeCost.m
>> A = [1 2 ; 3 4 ]
A =

   1   2
   3   4

>> B = [5 6 ; 7 8]
B =

   5   6
   7   8

>> A * B
ans =

   19   22
   43   50

>> A .* B
ans =

    5   12
   21   32
```

#３週目
テスト：Logistic Regression
→問２、問４が難しくて何回も間違えた。要復習

### __見直したビデオ__
第３週：__Logistis Regression Model__ Simplified Cost Function and Gradient Descent
第３週：__Solving the Problem of Overfitting__ Regularized Logistic Regression

### __覚えておくこと__
今週は慣れてきたのか、課題が簡単だったのか、先週に比べるとずっとスムーズにクリアできた。
costFunctionRegについてはtheta(1)を除外するを忘れててsubmit関数に怒られた。
こういうありがちなミスに対してはちゃんとコメント返してくれるのはとてもいいなと思った。

#４週目
有名な手書き数字をニューラルネットワークを使って予測してみようを実装してみるやつ。

### __見直したビデオ__
第４週：__Neural Networks__ Model Representation II
その他、フォーラムを見まくってしまった

### __覚えておくこと__
### oneVsAll
y == c　←これすごいなと思った。

### predictOneVsAll
何をすればいいのかさっぱりわからなくて詰まってしまった。
θとX(入力値)を使ってやることといえばひとつしかないんですかね。

### max()の使い方
戻り値が二つあるということがフォーラムと、helpに書いてあった。
第一戻り値(でいいのか？)が実数値で、第二戻り値がそのインデックス

### predict
sigmoid(Theta1 * a1')としていて1時間くらい詰まったただの間抜け
実装方法は問題文のpdf参考。

### バイアスユニットの足し方
1の配列を一番左に追加する。onesを使う

#５週目
Backpropagationの実装。めちゃくちゃ難しくてあまり理解できなかったので復習したいが、
時間が取れず。。。まとめすらまともにできてない。。。


#６週目
モデル選択の方法について。
１週目以来の目からうろこで、重要度がかなり高いように感じた。
復習したいが、プログラミング演習終わった時点でまだ後半のビデオが残っていて、あと１時間３分で期限が終わってしまうのでいったんメモだけ。(まあ、期限切れたところでどうということはないのだが。。。)

★要整理
learningCurveとvalidationCurveで使うパラメータの違い

#７週目
SVMについて。聞いたことはあったけどロジスティクス回帰などとどう違うのかはわからなかったので
勉強になる・・・と思いきや、ビデオの内容についていくのがやっとで内容はかみ砕けませんでした。
(仕事が忙しく土曜の午後からビデオを見始めたのもひとつの要因か。。。)

半面、プログラミング課題は一部を除きかなりスムーズにできた。
後半のメールの単語のベクトルをとる奴なんかは見たことあったけど、多分課題でいじったとこ以外のところもちゃんと見とかないと理解が十分とは言えないと思ったので、復習ポイントにしたい。

★復習
ex6_spamの処理をトレースする

★言いたいこと
modelの作り方どっかにかいとけ、PDFに書いとけ