の最小化を偏微分で求めるが、ベクトル演算とベクトル微分が「これは知ってて当然でしょ」という感じでさっくり飛ばされることが多いのでしつこいくらいにひとつずつやる。
下準備
微分されるベクトル変数は, 係数のベクトルは とする。基本的に または とかくと、列ベクトルつまり縦に長いベクトルである。つまり、
, である。縦に書くと長いので、 もしくは転置 して
, と書く。
ベクトルの演算として,
である。
転置は である。
偏微分は である。
二次形式という表現 というものがある。これは、ただ単純にノルムを考えると (普通の二乗和)になるが,ベクトル表現のときに正方行列 を間にかませると、, , , , の組み合わせを得ることができる。
, とおけば、
となる。
というわけで、 を展開して、偏微分で0 になるときの を求めにかかるが
普通に二乗の形にするが、ベクトル(というか行列表示)ではこうする
転置を中にいれた
転置の公式
展開する
を思い出すと、ここで、 と をかたまりとみて転置する。
転置の公式を使って とした
まとめた
さてこれを で偏微分する。 は に関係ないので0 になるので
と思えば、 である
とみなせば である
転置の公式 であり、
というわけで、
偏微分で0 となるときに求める だから
が答え。
nr <- 20
nc <- 7
y <- runif(nr)
X <- matrix(runif(nr*nc), nr, nc)
lm(y ~ X - 1)
Call: lm(formula = y ~ X - 1) Coefficients: X1 X2 X3 X4 X5 X6 X7 0.01803 0.43939 0.28782 0.26241 -0.13173 0.02898 0.35624
solve(t(X)%*%X)%*%t(X)%*%y
[,1] [1,] 0.01803270 [2,] 0.43938587 [3,] 0.28782293 [4,] 0.26241033 [5,] -0.13172939 [6,] 0.02897629 [7,] 0.35623832