FreeStyleWiki

Octave演習

このエントリーをはてなブックマークに追加

[機械学習]

Octaveで回帰

Couseraのmachine learningの演習についてまとめている。

  • 答えは書いてません
  • 理解のためには一度ノートに行列の式を書くとわかりやすいと思いました

  複数要素の場合のhypothesis (仮説)

Octaveで複数要素のhypothesisを表す場合、こうでしたよね?

h_\theta(x) = \theta_0 x_0 + \theta_1 x_1 + \theta_2 x_2 + \cdots + \theta_n x_n

そしてこいつを転置して

h_\theta(x) = \theta^T x と書く、TはTransposeのT

Octaveはベクトルをそのまま計算できるので、

  • X = [xx xx; yy yy; zz zz; ...]; のような行列
  • θ = [0;0;0;...]; のような縦ベクトル

これらがあれば仮説関数が計算できるはず

>> h = theta * X

  目的関数 J(θ)

  • この式をOctaveで表したいんだけど難しすぎる。とりあえずヒントのみ。

J(\theta_0 , \theta_1) = \frac{1}{2m} \sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)})^2

% Xは適当な行列、thetaはtheta_0, theta_1ともに0としたら
>> X     = [1.0 1234; 1.0 2345; 1.0 3456];
>> theta = [0;0];

% とおける…
>> X*theta
ans =

   0
   0
   0
% となる。
  • というのは、行列の積がこんな感じで解けるから
    • \begin{bmatrix} 2&-1 \\ -3&4 \end{bmatrix} \cdot \begin{bmatrix} 1 \\ 2 \end{bmatrix} = \begin{bmatrix} 2 \cdot 1 + (-1) \cdot 2 \\ (-3) \cdot 1 + 4 \cdot 2 \end{bmatrix} = \begin{bmatrix} 0 \\ 5 \end{bmatrix}
    • というわけで X の要素分の縦ベクトルが作成される

  複数要素の場合の最急降下法

  • 仮説: h_\theta(x) = \theta_0 + \theta_1 x 、変数: \theta_0 , \theta_1

イメージとしては以下の関数を実行しまくってθの値を変化させていく(授業で言われたままだな…)

  • \theta_j = 0 : \frac{1}{m} \sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)})
  • \theta_j = 1 : \frac{1}{m} \sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)}) \cdot x^{(i)}
    • 後半のX^iってなんじゃい?って話ですが、これはもちろん累乗ではなくデータセットのうち1番めの列のやつですよ