Octave - Matlab Tutorials

Image
Courseraオンライン講座の機械学習コースを 直感的な理解を優先して、ゆるーく まとめてます。 正確には公式サイトを参照して下さい。 [MachineLearning Week2](https://www.coursera.org/learn/machine-learning/home/week/2) # Octave - Matlab Tutorials ## Basic Operations Octaveの基本的な操作をまとめます。 コメントを書くときは % で始めます。 - 1 ~= 2: % !=のことで、等しくないことをチェック - a = pi % πを代入 - disp( sprintf( '2 decimals: %0.2f', a)) % テキストのフォーマット出力 - format long % 以降、結果を長く表示 - format short % 以降、結果を短く表示。 * A = [ 1 2; 3 4; 5 6] % 配列を定義 - v = 1: 0.1: 2 % 1 から 2まで 0.1ステップで加算 * ones( 2, 3) % 2行3列 のすべてが 1の配列を作成 * 2*ones( 2, 3) % 上記行列を倍に * w = zeros( 1,3) % 1行3列の、すべて0の行列を作成 * w = rand( 1, 3) % 乱数配列 * w = randn( 1, 3) % Gaussian乱数配列 - w = -6 + sqrt( 10)*(randn(1,10000)); % 10000個 - hist(w) % ヒストグラム表示 - hist(w,60) % ヒストグラム表示(詳細) + eye(4) % 単位行列 - help eye % ヘルプ表示 ## Moving Data Around 使用頻度の高い処理をまとめます。 - A = [ 1 2; 3 4; 5 6] - size(A) % 行列の大きさ - size(A,1) % 最初の次元の大きさ - length(v) % 最長の長さ + pwd % 作業ディレクトリ + cd % ディレクトリの変更 + load ...

正規方程式の考え方

Courseraオンライン講座の機械学習コースを 直感的な理解を優先して、ゆるーく まとめてます。 正確には公式サイトを参照して下さい。 [MachineLearning Week2](https://www.coursera.org/learn/machine-learning/home/week/2) # 正規方程式の考え方 機械学習における正規方程式(normal equation)とは以下のようなものです。 $$\theta = (X^T X)^{-1} X^{T} y$$ 機械学習では、 仮説が以下のように与えられた時、 $$h_{\theta}(x)=\theta^{T}x$$ 目的関数は、以下のように定義されます。 $$ J(\Theta) = \frac{1}{2m} \sum^m_{i=1}( \theta^{T}x - y)^2 $$ この目的関数を最小化するためのパラメータ$\theta$を 一気に求めるために、 正規方程式が使われます。 正規方程式の直感的な理解のため、 目的関数の二乗誤差部分に注目します。 行列$X$は入力で、 $\theta$はパラメータのベクトルとします。 二乗誤差部分 $||X\theta - y||^2$は、 $(X\theta - y)$を転置して、 もう一つの$(X\theta - y)$に掛け合わせる形で2乗すると、 以下のように書けます。 $$||X\theta - y||^2 = (X\theta - y)^T(X\theta - y)$$ 転置を展開して $$||X\theta - y||^2 = (\theta^T X^T - y^T)(X\theta - y)$$ さらにカッコを展開するとこうなります。 $$||X\theta - y||^2 = \theta^T X^T X\theta - 2 \theta^T X^T y + y^T y$$ これを微分すると最小値が求められることになります。 $\theta^T X\theta$の微分は$2X\theta$で、 $\theta^T X^T y$の微分は$X^T y$なので、 このようになります。 $$\partial(||X\theta - y||^2) = 2X^T X \theta - 2 X^T y $$ 以下の条件であれば、上記微分がゼロとなるので、 最小化することができます。 $$ X^T X\theta = X^T y $$ これを $\theta$について、両辺に逆行列を掛けて書き直すと 以下のような正規方程式なります。 この$\theta$が目的関数を最小化するパラメータとなります。 $$\theta = (X^T X)^{-1} X^{T} y$$ ## Octaveでのデモ 学習データ $(x_j, y_j)$ が以下のように与えられたとします。
$$ x = \begin{bmatrix} 1 \\ 2 \\ 3 \end{bmatrix} ~~~~~ y = \begin{bmatrix} 1.9 \\ 3.2 \\ 4.1 \end{bmatrix} $$ $x$は行列計算のために1行追加して、$X$と表すことにします。 $$ X = \begin{bmatrix} 1 & 1 \\ 1 & 2 \\ 1 & 3 \end{bmatrix} $$
正則方程式を Octaveで求めるには以下のようになります。 theta = pinv( X' * X) * X' * y 結果、目的関数を最小にする $\theta$は以下のように求められます。 theta = 0.86667 1.10000 これをプロットすると、以下のようになります。 $\theta$の分布は以下のようになります。 赤のバッテンが最小値となります。 # おまけ 最小二乗法が正規方程式で解けてしまうというのは、 とても素晴らしい発想ですよね。 誰がこの計算方法に気がついたのでしょうか? 天才ですね。 これが数学の美しさというのでしょうか。 最小二乗法は1800年頃、ルジャンドルやガウスが 考えだしたと言われています。 行列はどうなのかと少し調べてみたら、 ライプニッツが1690年頃に行列のことを手紙に書く前に、 関孝和が、1683年に発行した『解伏題之法』に 行列式を発表していたようで、驚きました。

Comments

Popular posts from this blog

Markdownで投稿する前に Visual Codeで下書き

Google code-prettify

【最重要】 Cost Function