Coursera Machine LearningでOctave課題(ex1)の提出してみた
2019年末からCourseraMachineLearingを自主学習してますが、Octaveの課題がとてもむずかしいですね。。12月は全然時間が割けませんでしたので、2020年になって再度トライしようとしたところ、コース再登録になってしまいましたが、再登録になってもそのままQuizなどパスした項目は引き継がれていました。2020年1月6日から再開されましたので、今度は終了まで行ってみたいと思います。
やっとWeek2の課題を提出してみましたのでその記録です。課題のPDFの英語からしてまともに取り掛かるとめちゃくちゃ大変ですね。。独習ですとツライですが、なんとかその提出手順を記録してみます。
まずはZIPファイルを展開してOctave上でパス変更
課題zipファイルを展開してみます。
このフォルダにOctaveのCurrentDirectoryを合わせます。その後ex1とか入力するとex1.mファイルが実行されて結果が見えるようになります。
他の拡張子.mのファイルを穴埋め変更してex1実行で確認
課題のPDF(ex1.pdf)をなんとか読みこなすと変更すればよいのは少なくともwarmUpExercise.m、computeCost.m、gradientDescent.mを書き換えて適宜ex1でデータ確認すれば良いことが分かるかと思います。
流石に一番最初のwarmUpExercize.mはPDFを読むと「A=eye(5);」を追加するように、と答えが書いてありますので、
warmUpExercize.mをエディタで開いて、
% ============= YOUR CODE HERE ==============
A=eye(5);
のように追加すればよいですね。%はコメントですね。ex1を実行すると
と5x5の行列が表示されましたね。Enterで続けて処理が進みます。
他の問題に進んでみる
computeCost.m、gradientDescent.mも自分で考えるなりギブアップの場合でもググれは答えが出てきますので、割愛しときますが、考え方だけまとめてみたいと思います。
まず最後のページあたりにキーワードとファイル名、配点が何点か書いてありますね。
・computeCost.m
コストの計算ですね。コストはJ(θ)で本文中(2.2のあたり)に記載されてますので、それどどうやってOctaveで表現するかですね。ループはできるだけ使わずに行列の演算で表現できるかですね。合計する関数にsumがありますが、sumも使わずに行きたいですね。例えば行列[1;2;3]の各要素の2乗和はこのように「’」で転値行列(Transpose)を使うとサクッとできますね。
あとはコストは最終的にはベクトルではなく、スカラー値を取ることも理解しとかないとダメですね。
似た演算に「.*」もありますが、このあたりの違いを理解しておくと良いのではと思います。
この場合は2乗して終わりですね。ベクトルのママですね。和を取りません。
まあこの問題はそんなに難しくないかと思いますがどうでしょうか。
・gradientDescent.m
これはちょっとむずかしいような気がしますが、ファイルにはすでにループ文が記載されてますので、大丈夫ですかね。PDFの6ページ目の一番上の式ですね。
YOUR CODE HEREの部分だけに追加が必要ですね。
% ====================== YOUR CODE HERE ======================
thetaは重みですね。thetaがちょっとずつ変えて行くってことですね。でコスト関数の値を計算してメモリにためて一番コストが一番小さいthetaを採用するってことですね。
最後Submit.mを実行する
Octave上で
>> submit
と入力するとsubmit.mが実行できます。LoginのEMAILの入力が求められますので入力して、その後Tokenをコピペすると採点してくれます。
Tokenはページの右側にあるランダム文字数列ですね。消しちゃってますが。
Sumit後すぐに採点されます。Warm-up Exercizeも加算されてますね。Optionの問題はとても無理ですね。
ということで式の意味がよくわからなくても正解することは可能と思いますが、それではあまり意味がないかと思いますので、頑張って理解しないとダメですね。。正直私もよくはわかってませんが。。