【機械学習】Octaveの制御構文【Coursera】-その8-

2019年7月27日

Courseraで受講している機械学習について、勉強したことをアウトプットしていこうと思います。
あくまでも自分用となるので、もっと詳しく知りたい人は是非受講してみてください。

さて、今回は制御構文と関数についての実装方法をやっていきましょう。

for文

独特な書き方ですが、iに1から10までの数字を入れて処理していますね。
indicesを利用しても同様の処理ができます。

while文とif文

whileも同じような書き方です。
直感的にもわかりやすいですね。
ではもう一つ。
これはwhile trueとif文を利用した記載方法です。

関数

これが関数の書き方になります。
ついでにこの関数は目的関数を再現しています。
引数がX,y, thetaとなっていて、戻り値がJです。

おさらいですが、目的関数は以下のとおりです。

J(θ1) = 1/2m Σm, i=1(hθ(x(i)) – y(i)²

これで大まかな制御構文と関数の書き方がわかりました。
ここからはベクトルの作成についてです。

ベクトル化

ベクトルについてですが実際にプログラムを書く際には1から作成するのではなく、
ライブラリを利用して作成していきます。
そうしたほうが書く量は減り、バグも比例して減ります。

それでは見ていきましょう。
以下はいつもの線形代数の仮説関数です。

このθとxを計算する方法は2つあります。
1つ目は非ベクトルの方法で、for文を利用した方法です。

prediction = 0.0;
for j = i:n+1;
  prediction = prediction + theta(j) * x(j)
end;

これは単純にfor分で値を取り出し、thetaとxを乗算しているだけの処理です。
次にベクトルを利用したときの実装方法です。

prediction = theta' * x

これだけです。[‘]は転置を行うための記号です。
転置を行い、内積を出せば終わりです。

今回は以上です。
とうとう、今まで覚えてきた関数をコードで実現する段階まで来ました。
次回は今までの授業を覚えてるかのテストを行います。
これは記事にはしては行けない気がするので記事にはしません。

それではまた。