Edited at

機械学習を1ヵ月で実践レベルにする #3 (Octave 編)

More than 1 year has passed since last update.


3日目です

今日の目標は、Coursera でStanford が提供しているMachine Learning の講座のWEEK 3 をやるということでしたが、実はまだWEEK 2 を終えることができておらず、引き続きWEEK 2 の残りをやりました。


過去記事一覧


Octave チュートリアル

今日は、WEEK 2 の残りでやったOctave チュートリアルが実りのあるものだったので、今後のOctave リファレンスとしても使えるように、ここにそれをまとめようと思います。


扱える型

Octave はscalar, vector, matrix を扱えますが、全部行列だと思ってしまったほうが理解しやすいかと思います。scalar は 1x1 の行列、vector は nx1 の行列だと考えれば全て行列であると考えられます。


起動

% octave-cli

この辺のディレクトリ操作はシェルのように使えます。

>> ls

>> pwd
>> cd hoge


データの初期化、代入

>> a = 1

a = 1
>> a = [1 2]
a =

1 2

>> a = [1;2;3]
a =

1
2
3

>> a = [1 2; 3 4]
a =

1 2
3 4

>> a = pi;
>> a
a = 3.1416

>> v = 1:0.3:2 % 初期値:ステップ数:終値
v =

1.0000 1.3000 1.6000 1.9000

>> v = 1:6 % 初期値:(ステップ数1を省略):終値
v =

1 2 3 4 5 6

>> ones(2,3)
ans =

1 1 1
1 1 1

>> zeros(3,2)
ans =

0 0
0 0
0 0

>> 2*ones(2,3)
ans =

2 2 2
2 2 2

>> w = rand(2,3)
w =

0.958006 0.225452 0.932911
0.039494 0.743074 0.607472

>> m = magic(3) % nxn の魔法陣を作る
m =

8 1 6
3 5 7
4 9 2

>> eye(5)
ans =

Diagonal Matrix

1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1


データのslice など(豊富なので重要)

>> A = [1 2; 3 4; 5 6]

A =

1 2
3 4
5 6

>> size(A)
ans =

3 2

>> size(A, 1)
ans = 3
>> size(A, 2)
ans = 2
>> v = [1 2 3 4]
v =

1 2 3 4

>> length(v)
ans = 4
>> A(1,:)
ans =

1 2

>> A(2,:)
ans =

3 4

>> A(:,1)
ans =

1
3
5

>> A(:,2)
ans =

2
4
6

>> A(:)
ans =

1
3
5
2
4
6

>> A(1:1)
ans = 1
>> A(1:2)
ans =

1 3

>> A(1:3)
ans =

1 3 5

>> A([1,3], :)
ans =

1 2
5 6

>> A(:,2) = [10;11;12]
A =

1 10
3 11
5 12

>> A = [A, [100; 101; 102]]
A =

1 10 100
3 11 101
5 12 102

>> A' % 転置
ans =

1 3 5
10 11 12
100 101 102


便利なもの

>> who % 定義されている変数の一覧

Variables in the current scope:

A a ans m v w

>> whos % 定義されている変数の一覧とそのサイズなど
Variables in the current scope:

Attr Name Size Bytes Class
==== ==== ==== ===== =====
A 3x2 48 double
a 1x1 8 double
ans 3x1 24 double
m 3x3 72 double
v 1x4 32 double
w 2x3 48 double

Total is 29 elements using 232 bytes


WEEK 2 修了テスト

WEEK 2 には修了テストがありました。各ビデオ講座は有志の方による日本語字幕がついているのが非常に助かるのですが、こういったテストなどは英語のままです。これも案の定、ちゃんと提出しないとこの週を修了したことにならないので頑張らないといけません。

内容は、まずこのテスト提出システムの使い方とそのチュートリアル。それからWEEK 1 で主に学んだ、単一変数の線形回帰を、Octave で実装する課題。最後に、WEEK 2 で学んだ多変量の線形回帰をOctave で実装する課題。

提出するとその場で正解が分かる仕組みでした。自分が理解できてるってことを客観的に再確認できるので、安心して修了して次に進むことが出来ました。A4にして15枚くらいのテスト課題で、持ち時間は3時間。結構本気のやつでしたから、これができるようになっているのは素直に嬉しくて、翌週へのモチベーションにつながります。


最後に目標の下方修正


  • 12/17(土) WEEK 3(6h3m の前半)

  • 12/18(日) WEEK 3(6h3m の後半)

  • 12/19(月) WEEK 1 〜 WEEK 3 のReview とやり残し, WEEK 4 (4h42m)

  • 12/20(火) WEEK 5 (5h8m)

  • 12/21(水) WEEK 6 (5h46m)

  • 12/22(木) WEEK 7 (4h57m)

  • 12/23(金) 予備日

  • 12/26(月) WEEK 4 〜 WEEK 7 のReview とやり残し

  • 12/27(火) WEEK 8 (5h26m)

  • 12/28(水) WEEK 9 (6h9m)

  • 12/29(木) WEEK 10, WEEK 11 (2h39m), WEEK 8 〜 WEEK 11 のReview とやり残し

土日も少しずつやることにして挽回を図ることにしました。