2014年8月26日火曜日

Machine Learning (Andrew Ng) @ Coursera その3

今回はOctave マンセーうぇえ~いって話。

機械学習やらパターン認識で、Java C++ Python numpy Rとか色々ありましたねぇ。
でもそれらって結構実装に時間食うよね?めんどいよね?PDCA回すの遅れるよね?

シリコンバレーではこういった問題にはとうの昔に気付いておりまして、
すぐにこういった言語で実装し始めるんじゃなくて、
まずはプロトタイピングとしてOctaveが使われておりまっせ。

まずクイックにPDCAを回す競争力の高い企業が集結したシリコンバレーでは、
アイディアの実証がサクッとできてカネがかからんやつがプロトタイピングとして好まれたわけか。

ちなみに、Matlabでもいいんだけどクソたけーよって話もある。
あと、Python numpyでもいいけど、構文ちょっとややこしいやんけ。

とかいう感じで他の言語を軽くディスった上で、今日はOctaveの素晴らしさを布教しようじゃありませんか。



以下、コマンドメモり散らし!


変数の取り扱い

>>1 ~= 2
ans =  1
>>1 && 0
ans = 0
>>1 || 0
ans =  1
>>xor(1,0)
ans =  1
>>1 == 1
ans =  1
>>1 == 1 % this is a comment
ans =  1

>> PS1(">>>") % prompt would be changed to >>>

>>a = 3; % semicolon suppressing input
>>b = "hi";
>>a = pi
a =  3.1416
>>disp(sprintf("2 dicimals: %0.2f", a))
2 dicimals: 3.14
>>

>>format long
>>a
a =  3.14159265358979


行列の基礎的な取り扱い

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

   1   2
   3   4
   5   6

>>v = [1 2 3]
v =

   1   2   3

>>v'
ans =

   1
   2
   3

>>t = 1:0.1:2
t =

 Columns 1 through 3:

    1.00000000000000    1.10000000000000    1.20000000000000

 Columns 4 through 6:

    1.30000000000000    1.40000000000000    1.50000000000000

 Columns 7 through 9:

    1.60000000000000    1.70000000000000    1.80000000000000

 Columns 10 and 11:

    1.90000000000000    2.00000000000000

>>v = 1:6
v =

   1   2   3   4   5   6

>>ones(2,3)
ans =

   1   1   1
   1   1   1

>>zeros(1,)
parse error:

  syntax error

>>> zeros(1,)
            ^

>>zeros(1,3)
ans =

   0   0   0

>>eye(4)
ans =

Diagonal Matrix

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

>> help eye


乱数

>>rand(1,3) % uniform distribution
ans =

   0.740132599360654   0.343361310231155   0.212358308455146

>>randn(3,3) % standard normal distribution
ans =

   0.2927837134905641  -0.4591692991645791   1.0210607888876386
   1.2940773643349077   1.7832798099665554   0.0756273894367232
   0.7627828860428808  -0.7073869504487188  -0.3855058772989866

>> w = -6 + sqrt(10)*(randn(1,1000));
>>hist(w)
>>

ヒストグラムのプロットがこれだけでできるとか幸せか!!




これだけでbin数増やせるとかどんだけ今に生きた我々は幸せか!!
>>hist(w, 50) % add bins



サイズの扱い

>>A
A =

   1   2
   3   4
   5   6

>>size(A)
ans =

   3   2

>>sz = size(A)
sz =

   3   2

>>size(sz)
ans =

   1   2

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

   1   2   3   4

>>length(x)
ans =  4
>>length(A) % returns longer dimention
ans =  3


Unixコマンドもサポートしているよという話

>>pwd
ans = C:\Octave\3.2.4_gcc-4.4.0\bin
>>ls
>> load("file.dat")

>>who
Variables in the current scope:

A    a    ans  b    sz   t    v    w    x

>>whos
Variables in the current scope:

  Attr Name        Size                     Bytes  Class
  ==== ====        ====                     =====  =====
       A           3x2                         48  double
       a           1x1                          8  double
       ans         1x29                        29  char
       b           1x2                          2  char
       sz          1x2                         16  double
       t           1x11                        24  double
       v           1x6                         24  double
       w           1x1000                    8000  double
       x           1x4                         32  double

Total is 1061 elements using 8183 bytes

>>clear
>>whos

>>x = randn(100,2)
>>whos
Variables in the current scope:

  Attr Name        Size                     Bytes  Class
  ==== ====        ====                     =====  =====
       ans         1x14                        14  char
       x         100x2                       1600  double

Total is 214 elements using 1614 bytes


ファイル読み書き

>>save hello.mat x;
>>clear
>>load hello.mat
>>whos
Variables in the current scope:

  Attr Name        Size                     Bytes  Class
  ==== ====        ====                     =====  =====
       x         100x2                       1600  double

Total is 200 elements using 1600 bytes

>>save hello.txt x -ascii % save as text (ASCII)
>>


行列の操作

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

   1   2
   3   4
   5   6

>>A(3,2)
ans =  6

>>A(2,:)  % ":" means every element along that row/column
ans =

   3   4

>>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]]  % append another column vector to right
A =

     1    10   100
     3    11   101
     5    12   102

>>A(:) % put all elements of A into a single vector
ans =

     1
     3
     5
    10
    11
    12
   100
   101
   102

>>A
A =

     1    10   100
     3    11   101
     5    12   102

>>B = [7;8;9]
B =

   7
   8
   9

>>C = [A B]
C =

     1    10   100     7
     3    11   101     8
     5    12   102     9

0 件のコメント:

コメントを投稿