ブログ「色々と考えてみる」の「文系のための「多次元データ解析」」を読み解く(3)

続きまして、本当に参考にしているブログ「色々と考えてみる」の「文系のための「多次元データ解析」」をより「内積」を読み解いていきます。

文系のための「内積」(1)

今回は、掛け算。
・足し算・引き算は、同じ場所の成分同士を計算する。
・掛け算は、掛けられる行列は「横方向」に、掛ける行列は「縦方向」に「掛けて」、結果を「足す」。
・ベクトルの「掛け算」を応用すると、同じベクトルの、転置の掛け算は、二乗して足し合わせることができる。これを「二乗和」と呼ぶ。
・転置:transpose。同じベクトルを「横」と「縦」にして計算すること。「二乗和」している状態。
・掛け算の注意点
 - 掛けられる行列の「行数」と掛ける行列の「列数」の一致させる。
 - 掛ける順番は変えてはいけない。
  A+B = B+A
  A×B ≠ B×A

文系のための「内積」(2)

(1)で学んだ掛け算をRでする。
図形の並行移動で掛け算を学習。
・行列の「掛け算」では、掛ける方を縦に掛け算し、掛けられる方を横に、足し合わせる
・R上では「t(T %*% t(X))」のように計算する。
 ※Tは掛ける行列。Xは掛けられる行列。
・Rの「行列の掛け算」では「%*%」とする。これが、行列の掛け算の記号。

文系のための「逆行列」(1)

ここでは、前回学んだ掛け算に続き割り算「的」なものを学習していく。

◯逆数・・・ある数があって、その数を「単位1個分」としたとき、その数を分母とする分数のこと。
 例)1/n の n
◯逆数の応用理解
 「ある数」 × 「ある数の逆数」 = 「単位数」
 ここで、単位数は、例外無く「1」ということ。
 例)n × 1/n = 1
◯逆行列・・・ある行列があって、その行列を「単位1個分」としたとき、その行列を分母とする分数のこと。
 ⇒つまり、逆数における「数」を「行列」にするということ。
◯「単位行列」とは

「単位行列は、元の行列に掛けても、元の行列が出てくるだけ」という原理を満たさないといけない。

そのようになるには、対角成分が「1」でそれ以外が「0」になる行列しか無い。


「ある行列」に「別の行列」を掛けて「単位行列」となるとき、その「別の行列」のことを「逆行列」という


「ある行列」に「別の行列」を掛けて「単位行列」となるとき、その「別の行列」のことを「逆行列」という


行列の変数の右上に「-1」を付けて、X^{-1}と表す。

一般的に、「逆行列」というのは、「正方行列」にしか適応できず、
縦と横の長さが異なる場合には、「疑逆行列」というのが必要になる。

なんだか今回は、引用だらけになってしまった。

私的理解。
「逆行列」とはスカラーにおける「逆数」のこと。
逆行列は、正方行列にしか適応できない。
正方行列ではない場合は、「疑逆行列」というのが必要となる。(後半は引用のまんまw)

この回以降で相当出てくるので、ここで暗記しておく必要があります。

文系のための「逆行列」(2)

前回に引き続き「逆行列」の説明。今度はRを使って解説。

逆行列は、スカラーにおける逆数に相当し、行列を基準化するために用いる。

逆行列を用いることで連立方程式が解ける、というのは、逆行列の重要な性質の一つ

cbind()関数:ベクトルあるいは行列を列に追加する関数。
rbind()関数:列を追加する関数

連立方程式を計算する際には、右辺と左辺を一致させるために、両辺を割る必要がある。
しかし、行列の場合は、割り算ができないため逆行列を使う必要がある。
さらに逆行列は正方行列にしか適用できないので、疑逆行列を使用する必要が出てくる。

ここが難しい。

元の行列の転置行列と元の行列を掛けると正方行列になる。
この正方行列の逆行列は、転置行列の分だけ余分に基準化しているので、
さらに、転置行列を掛けて、元の状態に対応する行列に戻す。

元の行列の転置行列と元の行列を掛けると正方行列になる。

これを定義としてひとまず理解。

この正方行列の逆行列は、転置行列の分だけ余分に基準化しているので、さらに、転置行列を掛けて、元の状態に対応する行列に戻す。

正方行列にするために、元の行列を転置行列化してさらに、元の行列をかけている状態。
正方行列にするために元の行列を転置行列化したわけなので、これを「余分に基準化している」とする。
つまり「転置行列」は、基準化の一つなので、さらに転置行列を掛けて、「元の状態に対応する行列に戻す」必要がある、ということ。

# 材料の総量
total <- c(565, 15, 260, 290) # 連立方程式を解く solve((t(A)%*%A))%*%t(A)%*%total > # 連立方程式を解く
> solve((t(A)%*%A))%*%t(A)%*%total
[,1]
pancake 4
doughnut 20
spongecake 3

solve()関数:逆行列を求める関数

◯行列で擬似的に割り算を使う方法
 (1)転置行列を使う方法
    solve((t(A)%*%A))%*%t(A)%*%total
 (2)特異値分解を使う方法
    svd(A)
     D <- diag(A.svd$d)      V <- A.svd$v      U <- A.svd$u     V %*% solve(D)%*%t(U)%*%total  (3)逆行列の関数ginv()関数を使う方法     # ライブラリを読み込む
    library(MASS)
    # 連立方程式を解く
    ginv(A)%*%total

⇒(3)が一番楽だということがわかった。特異値分解は、行列におけるスカラーの因数分解、ということを数式的に理解することが重要そう。
⇒「library(MASS)」は今後ともお世話になりそうな予感。

連立方程式が綺麗に出ない場合でも、この疑逆行列は役に立つ。
近似的に最適な解を出せるため。
最適な解とは、「誤差の二乗が最も小さくなるような答え」=最小二乗法。

ふー。そろそろ難しくなってくる予感。

以後
「ブログ「色々と考えてみる」の文系のための「多次元データ解析」」を読み解く(4)に続く。

Leave a Reply

%d人のブロガーが「いいね」をつけました。