E資格学習:応用数学① 線形代数 基礎まとめ

E資格取得に向けた学習として要点をまとめます。今回のテーマは「応用数学」ということで「線形代数」「確率・統計」「情報理論」の3分野について、要点とキーワード、pythonでの実装コードをまとめていきたいと思います。

線形代数

スカラー・ベクトル・行列・テンソル


スカラー:いわゆる普通の数。0階のテンソルともいう。
(例) a = 2

a= 2


ベクトル:順番に並んだ数値。大きさと向きを合わせ持つ。2値以上の数値で表現されるので、空間的な「位置」=「向き」が表現できる。1階のテンソルともいう。横向きに書くと横ベクトル、縦方向に書くと縦ベクトルという。
(例)横ベクトル
\vec{a} = (1, 2, 3), \vec{b} = (1, 2, \cdots, 80)

import numpy as np
a= np.array([1, 2, 3])
b =np.arange(1, 81, 1) #arange関数を使って始点、終点、交差を指定する書き方


行列:ベクトルを表の形式にしたもの。連立方程式を解く過程で生まれた。行方向(横)、列方向(縦)に数値が並ぶ。2階のテンソルともいう。n×m行列の場合、行数n、列数mの行列を指す。
(例)2×3行列

 \boldsymbol{A} =\begin{pmatrix}1&2&3\\4&5&6\end{pmatrix}

import numpy as np
a= np.array([[1, 2, 3],[4, 5, 6]])


テンソル:行列はタテ・ヨコの2次元だが、さらに3次元以上に並べた数列。タテ・ヨコ方向だけでなく奥行き方向等(ただし、4次元以上になると空間的な表現難しい)。3階のテンソル、4階のテンソルのように表現する。

import numpy as np
a = np.array([[[1, 2],[3,4]],[[5,6],[7,8]], [[9,10],[11,12]]]) #3次元
b = np.arange(1,25,1).reshape(2,3,2,2)  #24個の1次元配列を4次元テンソル(2行2列×3次元のテンソルが2組)に変換する方法
様々な行列の種類

正方行列:行数n=列数mの行列
(例)

 \boldsymbol{A} =\begin{pmatrix}1&2\\4&5\end{pmatrix}


単位行列:正方行列において、対角線上の成分が全て1で、その他は全て0である行列。単位行列 \boldsymbol{I} とすると、 \boldsymbol{AI=IA=A} を満たす。(単位行列は、 \boldsymbol{I} だけでなく \boldsymbol{E} と表記されることもある)
(例)

 \boldsymbol{I} =\begin{pmatrix}1&0&0\\0&1&0\\0&0&1\end{pmatrix}


逆行列:行列Aに対して、積を取ると単位行列になるような行列。行列の世界での逆数のような存在。右上に添字-1をつけて表す。
 \boldsymbol{AA^{-1}=A^{-1}A=I}
(例)

 \boldsymbol{A} =\begin{pmatrix}4&2&3\\2&1&1\\3&2&3\end{pmatrix}
のとき
 \boldsymbol{A^{-1}} =\begin{pmatrix}1&0&-1\\-3&3&2\\1&-2&0\end{pmatrix}


転置行列:行列Aに対して、行と列を入れ替えた行列のこと。右上に添字Tをつけて表す。
(例)

 \boldsymbol{A} =\begin{pmatrix}1&2\\3&4\end{pmatrix}
のとき
 \boldsymbol{A^{T}} =\begin{pmatrix}1&3\\2&4\end{pmatrix}


対角行列:非対角成分が全て0の行列。対角行列同士の積は対角行列になる。対角行列の行列式は、対角成分をかけた値になる。
(例)

 \boldsymbol{A} =\begin{pmatrix}3&0&0\\0&4&0\\0&0&5\end{pmatrix}


対称行列:主対角線を軸に線対称な行列。行列Aとその転置行列ATが一致する。
(例)

 \boldsymbol{A} =\begin{pmatrix}1&5&-2\\5&2&3\\-2&3&7\end{pmatrix}


直行行列:行列Aの、転置行列 \boldsymbol{A^{T}} 逆行列 \boldsymbol{A^{-1}} が一致するような行列
 \boldsymbol{A^{T} = A^{-1}}
(例)

 \boldsymbol{A} =\begin{pmatrix}0&1&0\\1&0&0\\0&0&1\end{pmatrix}



逆行列の求め方

<2×2の正方行列の場合>(メモ)

 \boldsymbol{A} =\begin{pmatrix}a&b\\c&d\end{pmatrix}逆行列 \boldsymbol{A^{-1}} は、

 \boldsymbol{A^{-1}} =1/(ad-bc)\begin{pmatrix}d&-b\\-c&a\end{pmatrix}

となる

<掃き出し法>(メモ)
・元の行列の右側に単位行列を付け加え、行基本変形を繰り返し、左側に単位行列を作るように操作していく方法。


逆行列が存在しない時とは?>

 \boldsymbol{A} =\begin{pmatrix}a&b\\c&d\end{pmatrix}とすると、 \boldsymbol{ad-bc=0}となるとき、行列Aは逆行列をもたない。つまり行列式=0の時、逆行列は持たない。


行列式 det(A)

正方行列についてのみ1つの数値が対応する。いわゆる正方行列の「大きさ」のようなもの。

2×2の正方行列の場合は、以下となる。

 \boldsymbol{det(A)} =\begin{vmatrix}a&b\\c&d\end{vmatrix} = ad-bc


3×3の正方行列の場合

 \boldsymbol{det(A)} =\begin{vmatrix}a_{11}&a_{12}&a_{13}\\a_{21}&a_{22}&a_{23}\\a_{31}&a_{32}&a_{33}\end{vmatrix} = a_{11}\begin{vmatrix}a_{22}&a_{23}\\a_{32}&a_{33}\end{vmatrix}-a_{21}\begin{vmatrix}a_{12}&a_{13}\\a_{32}&a_{33}\end{vmatrix}+
a_{31}\begin{vmatrix}a_{12}&a_{13}\\a_{22}&a_{23}\end{vmatrix}


固有値固有ベクトル

<固有値固有ベクトルの概要>

ある行列Aに対して、 \boldsymbol{A\vec{x}=λ\vec{x}}となるような特別なベクトル\vec{x}と係数\boldsymbol{λ}の値がある時、このベクトル\vec{x}を「固有ベクトル」、係数λを「固有値という。直感的なイメージとしては、行列Aがベクトル\vec{x}を同方向に\boldsymbol{λ}倍するというイメージ(行列という変換器によって、ベクトルxを向きを変えないまま変換する感じ。)

固有値は、1つではなく、複数存在する場合もある。
固有ベクトルは、固有値λに対して、\boldsymbol{(A-λI)\vec{x}=0}となるようなベクトル\vec{x}を指す。固有値ごとに固有ベクトルは異なる。


<実際に解いてみる>

 \boldsymbol{A} =\begin{pmatrix}3&2&0\\0&2&0\\0&0&1\end{pmatrix}固有値固有ベクトルを求める

手順
① det(A-λI)=0を計算し固有値λを求める
 \boldsymbol{det(A)} =\begin{vmatrix}3-λ&2&0\\0&2-λ&0\\0&0&1-λ\end{vmatrix} = 0 →これを解いて、λ=3, 2, 1となる。

② 以下の式にλを代入し、ベクトルxを求める

 \begin{pmatrix}3&2&0\\0&2&0\\0&0&1\end{pmatrix}\begin{pmatrix}x_1&x_2&x_3\end{pmatrix}=λ\begin{pmatrix}x_1&x_2&x_3\end{pmatrix}
λ=3のとき、 \boldsymbol{\vec{x}=t(1, 0, 0)}
λ=2のとき、 \boldsymbol{\vec{x}=t(2, -1, 0)}
λ=1のとき、 \boldsymbol{\vec{x}=t(0, 0, 1)}

固有値分解

固有値を対角線上に並べた行列Λと、固有ベクトルを並べた行列vを考える。

 \boldsymbol{Λ} =\begin{pmatrix}λ_1&0&0\\0&λ_2&0\\0&0&\cdots\end{pmatrix} ,  \boldsymbol{V} =\begin{pmatrix}\vec{v_1}&\vec{v_2}&\vec{v_3}&\cdots\end{pmatrix}

このとき

 \boldsymbol{A = VΛV^{-1}} が成り立つ。

このように、正方行列を3つの行列の積に変換することを固有値分解という。


<実際に解いてみる>

 \boldsymbol{A} =\begin{pmatrix}2&1\\0&6\end{pmatrix}固有値分解せよ

手順
固有値λを求める。行列式detA=0を解いて、 \boldsymbol{(2-λ)(6-λ)=0}を解き、固有値λ=2,6。
固有ベクトルxを求める。λ=2のとき、\vec{x} = (1,0)の定数倍、λ=6のとき、\vec{x} = (1, 4)の定数倍となる
③ΛとVを求める。 \boldsymbol{Λ}=\begin{pmatrix}2&0\\0&6\end{pmatrix} \boldsymbol{V}=\begin{pmatrix}1&1\\0&4\end{pmatrix} \boldsymbol{V^{-1}}=\begin{pmatrix}1&-1/4\\0&1/4\end{pmatrix}
 \boldsymbol{A = VΛV^{-1}}なので、 \boldsymbol{A}=\begin{pmatrix}1&1\\0&4\end{pmatrix}\begin{pmatrix}2&0\\0&6\end{pmatrix}\begin{pmatrix}1&-1/4\\0&1/4\end{pmatrix}

特異値分解

<概要>
固有値計算は正方行列に対してのみであったが、任意の形の行列でも同様の分解をできるようにしたのが特異値分解
・求め方の流れとしては、ある行列Mの転置行列 \boldsymbol{M^{-1}} との積をとることで正方行列に変換し、その正方行列で固有値分解をする。
 (行列 \boldsymbol{MM^{-1}}と行列 \boldsymbol{M^{-1}M}をそれぞれ固有値分解する)
 \boldsymbol{MM^{-1}}固有値分解して得られる固有値が「元の行列Mの特異値の2乗」となっており、固有ベクトルが左特異ベクトルと呼ばれる。
 \boldsymbol{M^{-1}M}固有値分解して得られる固有ベクトルを右特異ベクトルと呼ばれる。


<実際に解いてみる>


手順

 \boldsymbol{MM^{-1}} と、 \boldsymbol{M^{-1}M} をそれぞれ固有値分解する。

 \boldsymbol{MM^{-1}}=\begin{pmatrix}14&10\\10&14\end{pmatrix}=\begin{pmatrix}1/\sqrt{2}&-1/\sqrt{2}\\1/\sqrt{2}&1/\sqrt{2}\end{pmatrix}\begin{pmatrix}24&0\\0&4\end{pmatrix}\begin{pmatrix}1/\sqrt{2}&-1/\sqrt{2}\\1/\sqrt{2}&1/\sqrt{2}\end{pmatrix}^{-1}

 \boldsymbol{M^{-1}M}=\begin{pmatrix}10&6&8\\8&8&8\\6&8&10\end{pmatrix}=\begin{pmatrix}1/\sqrt{3}&1/\sqrt{2}&1/\sqrt{6}\\1/\sqrt{3}&0&-2/\sqrt{6}\\1/\sqrt{3}&-1/\sqrt{2}&1/\sqrt{6}\end{pmatrix}\begin{pmatrix}24&0&0\\0&4&0\\0&0&0\end{pmatrix}\begin{pmatrix}1/\sqrt{3}&1/\sqrt{2}&1/\sqrt{6}\\1/\sqrt{3}&0&-2/\sqrt{6}\\1/\sqrt{3}&-1/\sqrt{2}&1/\sqrt{6}\end{pmatrix}^{-1}


 \boldsymbol{MM^{-1}}のベクトルの左辺を左特異ベクトル、 \boldsymbol{M^{-1}M}のベクトルの右辺を右特異ベクトルとし、真ん中の固有値行列の平方根をとる

 \boldsymbol{A}=\begin{pmatrix}1/\sqrt{2}&-1/\sqrt{2}\\1/\sqrt{2}&1/\sqrt{2}\end{pmatrix}\begin{pmatrix}2\sqrt{6}&0&0\\0&2&0\end{pmatrix}\begin{pmatrix}1/\sqrt{3}&1/\sqrt{2}&1/\sqrt{6}\\1/\sqrt{3}&0&-2/\sqrt{6}\\1/\sqrt{3}&-1/\sqrt{2}&1/\sqrt{6}\end{pmatrix}^{-1}


<応用領域>
特異値分解は、画像データの圧縮など次元削減の場面で応用されている技術