【Ch05-01】正規方程式法は、多変量線形回帰の問題を解決するために

シリーズのブログ、GitHubの上で維持原作者:https://aka.ms/beginnerAI
より多くの意味するものではありません星と星をクリックして、著者難しく星。

5.1正規方程式溶液

英語名は正規方程式です。

線形回帰の問題のために、線形回帰の問題を解決するために、前述の最小二乗法に加えて、だけでなく、多重線形回帰の問題を解決することができます。

複数の線形回帰のために、あなたが解決するために、通常の方程式を使用することができ、それは数学的な解析解に取得することです。これは、次の式で説明する問題を解決することができます。

\ [Y = A_0 + a_1x_1 + a_2x_2 + \ドット+ a_kx_k \タグ{1} \]

5.1.1簡単な導出方法

機能フィット(回帰)を行うことで、我々は、関数Hは、以下のようにすることを前提としています。

\ [H(B、W)= B + X_1 W_1 + X_2 W_2 + ... + x_nに関するW_N \タグ{2} \]

だから、(B = W 0 \)\そして、:

\ [H(W)= W_0 + X_1 \ CDOT W_1 + X_2 \ CDOT W_2 + ... + x_nに関する\ CDOT W_N \タグ{3} \]

我々は、M個のサンプルを用いて計算すると、xは、サンプルn個の固有値である式3は、これは、以下の行列になります。

\ [H(W)= X \ CDOT W \タグ{4} \]

次のように行列XとWの形状で式5は次のとおりです。

\ [X = \ {} pmatrixの1&X_ {1,1}&X_ {1,2}始める&\ドット&X_ {1、n}は\\ 1&X_ {2,1}&X_ {2,2- }&\ドット&X_ {2、N} \\ \ドット\\ 1&X_ {M、1}&X_ {M、2}&\ドット&X_ {M、N} \端{pmatrixの} \タグ{ 5} \]

\ [W = \開始{pmatrixの} W_0 \\ W_1 \\ \ドット\\ W_N \端{pmatrixの} \タグ{6} \]

その後、我々は、真の値と一致した出力の機能を前提と期待しています:

\ [H(W)= X \ CDOT W = Y \タグ{7} \]

前記次のようにYの形状です。

\ [Y = \開始{pmatrixの} Y_1 \\ Y_2 \\ \ドット\\ y_m \端{pmatrixの} \タグ{8} \]

直感的に、W = Y / X、そこ行列の3つの値があり、そしてマトリックスは、逆行列Xを得ることが必要であり、分割されず、YがXに逆行列が乗算されます しかし、問題が発生しますので、正方形に左折を置くために、それは逆行列が存在することができ、ちょうど正方形の逆行列を持ち、そしてXは必ずしも正方形ではないです。したがって、一方正方行列Xを得るために、行列Xの転置で乗算方程式の第一の側面:

\ [X ^ TXW = X ^ TY \タグ{9} \]

ここで、\(X ^ T \)は転置行列Xであり、\(X ^ TX \)正方形で、逆行列が存在することを仮定して、式の右側に移動しなければなりません。

\ [W =(X ^ TX)^ { - 1} {X ^ TY} \タグ{10} \]

この時点で、私たちはのW正規方程式を見つけることができます。

5.1.2導出コンプレックス

我々はまだ平均二乗誤差損失関数を使用します。

\ [J(B、W)= \和(z_i - Y_I)^ 2 \タグ{11} \]

同じ機能として、一定のB 1及びz = XW式に入れ、マトリクス状になります。

\ [J(W)= \和(X_I w_i -y_i)^ 2 =(XW - Y)^ T \ CDOT(XW - Y)\タグ{12} \]

誘導体が0であるので、Wは、溶液の最小値であり、Wの誘導体:

\ [\開始{整列} {\部分J部分W \オーバー\(W)}&= {\部分W \上部分\} [(XW - Y)^ T \ CDOT(XW - Y)] \\& = {\部分\オーバー\部分W} [(X ^ TW ^ T - Y ^ T)\ CDOT(XW - Y)] \\&= {\部分\オーバー\部分W} [(X ^ TXW ^ TW -X ^ TW ^ TY - Y ^ TXW + Y ^ TY)] \端{整列} \タグ{13} \]

導出した後:

最初の結果は次のとおりです\(^ 2X TXW \)

第二項及び第3項の結果は以下のとおりです\(X-TY ^ \)

第四の結果は次のとおりです。0

そして、導関数がゼロであることを確認してください。

\ [J(W)= 2X ^クマ- 2X ^ TY = 0 \ {14} \]
\ [X ^クマ= X ^ Tyの\ {15} \]
\ [W =(X ^ TX)^ {-1} X ^のTy \ {16} \]

10の同じ結論と数式。

基本的な式は、第0章式60-69を参照してもよい上記の派生しました。

逆行列\((X ^ TX)^ { - 1} \) の理由が存在しなくてもよいです。

  1. そのような冗長特徴値、\(第2_1 X_2 = X ^は\) すなわち正方形領域の側面との間の関係、二つの特徴として存在することができます
  2. このような特徴として、あまりにも多くの機能は、サンプル数mの数nよりも大きいです

上記2点が私たちの特定の例には存在しません。

5.1.3コードの実装

表5-1で我々のサンプルデータは、方程式になります。式(5)によれば、我々は、以下のX、Yのマトリックスを確立しなければなりません。

\ [X = \ {} pmatrixの1&10.06&60 \\ 1&15.47&74 \\ 1&18.66&46 \\ 1&5.20&77 \\ \ドットを開始\\ \端{pmatrixの} \タグ{17 } \]

\ [Y = \開始{pmatrixの} 302.86 393.04 \\ \\ 270.67 450.59 \\ \\ \ドット\\ \端{pmatrixの} \タグ{18} \]

式(10)によれば:

\ [W =(X ^ TX)^ { - 1} {X ^ TY} \タグ{10} \]

  1. Xは、Xの1000x3行列転置が3x1000である\(X ^ TX \)(3×3)行列を生成します
  2. \((X ^ TX)^ { - 1} \) の3x3であります
  3. 乗じ\(X-T ^ \)マトリックスの、即ち、(3×3)×(3x1000)、それは3x1000となります
  4. Yを乗じたが、Yはそう、1000x1ある(3x1000)×(1000x1)は3X1となる、Wは溶液であり、前記ベクトルのオフセット含む値bと、2つの重み値wは、3つの値の
if __name__ == '__main__':
    reader = SimpleDataReader()
    reader.ReadData()
    X,Y = reader.GetWholeTrainSamples()
    num_example = X.shape[0]
    one = np.ones((num_example,1))
    x = np.column_stack((one, (X[0:num_example,:])))
    a = np.dot(x.T, x)
    # need to convert to matrix, because np.linalg.inv only works on matrix instead of array
    b = np.asmatrix(a)
    c = np.linalg.inv(b)
    d = np.dot(c, x.T)
    e = np.dot(d, Y)
    #print(e)
    b=e[0,0]
    w1=e[1,0]
    w2=e[2,0]
    print("w1=", w1)
    print("w2=", w2)
    print("b=", b)
    # inference
    z = w1 * 15 + w2 * 93 + b
    print("z=",z)

5.1.4業績

w1= -2.0184092853092226
w2= 5.055333475112755
b= 46.235258613837644
z= 486.1051325196855

我々は2つの重み値とオフセット値、Z =4.86億を得、その後率予測値を得ました。

この時点で、我々は解析解を得ました。私たちは、トレーニングニューラルネットワークの結果を検証するために、標準の答えとしてこれを使用することができます。

コードの位置

ch05、レベル1

おすすめ

転載: www.cnblogs.com/woodyh5/p/12028487.html