まどかの戯言集

美しく、生きたい。

Machine Learning week 2でわからなかった「cost function」の実装がやっと理解できたので纏めておきたい。

教養としての機械学習

数学を避けてきた社会人プログラマが機械学習の勉強を始める際の最短経路」というパワーワードに押され、数学を避けてきた僕も新しいMacを買ったことだし、教養として、機械学習をしっかり勉強しようと思い上記の記事の手順通りに勉強を再開したのが先々週。順調にCourseraの動画を見ながら勉強を進めています。

www.coursera.org

Courseraでは海外の有名な様々な大学の様々な授業をオンラインで受講することができます。中には無料のものもあり、今回僕が受講しているものも無料です。データサイエンティストを目指している人向けの授業や機械学習等高度な理系の知識を求められる授業からビジネス関連のものまで。基本英語での授業ですが字幕で日本語がつく講座もあります。

f:id:s-a-o-t-o-m-e:20170306175543p:plain

専用のスマホアプリが用意されており、各講座の動画や資料をアプリ内にDLできるので通勤途中や電波の届かないところでもチェックできるのは優しい設計ですね。僕は基本的にPCと大学ノートを広げながら講座を受けているのでiphoneには講座のPDFをibook経由でPCから送っているのでそれをPCが手元にない時にチェックするようにしています。

僕はスタンフォード大学のAndrew Ng先生が講師をつとめる「Machine Learning」のコースを受講しています。行列計算あたりで上に紹介した記事でも言われているように、僕も予想通りに躓いたので、つられて紹介されている本も購入。そして順調にWEEK 2まで終わらせたのが 2017/3/5(Sun)!

この記事では

WEEK2でなかなか理解が出来なかった「目的関数(const funciton)」を「octave」の実装に落とし込んだ時にどうしてそのような実装になったのか?

を自分用のメモとして残しておきます。基本的には数学、行列計算の話なのでちんぷんかんぷんな人はこの記事でも読んでおいてください。

実装

cost function

function J = computeConst(X, y, theta)
  m = length(y);
  prediction = X * theta;
  
  sqrErrors = (prediction - y)  .^ 2;

  J = (1/2 * m) * sum(sqrErrors); % 下のやつと、どっちでもOK
  J = (1/2 * m)  * (X * theta - y)' * (X * theta - y); % vectorized version

end

ここでどうして、こうなるのかわからなかったが・・・

まとめるとこうじゃ。

まとめ

式をmarkdownで書くのが面倒だったのでノートの写メってアップしただけというとても手抜きなまとめです。

本当に個人用のメモになってしまったけれど、やっぱり楽しいですね。しっかり全て完了させて機械学習の基礎知識を身に着けたいところです。