Week 2

Maultivarlate Linear Regression

多変量線形回帰問題を考える場合は、変数をベクトルで考えてあげると良い。

h(x) = theta^T x

と書ける。このとき x0=1 とする。内積でかけて嬉しいね。 また偏微分も基本的には全部相似形になるので簡単。

再急降下法を早く収束させるために、まずできることはサンプルを正規化すること。

  • feature scaling: とりあえず最大値で割って 0 =< x =< 1 にする
  • mean normalization: 平均で引いてから、最大値と最小値の幅で割って -0.5 =< x =< 0.5にする

あと再急降下法の収束を決める要素として、学習率αと離散値を扱うので収束と決める条件を設定しないといけない。 それぞれ決めが難しいので、再急降下法の試行回数と J(theta) の値のプロットを取って良さそうな値を決めるしかない。

Octave

Octave自体の操作

a の少数第二位まで表示。

disp(sprintf('%0.2f), a)

3x2 の行列を宣言できる。

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

Aの2行目、2列目だけを抜き出す。

A(2,:)
A(:,2)

Aに行列を追加する。

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

Aのすべての要素を1つのベクトルにまとめる。

A(:)

2x3 のすべての要素が1と0の行列ができる。

ones(2, 3)
zeros(2, 3)

1x10000のランダムなベクトルを作って、ヒストグラムとして表示する。

w = randn(1, 10000)
hist(w, 50)

4x4の単位行列を作る。

eye(4)

行列のサイズを調べる。

size(X)

ベクトルの長さを調べる。

length(v)

ファイルに入ったデータを読み込んで、データが格納されている変数を確認する。

load('foo.dat')
who
whos

変数をクリアする。

clear x

変数をファイルに保存する。

save hello.mat v

Aの各列での最大値を取る。

max(A, [], 1)

Aの各行での最大値を取る。

max(A, [], 2)

Plotting Data

xyのベクトルを使ってプロット。x軸とy軸にラベルを付ける。凡例も書く。タイトルを「graph」とする。

plot(x, y)
xlabel('time')
ylabel('value')
legend('second', 'value')
title('graph')

imagesc とかでヒートマップ作るのも面白い。

Control Statements; for, while, if statement

基本的に、制御文の後はカンマを付けて、最後は end

for i=1:10,
  if i / 2 == 0,
    disp(i);
  end;
end;
while 1,
  disp('hello');
end;

関数の定義は次の通り

function y = foo(x) % 関数の宣言

y = x^2;            % 実装

複数の値を返すことも出来る。

function [y1, y2] = bar(x)

y1 = x^2;
y2 = x^3;

addpathを使うと関数が定義されているファイルがあるディレクトリを追加できる。

関数は