Posts

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 ...

Normal Equation Noninvertibility

Image
Courseraオンライン講座の機械学習コースを 直感的な理解を優先して、ゆるーく まとめてます。 正確には公式サイトを参照して下さい。 [MachineLearning Week2](https://www.coursera.org/learn/machine-learning/home/week/2) ## Normal Equation Noninvertibility ここでは正規方程式と、逆行列を持たない行列についての話。 専門的すぎるため、数学的な証明はしませんが、 正規方程式でパラメータを求める時、 めったに起こらないとは思いますが、 逆行列が求められないと、 解を求められなくなってしまいます。 Optaveには擬似的に逆行列を求める関数が用意されていて、 具体的にはこのように記述して、解を求めます。 pinv( x' * x) * x' * y

正規方程式の考え方

Image
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...

【重要】 Normal equation 正規方程式

Image
Courseraオンライン講座の機械学習コースを 直感的な理解を優先して、ゆるーく まとめてます。 正確には公式サイトを参照して下さい。 [MachineLearning Week2](https://www.coursera.org/learn/machine-learning/home/week/2) # Computing Parameters Analytically ## 【重要】 Normal equation 正規方程式 ここまでは最小降下法、最小二乗法で 目的関数の最小値を求めていましたが、 正規方程式というものを用いると、 一発で最小点を求めることが出来るのです。 詳しい証明は他に譲るとして、 ここでは大まかな説明をします。 $J(\theta)$: Cost Function 目的関数 パラメータが複数あって、 $\theta$が ${\rm I\!R}^{n+1}$ 次元実数のベクトルで、 最適値を求める場合を考えます。 $$ J(\theta_0, \theta_1, \cdots, \theta_m) = \frac{1}{2m} \sum^m_{i=1}(h_\theta(x^{(i)})-y^{(i)})^2 $$ m個のサンプル,n個の項目がある場合、 i番目のサンプルの項目は、以下のように表される $$ x^{(i)} = \begin{bmatrix} x^{(i)}_0 \\ x^{(i)}_1 \\ \vdots \\ x^{(i)}_n \end{bmatrix} \in {\rm I\!R}^{n+1} $$ 項目全体を表すX design matrixは、 各サンプルごとの特徴を転換して、 以下のように表される。 $$ X = \begin{bmatrix} -- & (x^{(1)})^T & -- \\ -- & (x^{(2)})^T & -- \\ & \vdots & \\ -- & (x^{(m)})^T & -- \end{bmatrix} $$ 各パラメータに対する偏微分を求めます。 これが正規方程式となります。 $$\theta = (X^T X)^{-1} X^{T} y$$ ...

Gradient Descent in Practice II - Learning Rate

Image
Courseraオンライン講座の機械学習コースを 直感的な理解を優先して、ゆるーく まとめてます。 正確には公式サイトを参照して下さい。 [MachineLearning Week2](https://www.coursera.org/learn/machine-learning/home/week/2) ## Gradient Descent in Practice II - Learning Rate 学習率 最急降下法では、 パラメータの値を少しづつ変化させながら、 目的関数を最小化させます。 その変化量$\alpha$は、学習率と呼ばれます。 学習率$\alpha$は、 以下の条件を考慮しながら適切な値を選ぶようにします。 - 極小に向かっているか - 学習率に適切な値が指定されているか - 範囲 - 振り幅 どのように$\alpha$を選んだら良いのか、 また、$\alpha$自体を使わない方法を、 後半で説明します。

Gradient Descent in Practice I - Feature Scaling

Image
Courseraオンライン講座の機械学習コースを 直感的な理解を優先して、ゆるーく まとめてます。 正確には公式サイトを参照して下さい。 [MachineLearning Week2](https://www.coursera.org/learn/machine-learning/home/week/2) ## Gradient Descent in Practice I - Feature Scaling 変数がたくさんある場合、 変化量を統一すると、 計算しやすくなります。 ### Scaling 例えば変数として、 家の部屋数や、土地面積など、 数値的に異なる数値範囲のものがある場合、 便宜的に比率に置き換えtあり、 たとえばすべてのパラメータを 0から 1の範囲で考えられるように調整すると、 計算がしやすくなります。 ### Mean normalization 数量の正規化 複数のパラメータがあるとき、 中心値からのバラつきで考えると、 パラメータの変動範囲を正規化できます。

Gradient Descent for Multiple Variables

Image
Courseraオンライン講座の機械学習コースを 直感的な理解を優先して、ゆるーく まとめてます。 正確には公式サイトを参照して下さい。 [MachineLearning Week2](https://www.coursera.org/learn/machine-learning/home/week/2) ## Gradient Descent for Multiple Variables 変数が複数ある場合の最小降下法の使用方法です。 $n$個の変数を持つ場合、 - 変数 $\Theta$ : $\theta_0, \theta_1, \cdots, \theta_n$ の時、 - 仮説は: $h_\theta(x)=\theta_0 + \theta_1x_1 + \theta_2x_2 + ... + \theta_nx_n$ 目的関数は以下のようになります。 $$ J(\Theta) = \frac{1}{2m} \sum^m_{i=1}(h_\theta(x^{(i)})-y^{(i)})^2 $$ 変数が1つの時と同じように、 それぞれの変数を少しずつ変えながら、 目的関数$J(\Theta)$を最小化していきます。 収束するまで繰り返す {     $\theta_j$ := $\theta_j$ - $\alpha$ $\frac{\partial}{\partial\theta_j} J(\theta)x^{(i)}_j$ }