この記事は何
途中まで進めて5年くらい放置していた couseraの「Machine Learning」コースを修了するまでの学習メモです。
※規約上講義内容そのものや課題の解答は載せていないので、コースの具体的な内容は講義動画をみてください。
始めるきっかけ
courseraは2013年からあるサービスで、Andrew Ng先生の「Machine Learning」コースは当初から存在します。
実は、おそらく2015~2016年の間にこの講義の動画をほとんど見て、それからずっとcourseraにログインせず放置していました。 先日courseraログイン時に、「Machine Learning」がほとんど修了している状態で放置されていたことに気づいたので、せっかくだし修了して修了証をもらっておこう!ということで所々手付かずで放置されていた動画と課題に取り組みました。
これから始める方は、このコースに限らずAmazonやIBMが用意しているコースを受けてみるのもいいと思います。
ちなみに当初はcouseraではない別のページで以下の動画に近いものをみていました、ヘッダーが赤色のページ、黒板は緑色でチョークで板書していた記憶があります。
メモ
プログラミング課題の提出方法
基本的にはOctaveでコードを書き、同梱されている submit.m
を実行して提出。Octave GUI経由の場合は submit.m
を実行してから Command Windowに移動して、そこでメールアドレス とトークンを入力することで提出できます。
week1~week5
全ての講義を修了済にしていたためメモなし。 これ以降も一部のプログラミング課題をのぞいて修了済になっていたのですが、復習もかねて視聴。
week5: 誤差逆伝搬
- ループの書き方:GNU Octave: Ranges
- 行列の書き方:GNU Octave: Matrices
- 行列の基本操作:Matrix Operations in Octave
Lecture5の課題は誤差逆伝搬と学習アルゴリズムをoctaveで実装するというもの、おそらく冒頭では一番面倒な課題。ただ、課題の内容よりもMacでのOctaveGUIの不安定さの方に悩まされる...。講義の内容を忘れたとしても課題ページの「Lecture9.pdf」がわかりやすく書かれておりすぐに内容を思い出せました。
ランダムな数値で行列を作成する (rand) | まくまくOctaveノート
Random Number Generation (GNU Octave)
コードを書いた後、submit.m
を実行し、メールアドレス とトークンを記入すると課題を送信できます。うまくいくと以下のような表示がコマンドラインに出力されます。
week6: 正則化ありの線形回帰
- 式が長くなる時は
...
で改行:GNU Octave: Continuation Lines - 値の代入(コピー): Miscellaneous Techniques (GNU Octave)
- numel: 配列の要素数 - MATLAB numel - MathWorks 日本
Note that you should not regularize the θ0 term.
の点のみ注意する。
week7: SVM
SVMの動画の一部はoptionalの動画(見なくてもコースは修了にできる)。kernel II の講義のみ日本語字幕がありません。 課題のSVMの訓練が毎回数分かかるのでちょっと課題が面倒でした。
www.slideshare.net
- カーネルトリック:非線形空間φにて計算を行って識別関を求めず内積で識別関数を構成する方法
- SVMでxとyの関係が非線形でも良いように、非線形関数φを使ってxを変換する
- SVMの式ではφ(x1)φ(x2)Tのような(二つのサンプルの間の類似度を見る式)の形しか出現しない
- [φ(x1)φ(x2)T] = カーネル関数
- matlab, sort:配列要素の並べ替え - MATLAB sort - MathWorks 日本
- GNU Octave 2.1.x 日本語マニュアル/コンテナ - Wikibooks
- 配列が空かどうかを判別 - MATLAB isempty - MathWorks 日本
week8: 教師なし学習
参考文献:機械学習8 k-meansと主成分分析.pptx(https://ocw.tsukuba.ac.jp/wp/wp-content/uploads/2019/10/4f6d2776d2a7508acaaf90244b76afcb.pdf)
www.slideshare.net
www.slideshare.net
- 分散共分散行列 - Wikipedia
- 半正定値行列
- つまり逆行列が存在する
- 特異値分解(講義ではアドバンスな内容として詳細には触れず、あくまで固有値を求めるための計算方法の一つとして紹介)
- A = [USV], mxn = [(mxr), (rxr), (rxn))]
- (Aの特異値の二乗) = [AATの固有値, ATAの固有値]
- 特異値の数=その行列を表現するのに必要な uTvの数
- U_reduce = (nxk), x = (nx1) → Ux = 次元削減したx
- Sの対角線の意味については [Choosing the Number of Principal Components]の講義へ
- octave min: Function Reference: min
[x, ix] = min ([1, 3, 0, 2, 0]) ⇒ x = 0 ix = 3
week9: 異常検知・推薦システム・Matrix Factorization
いろいろ詰め込まれた週です。
異常検知
www.slideshare.net
www.slideshare.net
推薦システム・Matrix Factorization
www.slideshare.net
www.slideshare.net
配列要素の和 - MATLAB sum - MathWorks 日本
推薦システムの講義資料 https://t.co/C9bA0uMkP0 を更新.
— しましま (@shima__shima) 2020年11月3日
以下の3P追加
p14:推薦システムの位置付け
p151:factorization machine
p152::NeuMF
課題自体は難しくないものの、係数のミスに気づかずに少し時間がかかりました。
week10: Large Scale Machine Learning
省略。
week11: Photo OCR
省略、Ceiling Analysis(パイプラインのどの箇所を改善すべきかの分析)の考えは常に頭の片隅に置いておきたいです。 最後の週のテストだけ急に計算問題...。最後のテストの後ろにある「Summary and Thank You」も印象的でした。
修了証