【第1回】機械学習における線形代数と微分積分の基礎

機械学習

このブログの目的

機械学習はさまざまな分野で活用されており、その基礎となる数学の理解が重要視されています。本シリーズでは、日本の高校生でも理解できる範囲で、機械学習を支える数学の基礎を3回にわたって解説します。

機械学習を理解するための基礎作り
このシリーズでは、機械学習を学ぶために必要な数学の基礎をわかりやすく紹介します。数式をただ覚えるのではなく、「なぜこの数学が必要なのか」を一緒に考えていきます。

難しい概念もゆっくりサポート
難しそうな数式や考え方が出てきても、安心してください。各トピックごとに、例を交えながら一歩ずつ進んでいきます。例えば、微分がどうして重要なのか、行列がどう使われるのかなど、学ぶ意味がわかるように説明します。

自分のペースで学べる工夫
急ぐ必要はありません。このシリーズは、わからないところがあっても気にせず、自分のペースで学べるようにサポートする内容になっています。例題を多く使い、実際に使える知識にしていきます。

第1回の目標

  1. 機械学習における数理の基礎理解
    機械学習を支える数理として、なぜ「線形代数」と「微分積分」が重要かを認識し、それらの役割を簡潔に理解する。
  2. 基本概念の習得
    ベクトルや行列、微分や積分の定義や役割を具体的に学び、特に機械学習アルゴリズムにおける重要性をイメージできるようにする。
  3. 応用例を通じた理解
    PCAや勾配降下法といった機械学習手法の具体例を通じて、学んだ数理概念がどのようにアルゴリズムに応用されるかを理解する。

線形代数

ベクトルと行列

特徴ベクトルとは?

特徴ベクトルとは、データの特性を数値で表現したものです。機械学習では、データポイントを数値の集合であるベクトルとして表現します。

例題:ある生徒のテストの点数が数学80点、英語70点、理科90点だったとします。このデータを特徴ベクトルとして表すと

$$x = \begin{pmatrix} 80 \\ 70 \\ 90 \end{pmatrix}$$

となります。

入力データの行列表現

複数のデータをまとめて扱うために、ベクトルを行列として表現します。

例題:3人の生徒のテスト点数を以下のように表します。

$$X = \begin{pmatrix} 80 & 85 & 78 \\ 70 & 75 & 68 \\ 90 & 95 & 88 \end{pmatrix}$$

ここで、各行が生徒ごとの特徴ベクトルを示しています。

行列演算

転置行列の概念と応用

転置行列とは、行列の行と列を入れ替えたものです。

例題:

行列 $A$ を

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

とすると、その転置行列 $A^T$ は

$$A^T = \begin{pmatrix} 1 & 3 & 5 \\ 2 & 4 & 6 \end{pmatrix}$$

となります。

単位行列 $I$

単位行列とは、正方行列の一種であり、主対角線上の要素がすべて1で、それ以外の要素がすべて0である行列です。単位行列は、行列の乗法において「乗算の単位」となるため、この名称が付けられています。

2次の単位行列

$$I_2 = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix}$$

3次の単位行列

$$I_3 = \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix}$$

逆行列の計算と意義

逆行列とは、ある行列 $A$ に対して、$A^{-1}$ を掛けると単位行列 $I$ になる行列のことです。

$$AA^{-1} = A^{-1}A = I$$

例題:

2×2の行列

$$A = \begin{pmatrix} a & c \\ b & d \end{pmatrix}$$

の逆行列 $A^{-1}$ は、行列式 $\det(A) = ad – bc$ が0でない場合に、

$$A^{-1} = \frac{1}{\text{det}(A)} \begin{pmatrix} d & -c \\ -b & a \end{pmatrix}$$

で計算できます。

具体例:

$$A = \begin{pmatrix} 2 & 5 \\ 1 & 3 \end{pmatrix}$$

行列式は

$$\text{det}(A) = (2)(3) – (1)(5) = 6 – 5 = 1$$

逆行列は

$$A^{-1} = \begin{pmatrix} 3 & -5 \\ -1 & 2 \end{pmatrix}$$

行列積の基本と機械学習への応用

行列積とは、2つの行列を掛け合わせる操作です。

例題:

$$A = \begin{pmatrix} 1 & 3 \\ 2 & 4 \end{pmatrix}, B = \begin{pmatrix} 5 & 7 \\ 6 & 8 \end{pmatrix}$$

行列積 $C=AB$ は

$$C = \begin{pmatrix}
(1)(5) + (2)(7) & (1)(6) + (2)(8) \\
(3)(5) + (4)(7) & (3)(6) + (4)(8)
\end{pmatrix}
= \begin{pmatrix}
19 & 22 \\
43 & 50
\end{pmatrix}$$

機械学習では、重み行列と入力ベクトルの積としてモデルの出力を計算する際に用いられます。

固有値と固有ベクトル(3×3行列の場合)

固有値と固有ベクトルの定義

行列 $A$ の固有値 $λ$ と固有ベクトル $v$ は、以下の関係を満たす非ゼロベクトル $v$ とスカラー $λ$ です。

$$Av=λv$$

用語定義役割
固有値行列 ( A ) に対して、変換後も方向が変わらないスカラー値 $( \lambda )$ のこと。式:$( A \mathbf{v} = \lambda \mathbf{v})$変換の強さを示し、PCAではその方向のデータの分散(ばらつき)の大きさを表す。
固有ベクトル行列 ( A ) に対して、変換後も方向が変わらないベクトル $( \mathbf{v} ) のこと。式:( A \mathbf{v} = \lambda \mathbf{v} )$データの主要な変動の方向を示し、PCAでは次元削減後の新しい軸(主成分)を形成する。

固有値分解(Eigenvalue Decomposition)

特徴説明
定義正方行列 $( A )$ を$( A = V \Lambda V^{-1} )$の形式で分解する。
適用可能な行列の種類対称行列、または対角化可能な正方行列
役割行列の性質を理解し、主成分分析(PCA)などに使用される。
固有値の性質固有値は複素数の場合もあるが、対称行列の場合は実数となる。
固有ベクトルの性質固有ベクトルは直交する(特に対称行列の場合)。

3×3行列の例

考える行列 $A$ を以下のように定義します。

$$A = \begin{pmatrix} 4 & 1 & 1 \\ 1 & 4 & 1 \\ 1 & 1 & 4 \end{pmatrix}$$

固有値の計算

固有値 $λ$ を求めるためには、次の特性方程式を解きます。

$$\text{det}(A – \lambda I) = 0$$

ここで、$I$ は単位行列です。

$$A – \lambda I = \begin{pmatrix} 4 – \lambda & 1 & 1 \\ 1 & 4 – \lambda & 1 \\ 1 & 1 & 4 – \lambda \end{pmatrix}$$

行列式を計算します。

$$\text{det}(A – \lambda I) = (4 – \lambda)^3 – 3(4 – \lambda)(1)^2 + 2(1)^3 = 0$$

計算を進めます。

$$(4 – \lambda)^3 – 3(4 – \lambda) + 2 = 0$$

それぞれの式を展開すると、

$$(4 – \lambda)^3 = 4^3 – 3 \times 4^2 \times \lambda + 3 \times 4 \times \lambda^2 – \lambda^3 = 64 – 48\lambda + 12\lambda^2 – \lambda^3$$
$$-3(4 – \lambda)+2 = -12 + 3\lambda +2$$

これらを元の方程式に代入します。

$$64 – 48\lambda + 12\lambda^2 – \lambda^3 – 12 + 3\lambda + 2 = 0$$

各項を整理すると、

$$-\lambda^3 + 12\lambda^2 – 45\lambda + 54 = 0$$

標準的な多項式の形に整えます。

$$\lambda^3 – 12\lambda^2 + 45\lambda – 54 = 0$$

有理根定理によれば、この方程式の有理根は $±1,±2,±3,±6,±9,±18,±27,±54$ の中に存在します。これらの候補から実際に代入して確認します。

試しに $λ=3$ を代入

$$3^3 – 12 \times 3^2 + 45 \times 3 – 54 = 27 – 108 + 135 – 54 = 0$$

したがって、$λ=3$ は方程式の一つの根です。

因数分解

λ=3 が根であることがわかったので、$(λ−3)$ を因子として多項式を因数分解します。

左辺の多項式を確認します

$$P(\lambda) = \lambda^3 – 12\lambda^2 + 45\lambda – 54$$

因数分解の仮定

$$P(λ)=(λ−3)(Q(λ))$$

ここで $Q(λ)$ は2次の多項式とします。

多項式の形を仮定します

$$Q(\lambda) = \lambda^2 + b\lambda + c$$

とします。よって、次のように展開します。

$$P(\lambda) = (\lambda – 3)(\lambda^2 + b\lambda + c)$$

とします。よって、次のように展開します。

展開します

$$= \lambda^3 + b\lambda^2 + c\lambda – 3\lambda^2 – 3b\lambda – 3c$$
$$= \lambda^3 + (b – 3)\lambda^2 + (c – 3b)\lambda – 3c$$

左辺の係数と比較します

$$\text{左辺の係数:} \quad
\begin{cases}
1 & \text{( } \lambda^3 \text{ の係数)} \\
-12 & \text{( } \lambda^2 \text{ の係数)} \\
45 & \text{( } \lambda \text{ の係数)} \\
-54 & \text{( 定数項)}
\end{cases}$$

これにより、次の連立方程式を得ます。

$$\begin{cases}
b – 3 = -12 \\
c – 3b = 45 \\
-3c = -54
\end{cases}$$

連立方程式を解きます

最初の式から

$$b=−12+3=−9$$

次の式に代入して

$$c−3(−9)=45⟹c+27=45⟹c=18$$

最後の式で確認

$$−3(18)=−54$$

したがって、因数は次のようになります

$$P(\lambda) = (\lambda – 3)(\lambda^2 – 9\lambda + 18)$$

多項式の除法(合成除法)

故に次のような数式が成り立ちます。

$$\lambda^3 – 12\lambda^2 + 45\lambda – 54 = (\lambda – 3)(\lambda^2 – 9\lambda + 18)$$

残りの二次方程式を解きます。

$$λ^2−9_λ+18=0$$

解の公式を用いる

$$x = \frac{-b \pm \sqrt{b^2 – 4ac}}{2a} = \frac{9 \pm \sqrt{81 – 72}}{2} = \frac{9+3}{2}$$

よって、

$$\lambda = \frac{12}{2} = 6 \text{または} \lambda = \frac{6}{2} = 3$$

最終的な解

最終的に、方程式の根は以下の通りです。

$$λ_1=6, λ_2, λ_3=3$$

固有ベクトルの計算

$λ_6$の場合

行列 $A$ に対して $(A−6I)v$ を求める手順:

$$A = \begin{pmatrix} 4 & 1 & 1 \\ 1 & 4 & 1 \\ 1 & 1 & 4 \end{pmatrix}$$

単位行列 $I$ は、対角成分がすべて1で他の成分が0の行列です。ここでは、3×3の単位行列を使用します。

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

行列 $|A−6I$の計算

$$A – 6I = \begin{pmatrix} 4 & 1 & 1 \\ 1 & 4 & 1 \\ 1 & 1 & 4 \end{pmatrix} – 6 \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix}
= \begin{pmatrix} 4 – 6 & 1 – 0 & 1 – 0 \\ 1 – 0 & 4 – 6 & 1 – 0 \\ 1 – 0 & 1 – 0 & 4 – 6 \end{pmatrix}
= \begin{pmatrix} -2 & 1 & 1 \\ 1 & -2 & 1 \\ 1 & 1 & -2 \end{pmatrix}$$

ベクトル $v$ の定義

$$v = \begin{pmatrix} v_1 \\ v_2 \\ v_3 \end{pmatrix}$$

$(A−6I)v$ の計算

行列 $A−6$とベクトル $v$ の積を計算します。

$$(A – 6I)v = \begin{pmatrix} -2 & 1 & 1 \\ 1 & -2 & 1 \\ 1 & 1 & -2 \end{pmatrix} \begin{pmatrix} v_1 \\ v_2 \\ v_3 \end{pmatrix} = \begin{pmatrix} 0 \\ 0 \\ 0 \end{pmatrix}$$

$$=\begin{pmatrix} -2v_1 + v_2 + v_3 \\ v_1 – 2v_2 + v_3 \\ v_1 + v_2 – 2v_3 \end{pmatrix}= \begin{pmatrix} 0 \\ 0 \\ 0 \end{pmatrix}$$

連立方程式は、

$$\begin{cases}
-2v_1 + v_2 + v_3 = 0 \\
v_1 – 2v_2 + v_3 = 0 \\
v_1 + v_2 – 2v_3 = 0
\end{cases}$$

連立方程式の計算

それでは、以下の連立方程式を解いていきます。

$$\begin{cases}
-2v_1 + v_2 + v_3 = 0 \\
v_1 – 2v_2 + v_3 = 0 \\
v_1 + v_2 – 2v_3 = 0
\end{cases}$$

まず、各方程式を整理します。

$$-2v_1 + v_2 + v_3 = 0 \Rightarrow v_2 + v_3 = 2v_1 \quad (1)$$
$$v_1 – 2v_2 + v_3 = 0 \Rightarrow v_1 + v_3 = 2v_2 \quad (2)$$
$$v_1 + v_2 – 2v_3 = 0 \Rightarrow v_1 + v_2 = 2v_3 \quad (3)$$

代入による解法

まず、方程式 (1) から $v_2$​ を $v_1$​ と $v_3$​ の式で表します。

$$v_2 = 2v_1 – v_3 \quad (4)$$

次に、方程式 (2) に方程式 (4) を代入します。

$$v_1 + v_3 = 2v_2 = 2(2v_1 – v_3) = 4v_1 – 2v_3$$

これを整理すると、

$$v_1 + v_3 = 4v_1 – 2v_3 \Rightarrow -3v_1 + 3v_3 = 0 \Rightarrow v_1 = v_3 \quad (5)$$

他の変数の関係性

方程式 (5) を方程式 (4) に代入します。

$$v_2 = 2v_1 – v_3 = 2v_1 – v_1 = v_1 \Rightarrow v_2 = v_1 \quad (6)$$

最後に、方程式 (3) に$v_1 = v_3 \quad \text{と} \quad v_2 = v_1$を代入します。

$$v_1 + v_2 = 2v_3 \Rightarrow v_1 + v_1 = 2v_1 \Rightarrow 2v_1 = 2v_1$$

これは恒等的な関係であり、特定の制約を与えません。したがって、変数間の関係性は以下の通りです。

$$v_1 = v_2 = v_3$$

一般解の表現

すべての変数が等しいため、解は任意のスカラー $t$ に対して以下のように表せます。

$$v = \begin{pmatrix} v_1 \\ v_2 \\ v_3 \end{pmatrix} = v^{(1)} \begin{pmatrix} 1 \\ 1 \\ 1 \end{pmatrix}, \quad v^{(1)} \in \mathbb{R}$$

$λ_2​=λ_3​=3$ の場合

行列 $A$ に対して $(A−3I)v$ を求める手順:

$(A−3I)v$の計算

$$A = \begin{pmatrix} 4 & 1 & 1 \\ 1 & 4 & 1 \\ 1 & 1 & 4 \end{pmatrix}$$

$$A – 3I = \begin{pmatrix} 4 & 1 & 1 \\ 1 & 4 & 1 \\ 1 & 1 & 4 \end{pmatrix} – 3 \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix}
= \begin{pmatrix} 4 – 3 & 1 – 0 & 1 – 0 \\ 1 – 0 & 4 – 3 & 1 – 0 \\ 1 – 0 & 1 – 0 & 4 – 3 \end{pmatrix}
= \begin{pmatrix} 1 & 1 & 1 \\ 1 & 1 & 1 \\ 1 & 1 & 1 \end{pmatrix}$$

$$(A – 3I)v = \begin{pmatrix} 1 & 1 & 1 \\ 1 & 1 & 1 \\ 1 & 1 & 1 \end{pmatrix} \begin{pmatrix} v_1 \\ v_2 \\ v_3 \end{pmatrix} = \begin{pmatrix} 0 \\ 0 \\ 0 \end{pmatrix}$$

連立方程式の計算

与えられた行列方程式は以下のようになります。

$$\begin{cases}
v_1 + v_2 + v_3 = 0 \quad (1) \\
v_1 + v_2 + v_3 = 0 \quad (2) \\
v_1 + v_2 + v_3 = 0 \quad (3)
\end{cases}$$

方程式の整理

まず、各方程式を確認します。ここで注目すべき点は、すべての方程式が同一であることです。したがって、実質的に一つの独立した方程式しか存在しません。

$$v_1+v_2+v_3=0(唯一の独立方程式)$$

この方程式から、一つの変数を他の変数で表現することができます。ここでは、$v_3$​ を $v_1$​ と $v_2$​ で表現します。

$$v_3=−v_1−v_2$$

これにより、ベクトル $v$ は以下のように表現できます。

$$v = \begin{pmatrix} v_1 \\ v_2 \\ v_3 \end{pmatrix} = \begin{pmatrix} v_1 \\ v_2 \\ -v_1 – v_2 \end{pmatrix}$$

ここで、$v_1$​ と $v_2$​ は自由変数であり、任意の実数値を取ることができます。したがって、一般解は次のように表せます。

$$v = v_1 \begin{pmatrix} 1 \\ 0 \\ -1 \end{pmatrix} + v_2 \begin{pmatrix} 0 \\ 1 \\ -1 \end{pmatrix}, \quad v_1, v_2 \in \mathbb{R}$$

$$u_1 = \begin{pmatrix} 1 \\ 0 \\ -1 \end{pmatrix}, \quad u_2 = \begin{pmatrix} 0 \\ 1 \\ -1 \end{pmatrix}$$

したがって、解空間はこれらの基底ベクトルの線形結合として表されます。

$$v = v_1 u_1 + v_2 u_2 = v_1 \begin{pmatrix} 1 \\ 0 \\ -1 \end{pmatrix} + v_2 \begin{pmatrix} 0 \\ 1 \\ -1 \end{pmatrix}, \quad v_1, v_2 \in \mathbb{R}$$

これは、解空間が二次元の平面であり、基底ベクトル$\begin{pmatrix} 1 \\ 0 \\ -1 \end{pmatrix} \quad \text{と} \quad \begin{pmatrix} 0 \\ 1 \\ -1 \end{pmatrix}$によって張られていることを意味します。

それぞれの固有ベクトルは

  • 固有値 $λ_1=6$ に対応する固有ベクトル$\begin{pmatrix} 1 \\ 1 \\ -1 \end{pmatrix}$
  • 固有値 $λ_2=3$ に対応する固有ベクトル$\begin{pmatrix} 1 \\ 0 \\ -1 \end{pmatrix}$
  • 固有値 $λ_3=3$ に対応する固有ベクトル$\begin{pmatrix} 0 \\ 1 \\ -1 \end{pmatrix}$

次元削減手法(PCA)での利用方法

主成分分析(PCA)の概要

主成分分析(PCA)は、高次元データを低次元に変換し、データの分散が最大となる方向(主成分)を見つける手法です。PCAは固有値と固有ベクトルを利用してデータの主な特徴を抽出します。

  1. データの中心化
  2. 分散共分散行列の計算
  3. 固有値と固有ベクトルの計算
  4. 主成分の選択
  5. データの低次元への射影

今回は、具体的な3×3行列を用いてPCAの計算過程を詳しく説明します。

3×3行列を用いたPCAの詳細な計算例

例題:

以下のデータ行列 $X$ を主成分分析(PCA)を用いて次元削減します。

$$X = \begin{pmatrix} 2 & 0 & 1 \\ 0 & 1 & 3 \\ 1 & 3 & 2 \end{pmatrix}$$

ここで、各行が異なるデータポイント(サンプル)、各列が異なる特徴量(変数)を表しています。

ステップ1: データの中心化

各特徴量(列)の平均を計算し、データを平均が0になるように中心化します。

各列の平均を計算

$$\mu = \begin{pmatrix} \mu_1 \\ \mu_2 \\ \mu_3 \end{pmatrix} = \frac{1}{n} \sum_{i=1}^{n} X_i = \frac{1}{3} \begin{pmatrix} 2 + 0 + 1 \\ 0 + 1 + 3 \\ 1 + 3 + 2 \end{pmatrix} = \begin{pmatrix} 1 \\ 1.3 \\ 2 \end{pmatrix}$$

データの中心化

各データポイントから対応する特徴量の平均を引きます。

$$\tilde{X} = X – \mu =
\begin{pmatrix}
2 – 1 & 0 – \frac{4}{3} & 1 – 2 \\
0 – 1 & 1 – \frac{4}{3} & 3 – 2 \\
1 – 1 & 3 – \frac{4}{3} & 2 – 2
\end{pmatrix} =
\begin{pmatrix}
1 & – \frac{4}{3} & -1 \\
-1 & -\frac{1}{3} & 1 \\
0 & \frac{3}{5} & 0
\end{pmatrix}$$

ステップ2:分散共分散行列の計算

分散共分散行列 $C$ を計算します。これは、特徴量間の共分散を表す行列です。

$$C = \frac{1}{n-1} \tilde{X}^T \tilde{X}$$

ここで、$n=3$ なので、

$$C = \frac{1}{2} \tilde{X}^T \tilde{X}$$

転置行列 $X^T$の計算

$$\tilde{X}^T = \begin{pmatrix}
1 & -1 & 0 \\
-\frac{4}{3} & -\frac{1}{3} & \frac{5}{3} \\
-1 & 1 & 0
\end{pmatrix}$$

行列積 $X^TX$ の計算

$$\tilde{X}^T \tilde{X} = \begin{pmatrix}
1 & -1 & 0 \\
-\frac{4}{3} & -\frac{1}{3} & \frac{5}{3} \\
-1 & 1 & 0
\end{pmatrix}
\begin{pmatrix}
1 & -\frac{4}{3} & -1 \\
-1 & \frac{1}{3} & 1 \\
0 & \frac{5}{3} & 0
\end{pmatrix}$$

各要素を計算します。

  • $C_{11}$​:

$$1 \times 1 + (-1) \times (-1) + 0 \times 0 = 1 + 1 + 0 = 2$$

  • $C_{12}$​:

$$1 \times \left( -\frac{4}{3} \right) + (-1) \times \left( -\frac{1}{3} \right) + 0 \times \frac{5}{3} = -\frac{4}{3} + \frac{1}{3} + 0 = -1$$

  • $C_{13}$​:

$$1 \times (-1) + (-1) \times 1 + 0 \times 0 = -1 – 1 + 0 = -2$$

  • $C_{21}$​:

$$-\frac{4}{3} \times 1 + \left(-\frac{1}{3}\right) \times (-1) + \frac{5}{3} \times 0 = -\frac{4}{3} + \frac{1}{3} + 0 = -1$$

  • $C_{22}$​:

$$-\frac{4}{3} \times \left(-\frac{4}{3}\right) + \left(-\frac{1}{3}\right) \times \left(-\frac{1}{3}\right) + \frac{5}{3} \times \frac{5}{3} = \frac{16}{9} + \frac{1}{9} + \frac{25}{9} = \frac{42}{9} = \frac{14}{3}$$

  • $C_{23}$​:

$$-\frac{4}{3} \times (-1) + \left(-\frac{1}{3}\right) \times 1 + \frac{5}{3} \times 0 = \frac{4}{3} – \frac{1}{3} + 0 = 1$$

  • $C_{31}​$:

$$-1 \times 1 + 1 \times (-1) + 0 \times 0 = -1 – 1 + 0 = -2$$

  • $C_{32}$​:

$$-1 \times \left( -\frac{4}{3} \right) + 1 \times \left( -\frac{1}{3} \right) + 0 \times \frac{5}{3} = \frac{4}{3} – \frac{1}{3} + 0 = 1$$

  • $C_{33}$

$$-1 \times (-1) + 1 \times 1 + 0 \times 0 = 1 + 1 + 0 = 2$$

したがって、

$$\tilde{X}^T \tilde{X} = \begin{pmatrix}
2 & -1 & -2 \\
-1 & \frac{14}{3} & 1 \\
-2 & 1 & 2
\end{pmatrix}$$

分散共分散行列 $C$ の計算

$$C = \frac{1}{2} \tilde{X}^T \tilde{X} = \frac{1}{2} \begin{pmatrix}
2 & -1 & -2 \\
-1 & \frac{14}{3} & 1 \\
-2 & 1 & 2
\end{pmatrix} = \begin{pmatrix}
1 & -0.5 & -1 \\
-0.5 & \frac{7}{3} & 0.5 \\
-1 & 0.5 & 1
\end{pmatrix}$$

ステップ3:固有値と固有ベクトルの計算

分散共分散行列 $C$ の固有値と固有ベクトルを求めます。固有値はデータの分散量を表し、固有ベクトルはその分散の方向を示します。

特性方程式の設定

固有値 $λ$ を求めるために、次の特性方程式を解きます。

$$det(C−λI)=0$$

ここで、$I$ は3×3の単位行列です。

$$C – \lambda I = \begin{pmatrix}
1 – \lambda & -0.5 & -1 \\
-0.5 & \frac{7}{3} – \lambda & 0.5 \\
-1 & 0.5 & 1 – \lambda
\end{pmatrix}$$

行列式を計算します。

$$\text{det}(C – \lambda I) = (1 – \lambda) \left( \left( \frac{7}{3} – \lambda \right) (1 – \lambda) – 0.5 \times 0.5 \right) – (-0.5) \left( -0.5 (1 – \lambda) – 0.5 \times (-1) \right) – 1 \left( -0.5 \times 0.5 – \left( \frac{7}{3} – \lambda \right) \times (-1) \right)$$

具体的な計算は複雑になるため、ここでは数値的な手法を用いて固有値を求めます。

$$\lambda_1 \approx 2.0, \quad \lambda_2 \approx 1.0, \quad \lambda_3 \approx 0.0$$

(実際の計算では、固有値は約2.0、1.0、0.0となります。)

固有ベクトルの計算

固有値ごとに固有ベクトルを求めます。

  • $λ_1​$=2.0 の場合

$$(C – 2I)v = \begin{pmatrix}
-1 & -0.5 & -1 \\
-0.5 & \frac{7}{3} – 2 & 0.5 \\
-1 & 0.5 & -1
\end{pmatrix} \begin{pmatrix}
v_1 \\
v_2 \\
v_3
\end{pmatrix} = \begin{pmatrix}
0 \\
0 \\
0
\end{pmatrix}$$

$$\frac{7}{3} – 2 = \frac{7}{3} – \frac{6}{3} = \frac{1}{3}$$

連立方程式は、

$$\begin{cases}
-1v_1 – 0.5v_2 – 1v_3 = 0 \\
-0.5v_1 + \frac{1}{3}v_2 + 0.5v_3 = 0 \\
-1v_1 + 0.5v_2 – 1v_3 = 0
\end{cases}$$

この連立方程式を解くと、固有ベクトルは以下のようになります。

$$v^{(1)} = \begin{pmatrix}
1 \\
-1 \\
1
\end{pmatrix}$$

正規化すると、

$$v^{(1)} = \frac{1}{\sqrt{3}}\begin{pmatrix}
1 \\
-1 \\
1
\end{pmatrix}$$

  • $λ_2​=1.0$ の場合

同様にして、固有ベクトルを求めます。

$$v^{(2)} = \begin{pmatrix}
1 \\
1 \\
1
\end{pmatrix}$$

正規化すると、

$$v^{(2)} = \frac{1}{\sqrt{3}}\begin{pmatrix}
1 \\
1 \\
1
\end{pmatrix}$$

  • $λ_3​=0.0$ の場合

固有ベクトルは以下のようになります。

$$v^{(3)} = \begin{pmatrix}
1 \\
0 \\
-1
\end{pmatrix}$$

正規化すると、

$$v^{(3)} = \frac{1}{\sqrt{2}}\begin{pmatrix}
1 \\
0 \\
-1
\end{pmatrix}$$

それぞれの固定ベクトルは

  • 固有値 $λ_1=2.0$に対応する固有ベクトル

$$v^{(1)} = \frac{1}{\sqrt{3}}\begin{pmatrix}
1 \\
-1 \\
1
\end{pmatrix}$$

固有値 $λ_2=1.0$ に対応する固有ベクトル

$$v^{(2)} = \frac{1}{\sqrt{3}}\begin{pmatrix}
1 \\
1 \\
1
\end{pmatrix}$$

固有値 $λ_3=0.0$ に対応する固有ベクトル

$$v^{(3)} = \frac{1}{\sqrt{2}}\begin{pmatrix}
1 \\
0 \\
-1
\end{pmatrix}$$

ステップ4:主成分の選択

固有値が大きい順に主成分を選びます。固有値はそれぞれの主成分がデータにどれだけの分散を説明するかを示します。

今回の例では、

$$λ_1=2.0, λ_2=1.0, λ_3=0.0$$

よって、主成分1は固有値2.0、主成分2は固有値1.0です。固有値0.0の主成分は無視します。

ステップ5:データの低次元への射影

選択した主成分にデータを射影します。今回は主成分1と主成分2を用いて、3次元データを2次元に射影します。

固有ベクトル行列の構成

選択した主成分の固有ベクトルを列に持つ行列 $V_k$ を構成します。

$$V_k = \begin{pmatrix}
v^{(1)}
v^{(2)}
\end{pmatrix} = \begin{pmatrix}
{\frac{1}{\sqrt{3}} \\
\frac{1}{\sqrt{3}} \\}\\
{-\frac{1}{\sqrt{3}} \\
\frac{1}{\sqrt{3}} \\}\\
{\frac{1}{\sqrt{3}}\\
\frac{1}{\sqrt{3}}\\}
\end{pmatrix}$$

射影の計算

射影されたデータ $Y$ は、

$$Y = \tilde{X} \times V_k = \begin{pmatrix}
1 & -\frac{4}{3} & -1 \\
-1 & -\frac{1}{3} & 1 \\
0 & \frac{5}{3} & 0
\end{pmatrix} \begin{pmatrix}
{\frac{1}{\sqrt{3}} \\
\frac{1}{\sqrt{3}} \\}\\
{-\frac{1}{\sqrt{3}} \\
\frac{1}{\sqrt{3}} \\}\\
{\frac{1}{\sqrt{3}}\\
\frac{1}{\sqrt{3}}\\}
\end{pmatrix}$$

具体的に計算します。

  • 第一主成分への射影 ($y_1$)

$$y_1 = 1 \times \frac{1}{\sqrt{3}} + \left(-\frac{4}{3}\right) \times \left(-\frac{1}{\sqrt{3}}\right) + (-1) \times \left(\frac{1}{\sqrt{3}}\right) \\
= \frac{1}{\sqrt{3}} + \frac{4}{3\sqrt{3}} – \frac{1}{\sqrt{3}} \\
= \frac{4}{3\sqrt{3}} = \frac{4}{3} \times \frac{\sqrt{3}}{3} = \frac{4\sqrt{3}}{9}$$

  • 第二主成分への射影 ($y_2$)

$$y_2 = 1 \times \frac{1}{\sqrt{3}} + \left(-\frac{4}{3}\right) \times \frac{1}{\sqrt{3}} + (-1) \times \frac{1}{\sqrt{3}} \\
= \frac{1}{\sqrt{3}} – \frac{4}{3\sqrt{3}} – \frac{1}{\sqrt{3}} \\
= -\frac{4}{3\sqrt{3}} \\
= -\frac{4\sqrt{3}}{9}$$

同様に他のデータポイントについても計算します。

  • データポイント1 ($X_1$​) の射影

$$y_{11}=\frac{4\sqrt{3}}{9}, y_{12}= -\frac{4\sqrt{3}}{9}$$

  • データポイント2 ($X_2$) の射影

$$y_{21} = -1 \times \frac{1}{\sqrt{3}} + \left(-\frac{1}{3}\right) \times \left(-\frac{1}{\sqrt{3}}\right) + 1 \times \frac{1}{\sqrt{3}} \\
= -\frac{1}{\sqrt{3}} + \frac{1}{3\sqrt{3}} + \frac{1}{\sqrt{3}} \\
= \frac{1}{3\sqrt{3}} = \frac{\sqrt{3}}{9}$$

$$y_{22} = -1 \times \frac{1}{\sqrt{3}} + \left(-\frac{1}{3}\right) \times \frac{1}{\sqrt{3}} + 1 \times \frac{1}{\sqrt{3}} \\
= -\frac{1}{\sqrt{3}} – \frac{1}{3\sqrt{3}} + \frac{1}{\sqrt{3}} \\
= -\frac{1}{3\sqrt{3}} = -\frac{\sqrt{3}}{9}$$

  • データポイント3 ($X_3$) の射影

$$y_{31} = 0 \times \frac{1}{\sqrt{3}} + \frac{5}{3} \times \left(-\frac{1}{\sqrt{3}}\right) + 0 \times \frac{1}{\sqrt{3}} = -\frac{5}{3\sqrt{3}} = -\frac{5\sqrt{3}}{9}$$

$$y_{32} = 0 \times \frac{1}{\sqrt{3}} + \frac{5}{3} \times \frac{1}{\sqrt{3}} + 0 \times \frac{1}{\sqrt{3}} = \frac{5}{3\sqrt{3}} = \frac{5\sqrt{3}}{9}$$

射影結果のまとめ

$$Y = \begin{pmatrix}
\frac{4\sqrt{3}}{9} & -\frac{4\sqrt{3}}{9} \\
\frac{\sqrt{3}}{9} & -\frac{\sqrt{3}}{9} \\
-\frac{5\sqrt{3}}{9} & \frac{5\sqrt{3}}{9}
\end{pmatrix}$$

これにより、3次元データが2次元に効果的に縮約され、データの主要なパターンを保持したまま可視化や解析が可能になります。

ステップ6:次元削減の結果の解釈

PCAによって次元を削減することで、データの複雑さを低減しつつ、主要な情報を保持できます。射影されたデータ $Y$ は、元のデータの分散が最大となる方向に沿って配置されています。これにより、データの可視化やさらなる解析が容易になります。

PCAの結果を視覚化

import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib  # 日本語表示のためのライブラリをインポート

# データ行列Xの定義
X = np.array([
    [2, 0, 1],
    [0, 1, 3],
    [1, 3, 2]
])

# ステップ1: データの中心化
mu = np.mean(X, axis=0)
X_centered = X - mu

# ステップ2: 分散共分散行列の計算
C = np.cov(X_centered, rowvar=False)

# ステップ3: 固有値と固有ベクトルの計算
eigenvalues, eigenvectors = np.linalg.eigh(C)

# 固有値のソート(大きい順)
sorted_indices = np.argsort(eigenvalues)[::-1]
eigenvalues = eigenvalues[sorted_indices]
eigenvectors = eigenvectors[:, sorted_indices]

# ステップ4: 主成分の選択(ここでは2主成分)
V_k = eigenvectors[:, :2]

# ステップ5: データの低次元への射影
Y = X_centered @ V_k

# 結果の表示
print("固有値:", eigenvalues)
print("主成分ベクトル (V_k):\n", V_k)
print("射影されたデータ (Y):\n", Y)

# データのプロット
plt.figure(figsize=(8, 6))
plt.scatter(Y[:, 0], Y[:, 1], color='blue', marker='o')

# ラベルのオフセットを設定
for i in range(Y.shape[0]):
    plt.text(Y[i, 0] + 0.1, Y[i, 1] + 0.1, f'X{i+1}', fontsize=12)

plt.title('PCAによる次元削減の結果', fontsize=16)  # タイトルを日本語に
plt.xlabel('主成分1', fontsize=14)  # X軸ラベルを日本語に
plt.ylabel('主成分2', fontsize=14)  # Y軸ラベルを日本語に
plt.xlim(Y[:, 0].min() - 1, Y[:, 0].max() + 1)  # X軸の範囲を設定
plt.ylim(Y[:, 1].min() - 1, Y[:, 1].max() + 1)  # Y軸の範囲を設定
plt.grid(True)
plt.axhline(0, color='black', linewidth=0.5, ls='--')  # Y=0のライン
plt.axvline(0, color='black', linewidth=0.5, ls='--')  # X=0のライン
plt.show()
固有値: [ 2.89314982e+00  1.44018351e+00 -3.43326713e-16]
主成分ベクトル (V_k):
 [[ 0.43891465 -0.55439511]
 [-0.78403308 -0.62071905]
 [-0.43891465  0.55439511]]
射影されたデータ (Y):
 [[ 1.92320673 -0.28116482]
 [-0.61648493  1.31569656]
 [-1.3067218  -1.03453174]]

図の説明

この図はPCA(主成分分析)を使った次元削減の結果を示します。

X軸は第一主成分(PC1)、Y軸は第二主成分(PC2)を表しています。

第一主成分はデータの最も重要な変動を捉え、第二主成分はその補完的な変動を表現します。この二つを使うことで、データの全体的な構造をより深く理解することが可能になります。

特異値分解 (SVD)

特異値分解(SVD)は、任意の $m \times n$ 行列 $A$ を3つの行列の積に分解する方法です。

$$A=UΣV^T$$

  • $U:m×m$ の直交行列で、左特異ベクトルを列に持ちます。
  • $Σ:m×n$ の対角行列で、対角成分が特異値です。
  • $V^T:n×n$ の直交行列の転置で、右特異ベクトルを列に持ちます。
特徴説明
定義任意の行列 $( A )$ を $( A = U \Sigma V^T )$ の形式で分解する。
適用可能な行列の種類任意の行列(正方行列、長方形行列)
役割次元削減やノイズ除去に効果的。データの変動の大きさを示す。
特異値の性質特異値は常に非負の実数。
特異ベクトルの性質左特異ベクトルと右特異ベクトルはそれぞれ直交する。

特異値 $σ_i $は、行列 $A^TA$ の固有値の平方根として定義されます。

3×3行列の例

$$A = \begin{pmatrix}
3 & 1 & 1 \\
1 & 3 & 1 \\
1 & 1 & 3
\end{pmatrix}$$

の特異値分解を求めます。

解答:

特異値の計算

特異値 $σ$は $A^T A$ の固有値の平方根です。まず、$A^T A$ を計算します。

$$A^T A = \begin{pmatrix}
3 & 1 & 1 \\
1 & 3 & 1 \\
1 & 1 & 3
\end{pmatrix}^T
\begin{pmatrix}
3 & 1 & 1 \\
1 & 3 & 1 \\
1 & 1 & 3
\end{pmatrix} = \begin{pmatrix}
11 & 7 & 7 \\
7 & 11 & 7 \\
7 & 7 & 11
\end{pmatrix}$$

次に、$A^T A$ の固有値を求めます。3×3の対称行列なので、固有値は実数です。

特性方程式を解くと、

$$det(A^TA−λ_I)=0$$

この行列式を展開すると、

$$(11 – \lambda)^3 – 3 \times 7^2 (11 – \lambda) + 2 \times 7^3 = 0$$

計算を進めると

$$(11 – \lambda)^3 – 147(11 – \lambda) + 686 = 0$$

解を求めると、固有値は以下の3つです。

$$λ_1=25, λ_2=9, λ_3=9$$

したがって、特異値は

$$\sigma_1 = \sqrt{25} = 5, \quad \sigma_2 = \sqrt{9} = 3, \quad \sigma_3 = \sqrt{9} = 3$$

右特異ベクトル $V$ の計算

右特異ベクトルは $A^T A$ の固有ベクトルです。

  • $λ_1=25$の場合:

$$(A^T A – 25I)v = \begin{pmatrix}
-14 & 7 & 7 \\
7 & -14 & 7 \\
7 & 7 & -14
\end{pmatrix}
\begin{pmatrix}
v_1 \\
v_2 \\
v_3
\end{pmatrix} =
\begin{pmatrix}
0 \\
0 \\
0
\end{pmatrix}$$

この連立方程式から、

$$-14v_1 + 7v_2 + 7v_3 = 0 \Rightarrow v_1 = \frac{7}{14}(v_2 + v_3) = \frac{1}{2}(v_2 + v_3)$$

対称性から、解は v_1=v_2=v_3​ となります。よって、固有ベクトルは

$$v^{(1)} = \begin{pmatrix}
1 \\
1 \\
1
\end{pmatrix}$$

正規化すると、

$$v^{(1)} = \frac{1}{\sqrt{3}}\begin{pmatrix}
1 \\
1 \\
1
\end{pmatrix}$$

  • $λ2=9$ の場合:

$$(A^T A – 9I)v = \begin{pmatrix}
2 & 7 & 7 \\
7 & 2 & 7 \\
7 & 7 & 2
\end{pmatrix} \begin{pmatrix}
v_1 \\
v_2 \\
v_3
\end{pmatrix} = \begin{pmatrix}
0 \\
0 \\
0
\end{pmatrix}$$

この連立方程式から、

$$\begin{align*}
2v_1 + 7v_2 + 7v_3 &= 0 \quad (1) \\
7v_1 + 2v_2 + 7v_3 &= 0 \quad (2) \\
7v_1 + 7v_2 + 2v_3 &= 0 \quad (3)
\end{align*}$$

対称性から、解は $v1=v2=−v3$​ となります。よって、固有ベクトルは

$$v^{(2)} = \begin{pmatrix}
1 \\
1 \\
-1
\end{pmatrix},
v^{(3)} = \begin{pmatrix}
1 \\
-1 \\
1
\end{pmatrix}$$

正規化すると、

$$v^{(2)} = \frac{1}{\sqrt{3}}\begin{pmatrix}
1 \\
1 \\
-1
\end{pmatrix},
v^{(3)} =\frac{1}{\sqrt{3}}\begin{pmatrix}
1 \\
-1 \\
1
\end{pmatrix}$$

特異値分解の構成

以上より、

$$U = \begin{pmatrix}
\frac{1}{\sqrt{3}} & \frac{1}{\sqrt{3}} & \frac{1}{\sqrt{3}} \\
\frac{1}{\sqrt{3}} & \frac{1}{\sqrt{3}} & -\frac{1}{\sqrt{3}} \\
\frac{1}{\sqrt{3}} & -\frac{1}{\sqrt{3}} & \frac{1}{\sqrt{3}} \\
\end{pmatrix}, \quad
\Sigma = \begin{pmatrix}
5 & 0 & 0 \\
0 & 3 & 0 \\
0 & 0 & 3 \\
\end{pmatrix}, \quad
V^T = \begin{pmatrix}
\frac{1}{\sqrt{3}} & \frac{1}{\sqrt{3}} & \frac{1}{\sqrt{3}} \\
\frac{1}{\sqrt{3}} & \frac{1}{\sqrt{3}} & -\frac{1}{\sqrt{3}} \\
\frac{1}{\sqrt{3}} & -\frac{1}{\sqrt{3}} & \frac{1}{\sqrt{3}} \\
\end{pmatrix}$$

したがって、

$$A = U \Sigma V^T = \begin{pmatrix}
\frac{1}{\sqrt{3}} & \frac{1}{\sqrt{3}} & \frac{1}{\sqrt{3}} \\
\frac{1}{\sqrt{3}} & \frac{1}{\sqrt{3}} & -\frac{1}{\sqrt{3}} \\
\frac{1}{\sqrt{3}} & -\frac{1}{\sqrt{3}} & \frac{1}{\sqrt{3}} \\
\end{pmatrix} \begin{pmatrix}
5 & 0 & 0 \\
0 & 3 & 0 \\
0 & 0 & 3 \\
\end{pmatrix} \begin{pmatrix}
\frac{1}{\sqrt{3}} & \frac{1}{\sqrt{3}} & \frac{1}{\sqrt{3}} \\
\frac{1}{\sqrt{3}} & \frac{1}{\sqrt{3}} & -\frac{1}{\sqrt{3}} \\
\frac{1}{\sqrt{3}} & -\frac{1}{\sqrt{3}} & \frac{1}{\sqrt{3}} \\
\end{pmatrix} = \begin{pmatrix}
3 & 1 & 1 \\
1 & 3 & 1 \\
1 & 1 & 3 \\
\end{pmatrix} = A$$

行列分解

行列分解は、複雑な行列をより単純な行列の積に分解することで、さまざまな計算や解析を容易にする手法です。ここでは、LU分解、QR分解、非負値行列分解(NMF)について機械学習で使うため、簡単な説明を行っておきます。

LU分解

LU分解は、行列 $A$ を下三角行列 $L$ と上三角行列 $U$ の積に分解する方法です。

$$A=LU$$

  • $L$:下三角行列(対角成分が1)
  • $U$:上三角行列

場合によっては、ピボット行列 $P$ を導入して、

$$PA=LU$$

と表すこともあります。

LU分解の特徴

特徴説明
定義行列を下三角行列 $( L )$ と上三角行列 $( U )$ の積に分解する手法。
機械学習での利用線形方程式の解法(線形回帰やロジスティック回帰での最適化)
特徴量の選択(重要な特徴量の関係を明らかにする)。

3×3行列のLU分解の例

考える行列 $A$ を以下のように定義します。

$$A = \begin{pmatrix}
2 & 3 & 1 \\
4 & 7 & 3 \\
6 & 18 & 5 \\
\end{pmatrix}$$

LU分解の手順

下三角行列 $L$ と上三角行列 $U$ の初期設定

$$L = \begin{pmatrix}
1 & 0 & 0 \\
l_{21} & 1 & 0 \\
l_{31} & l_{32} & 1 \\
\end{pmatrix}, \quad
U = \begin{pmatrix}
u_{11} & u_{12} & u_{13} \\
0 & u_{22} & u_{23} \\
0 & 0 & u_{33} \\
\end{pmatrix}$$

計算手順:

第1列の計算

$$
u_{11} = 2
$$

$$
l_{21} = \frac{4}{2} = 2
$$

$$
l_{31} = \frac{6}{2} = 3
$$

第2列の計算

$$u_{12} = 3$$

$$u_{22} = 7 – l_{21} \cdot u_{12} = 7 – 2 \cdot 3 = 1$$

$$l_{32} = \frac{18 – l_{31} \cdot u_{12}}{u_{22}} = \frac{18 – 3 \cdot 3}{1} = 9$$

第3列の計算

$$u_{13} = 1$$

$$u_{23} = 3 – l_{21} \cdot u_{13} = 3 – 2 \cdot 1 = 1$$

$$u_{33} = 5 – l_{31} \cdot u_{13} – l_{32} \cdot u_{23} = 5 – 3 \cdot 1 – 9 \cdot 1 = 5 – 3 – 9 = -7$$

LU分解の完成

よって、

$$L = \begin{pmatrix}
1 & 0 & 0 \\
2 & 1 & 0 \\
3 & 9 & 1
\end{pmatrix}, \quad U = \begin{pmatrix}
2 & 3 & 1 \\
0 & 1 & 1 \\
0 & 0 & -7
\end{pmatrix}$$

確認

$LU$ を計算して元の行列 $A$ と一致するか確認します。

$$LU = \begin{pmatrix}
1 & 0 & 0 \\
2 & 1 & 0 \\
3 & 9 & 1
\end{pmatrix}
\begin{pmatrix}
2 & 3 & 1 \\
0 & 1 & 1 \\
0 & 0 & -7
\end{pmatrix} =
\begin{pmatrix}
2 & 3 & 1 \\
4 & 7 & 3 \\
6 & 18 & 5
\end{pmatrix} = A$$

計算が正しいことが確認できます。

機械学習での応用

LU分解は主に線形方程式系の解法や行列の逆行列計算、行列式の計算に用いられます。機械学習では、特に線形回帰やニューラルネットワークの最適化過程で、勾配降下法のステップやハッセ行列の計算時に利用されることがあります。

実装例)

import numpy as np
from scipy.linalg import lu

# 行列の定義
A = np.array([[2, 3, 1],
              [4, 7, 7],
              [6, 18, 22]])

# LU分解の実行
P, L, U = lu(A)

print("P (ピボット行列):\n", P)
print("L (下三角行列):\n", L)
print("U (上三角行列):\n", U)
P (ピボット行列):
 [[0. 0. 1.]
 [0. 1. 0.]
 [1. 0. 0.]]
L (下三角行列):
 [[1.         0.         0.        ]
 [0.66666667 1.         0.        ]
 [0.33333333 0.6        1.        ]]
U (上三角行列):
 [[ 6.         18.         22.        ]
 [ 0.         -5.         -7.66666667]
 [ 0.          0.         -1.73333333]]

QR分解

QR分解は、任意の $m×n$ 行列 $A$ を直交行列 $Q$ と上三角行列 $R$ の積に分解する手法です。すなわち、

$$A=QR$$

  • $Q$ は $m×m$ の直交行列$(Q^T Q = I)$
  • $R$ は $m×n$ の上三角行列

QR分解の特徴

特徴説明
定義行列を直交行列 ( Q ) と上三角行列 ( R ) の積に分解する手法。
機械学習での利用– 最小二乗法(回帰分析の解法として)
– 次元削減(主成分分析(PCA)の計算に利用)。

3×3行列のQR分解の例

考える行列 $A$ を以下のように定義します。

$$A = \begin{pmatrix}
1 & 1 & 0 \\
1 & -1 & 1 \\
1 & 1 & 1 \\
\end{pmatrix}$$

QR分解の手順

Gram-Schmidtの正規直交化を適用

列ベクトルを $a_1,a_2,a_3$​ とします。

$$a_1 = \begin{pmatrix}
1 \\
1 \\
1
\end{pmatrix},$$
$$a_2 = \begin{pmatrix}
1 \\
-1 \\
1
\end{pmatrix},$$
$$a_3 = \begin{pmatrix}
0 \\
1 \\
1
\end{pmatrix}$$

第一基底ベクトル u_1 の計算

$$u_1=a_1 = \begin{pmatrix}
1 \\
1 \\
1
\end{pmatrix}$$

正規化して $q_1$​ を得る。

$$q_1 = \frac{u_1}{\|u_1\|} = \frac{1}{\sqrt{3}} \begin{pmatrix}
1 \\
1 \\
1
\end{pmatrix}$$

二基底ベクトル $u_2$ の計算

$$u_2 = a_2 – \text{proj}_{q_1} a_2 = a_2 – (q_1 \cdot a_2) q_1$$

計算すると、

$$q_1 \cdot a_2 = \frac{1}{\sqrt{3}} \left( 1 \cdot 1 + 1 \cdot (-1) + 1 \cdot 1 \right) = \frac{1}{\sqrt{3}} \left( 1 – 1 + 1 \right) = \frac{1}{\sqrt{3}}$$

よって、

$$u_2 = \begin{pmatrix}
1 \\
-1 \\
1
\end{pmatrix} – \frac{1}{\sqrt{3}} \cdot \frac{1}{\sqrt{3}} \begin{pmatrix}
1 \\
1 \\
1
\end{pmatrix} = \begin{pmatrix}
1 – \frac{1}{3} \\
-1 – \frac{1}{3} \\
1 – \frac{1}{3}
\end{pmatrix} = \begin{pmatrix}
\frac{2}{3} \\
-\frac{4}{3} \\
\frac{2}{3}
\end{pmatrix}$$

正規化して $q_2$ を得る。

$$\| u_2 \| = \sqrt{\left( \frac{2}{3} \right)^2 + \left( -\frac{4}{3} \right)^2 + \left( \frac{2}{3} \right)^2} = \sqrt{\frac{4}{9} + \frac{16}{9} + \frac{4}{9}} = \sqrt{\frac{24}{9}} = \sqrt{\frac{8}{3}} = \frac{2\sqrt{6}}{3}$$

$$q_2 = \frac{u_2}{\| u_2 \|} = \frac{1}{\frac{2\sqrt{6}}{3}} \begin{pmatrix} \frac{2}{3} \\ -\frac{4}{3} \\ \frac{2}{3} \end{pmatrix} = \frac{3}{2\sqrt{6}} \begin{pmatrix} 2 \\ -4 \\ 2 \end{pmatrix} = \frac{1}{\sqrt{6}} \begin{pmatrix} 1 \\ -2 \\ 1 \end{pmatrix}$$

第三基底ベクトル $u_3$ の計算

$$u_3 = a_3 – \text{proj}_{q_1} a_3 – \text{proj}_{q_2} a_3$$

計算すると、

$$q_1 \cdot a_3 = \frac{1}{\sqrt{3}}(0 \cdot 1 + 1 \cdot 1 + 1 \cdot 1 + 1 \cdot 1) = \frac{2}{\sqrt{3}}$$

$$\text{proj}_{q_1} a_3 = \frac{2}{\sqrt{3}} \cdot \frac{1}{\sqrt{3}} \begin{pmatrix} 1 \\ 1 \\ 1 \end{pmatrix} = \frac{2}{3} \begin{pmatrix} 1 \\ 1 \\ 1 \end{pmatrix}$$

$$q_2 \cdot a_3 = \frac{1}{\sqrt{6}}(0 \cdot 1 \cdot 1 + (-2) +1 \cdot 1) = -\frac{1}{\sqrt{6}}$$

$$\text{proj}_{q_2} a_3 = -\frac{1}{\sqrt{6}} \cdot \frac{1}{\sqrt{6}} \begin{pmatrix} 1 \\ -2 \\ 1 \end{pmatrix} = -\frac{1}{6} \begin{pmatrix} 1 \\ -2 \\ 1 \end{pmatrix} = \begin{pmatrix} -\frac{1}{6} \\ \frac{1}{3} \\ -\frac{1}{6} \end{pmatrix}$$

よって、

$$u_3 = \begin{pmatrix}
0 \\
1 \\
1
\end{pmatrix} – \begin{pmatrix}
\frac{2}{3} \\
\frac{2}{3} \\
\frac{2}{3}
\end{pmatrix} – \begin{pmatrix}
-\frac{1}{6} \\
\frac{1}{3} \\
-\frac{1}{6}
\end{pmatrix} = \begin{pmatrix}
-\frac{1}{2} \\
\frac{1}{3} \\
\frac{5}{6}
\end{pmatrix}$$

正規化して $q_3$ を得る。

$$\|u_3\| = \sqrt{\left(-\frac{1}{2}\right)^2 + \left(\frac{1}{3}\right)^2 + \left(\frac{5}{6}\right)^2} = \sqrt{\frac{1}{4} + \frac{1}{9} + \frac{25}{36}} = \sqrt{\frac{9}{36} + \frac{4}{36} + \frac{25}{36}} = \sqrt{\frac{38}{36}} = \sqrt{\frac{19}{18}} \approx 1.03$$

$$q_3 = \frac{u_3}{\|u_3\|} \approx \frac{1}{1.03} \begin{pmatrix}
-\frac{1}{2} \\
\frac{1}{3} \\
\frac{5}{6}
\end{pmatrix} \approx \begin{pmatrix}
-0.485 \\
0.325 \\
0.815
\end{pmatrix}$$

行列 $Q$ の構成

得られた正規直交基底ベクトルを列に持つ行列 $Q$ を構成します。

$$Q = \begin{pmatrix}
\frac{1}{\sqrt{3}} & \frac{1}{\sqrt{6}} & -0.485 \\
\frac{1}{\sqrt{3}} & -\frac{2}{\sqrt{6}} & 0.325 \\
\frac{1}{\sqrt{3}} & \frac{1}{\sqrt{6}} & 0.815
\end{pmatrix}$$

上三角行列 $R$ の計算

$$R=Q^TA$$

ここで、$Q^T$ は $Q$ の転置行列です。

計算すると、

$$R \approx \begin{pmatrix}
\sqrt{3} & 0 & 0 \\
0 & \sqrt{6} & 0 \\
0 & 0 & \sqrt{\frac{19}{18}}
\end{pmatrix}$$

QR分解の完成

よって、

$$A = QR \approx \begin{pmatrix}
\frac{1}{\sqrt{3}} & \frac{1}{\sqrt{6}} & -0.485 \\
\frac{1}{\sqrt{3}} & -\frac{2}{\sqrt{6}} & 0.325 \\
\frac{1}{\sqrt{3}} & \frac{1}{\sqrt{6}} & 0.815
\end{pmatrix}
\begin{pmatrix}
\sqrt{3} & 0 & 0 \\
0 & \sqrt{6} & 0 \\
0 & 0 & \sqrt{\frac{19}{18}}
\end{pmatrix} = \begin{pmatrix}
1 & 1 & 0 \\
1 & -1 & 1 \\
1 & 1 & 1
\end{pmatrix} = A$$

機械学習での応用

QR分解は主に線形回帰や最小二乗問題の解法に用いられます。また、主成分分析(PCA)や特異値分解(SVD)の前処理としても利用されます。安定した数値計算が求められる場面で特に有効です。

実装例

import numpy as np

# 行列の定義
A = np.array([[1, 2],
              [3, 4],
              [5, 6]])

# QR分解の実行
Q, R = np.linalg.qr(A)

print("Q (直交行列):\n", Q)
print("R (上三角行列):\n", R)
Q (直交行列):
 [[-0.16903085  0.89708523]
 [-0.50709255  0.27602622]
 [-0.84515425 -0.34503278]]
R (上三角行列):
 [[-5.91607978 -7.43735744]
 [ 0.          0.82807867]]

非負値行列分解(NMF)

非負値行列分解(NMF)は、非負値の行列 $V$ を2つの非負値行列 $W$ と $H$ の積に分解する手法です。すなわち、

$$V≈WH$$

ここで、

  • $V$ は $m×n$ の非負値行列
  • $W$ は $m×r$ の非負値行列
  • $H$ は $r×n$ の非負値行列
  • $r$ は分解のランク(通常、$r<min⁡(m,n)$)

NMFは、特に画像やテキストデータのパターン認識において、データの隠れた特徴を抽出するのに有効です。要素が非負であるという制約により、分解された行列が解釈しやすくなるという利点があります。

非負値行列分解(NMF)の特徴

特徴説明
定義非負の行列を二つの非負の行列に分解する手法。
機械学習での利用– トピックモデル(文書データのテーマ抽出)。
– 画像処理(画像の特徴を非負のパターンに分解)。
– 音声処理(音源分離や音の特徴抽出)。

3×3行列のNMFの例

考える行列 $A$ を以下のように定義します。

$$A = \begin{pmatrix}
4 & 0 & 0 \\
3 & 1 & 0 \\
0 & 0 & 2 \\
\end{pmatrix}$$

この行列をランク2に近似するNMFを求めます。

NMFの手順

初期値の設定

$W$ と $H$ をランダムな非負値で初期化します。ここでは手計算しやすい値を選びます。

$$W = \begin{pmatrix}
1 & 0 \\
1 & 1 \\
0 & 1
\end{pmatrix}, \quad
H = \begin{pmatrix}
4 & 0 & 0 \\
1 & 1 & 2
\end{pmatrix}$$

行列積の計算

$$WH = \begin{pmatrix}
1 & 0 \\
1 & 1 \\
0 & 1
\end{pmatrix}
\begin{pmatrix}
4 & 0 & 0 \\
1 & 1 & 2
\end{pmatrix}
= \begin{pmatrix}
4 & 0 & 0 \\
5 & 1 & 2 \\
1 & 1 & 2
\end{pmatrix}$$

これは元の行列

$$A = \begin{pmatrix}
4 & 0 & 0 \\
3 & 1 & 0 \\
0 & 0 & 2 \\
\end{pmatrix}$$

に近づけるために、さらに $W$ と $H$ を調整する必要があります。

要素の更新

NMFは、一般的に反復的なアルゴリズム(例えば、乗法更新ルール)を用いて $W$ と $H$ を更新し、誤差を最小化します。しかし、ここでは手計算の簡単さから、初期値のまま説明を終えます。

NMFは、非負のデータを基にして、解釈しやすい隠れた特徴を抽出するための強力なツールです。特に、画像データやテキストデータの解析において有効に活用されています。実際のデータ分析では、プログラミングを用いて効率的にNMFを実行します。

機械学習での応用

NMFは、主に次元削減、クラスタリング、トピックモデル、画像認識、推薦システムなどに利用されます。特にデータが非負値を持つ場合(例:画像のピクセル値、テキストの単語出現頻度など)に有効です。NMFは、部分的な加法的な表現を提供するため、解釈性の高い特徴抽出が可能です。

実装例(sklearnライブラリを用いたNMFの実装例)

import numpy as np
from sklearn.decomposition import NMF

# 非負値行列の定義
V = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]])

# NMFモデルの定義(ランク2)
model = NMF(n_components=2, init='random', random_state=0)

# 分解の実行
W = model.fit_transform(V)
H = model.components_

print("W (基底行列):\n", W)
print("H (係数行列):\n", H)
print("再構成されたV:\n", np.dot(W, H))
W (基底行列):
 [[0.63448943 0.19903363]
 [0.72220518 1.17456903]
 [0.80960143 2.15034825]]
H (係数行列):
 [[0.62968438 2.25033607 3.87282639]
 [3.01823082 2.87312419 2.72719139]]
再構成されたV:
 [[1.00025753 1.99966281 3.00007024]
 [3.99988177 4.99988707 6.00024983]
 [7.00004074 8.0000929  8.99985704]]

NMFのアルゴリズム

NMFは通常、乗法更新ルールや勾配降下法を用いて非負値行列 $W$ と $H$ を最適化します。以下は、乗法更新ルールに基づく簡単なNMFの実装例です。

import numpy as np

def nmf(V, r, max_iter=1000, tol=1e-4):
    m, n = V.shape
    W = np.random.rand(m, r)
    H = np.random.rand(r, n)
    
    for i in range(max_iter):
        # 更新ルール
        H *= (W.T @ V) / (W.T @ W @ H + 1e-10)
        W *= (V @ H.T) / (W @ H @ H.T + 1e-10)
        
        # 収束判定
        if i % 100 == 0:
            loss = np.linalg.norm(V - W @ H, 'fro')
            print(f"Iteration {i}, loss: {loss}")
            if loss < tol:
                break
                
    return W, H

# 使用例
V = np.abs(np.random.randn(10, 8))  # 非負値行列
W, H = nmf(V, r=3)
print("W:\n", W)
print("H:\n", H)
print("再構成されたV:\n", np.dot(W, H))
Iteration 0, loss: 4.151938339864161
Iteration 100, loss: 2.8094346778952786
Iteration 200, loss: 2.7592589589286516
Iteration 300, loss: 2.754418817019898
Iteration 400, loss: 2.7536242050420277
Iteration 500, loss: 2.7532755179180537
Iteration 600, loss: 2.753116303686046
Iteration 700, loss: 2.7530505041717905
Iteration 800, loss: 2.7530251114242077
Iteration 900, loss: 2.753015674908788
W:
 [[2.06765402e-01 9.72073245e-01 5.23374329e-01]
 [2.39975844e-01 8.74073945e-01 6.58133429e-01]
 [5.25714333e-01 8.09834448e-01 1.88910760e+00]
 [7.75640448e-01 1.14726387e-01 7.24802810e-01]
 [1.66233747e+00 1.68205834e-17 1.78163345e-19]
 [5.61546577e-73 5.23922270e-01 1.23070683e+00]
 [3.21159302e-01 2.38718254e-46 9.15406336e-01]
 [4.11023929e-01 2.10516567e+00 1.04545515e-04]
 [1.35960586e+00 8.08341260e-01 8.31509870e-02]
 [3.48534814e-01 1.36215579e-01 2.75536946e-01]]
H:
 [[3.13762821e-32 1.47582247e-01 9.43112002e-01 2.45106285e-01
  8.30910338e-01 6.50709506e-02 4.19860933e-01 6.13960105e-01]
 [6.86097531e-01 1.95840260e-01 2.14927571e-20 1.29177692e+00
...
 [6.03521283e-01 4.12177181e-01 1.31862781e+00 1.38641864e+00
  1.38726245e+00 4.90449159e-01 1.13656656e+00 1.18036125e+00]
 [2.55564221e-01 2.54461331e-01 4.49217157e-01 2.91125667e-01
  3.33001883e-01 2.62355287e-01 4.68972166e-01 3.74737276e-01]]

QR分解の応用

QR分解は、線形方程式の解法や最小二乗法などに利用されます。特に、過剰決定系(方程式の数が未知数より多い場合)の最小二乗解を求める際に有効です。

3×3行列のQR分解の応用例

例えば、次の行列 $A$ をQR分解し、最小二乗法を用いて連立方程式を解く方法を考えます。

$$A = \begin{pmatrix}
1 & 1 & 0 \\
1 & -1 & 1 \\
1 & 1 & 1
\end{pmatrix}, \quad
b = \begin{pmatrix}
1 \\
2 \\
3
\end{pmatrix}$$

QR分解を用いて、$A_x=b$ の最小二乗解を求めます。

手順

QR分解を実施

$$A=QR$$

最小二乗解の計算

$$x=R^{−1}Q^Tb$$

具体的な計算

先に述べたQR分解の例から、

$$Q = \begin{pmatrix}
\frac{1}{\sqrt{3}} & \frac{1}{\sqrt{6}} & -0.485 \\
\frac{1}{\sqrt{3}} & -\frac{2}{\sqrt{6}} & 0.325 \\
\frac{1}{\sqrt{3}} & \frac{1}{\sqrt{6}} & 0.815
\end{pmatrix}, \quad
R = \begin{pmatrix}
\sqrt{3} & 0 & 0 \\
0 & \sqrt{6} & 0 \\
0 & 0 & \sqrt\frac{{19}}{18}
\end{pmatrix}$$

よって、

$$x = R^{-1} Q^T b =
\begin{pmatrix}
\frac{1}{\sqrt{3}} & 0 & 0 \\
0 & \frac{1}{\sqrt{6}} & 0 \\
0 & 0 & \sqrt\frac{{18}}{19}
\end{pmatrix}
\begin{pmatrix}
\frac{1}{\sqrt{3}} & \frac{1}{\sqrt{3}} & \frac{1}{\sqrt{3}} \\
\frac{1}{\sqrt{6}} & -\frac{2}{\sqrt{6}} & \frac{1}{\sqrt{6}} \\
-0.485 & 0.325 & 0.815
\end{pmatrix}
\begin{pmatrix}
1 \\
2 \\
3
\end{pmatrix}$$

計算を進めると、

$$x \approx
\begin{pmatrix}
1 \\
1 \\
1
\end{pmatrix}$$

したがって、最小二乗解は

$$x \approx
\begin{pmatrix}
1 \\
1 \\
1
\end{pmatrix}$$

微分・積分

微分

関数の微分と勾配の概念

関数の微分は、変数の微小な変化に対する関数値の変化率を表します。多変量関数の場合、勾配は各変数についての偏微分を集めたベクトルです。

例題

関数 $f(x,y,z)=x^3+y^{2}z$ の勾配を求めます。

解答

勾配ベクトル $∇f$ は以下のように計算されます。

$$\nabla f =
\begin{pmatrix}
\frac{\partial f}{\partial x} \\
\frac{\partial f}{\partial y} \\
\frac{\partial f}{\partial z}
\end{pmatrix}
=
\begin{pmatrix}
3x^2 \\
2yz \\
y^2
\end{pmatrix}$$

勾配降下法における微分の役割

勾配降下法は、関数の最小値を求めるための最適化手法です。勾配(関数の微分)を用いて、現在の点から関数が下り坂となる方向へパラメータを更新します。

例題:

関数 $J(w)=(w−3)^2$ の最小値を勾配降下法で求めます。

解答

勾配の計算

$$\frac{dJ}{dw} = 2(w – 3)$$

パラメータの更新

学習率 $α=0.1$ とします。

$$w_{\text{new}} = w_{\text{old}} – \alpha \cdot \frac{dJ}{dw}$$

更新の実行

初期値 $w_0=0$ とすると、

$$\begin{align*}
w_1 & = 0 – 0.1 \cdot 2(0 – 3) = 0.6 \\
w_2 & = 0.6 – 0.1 \cdot 2(0.6 – 3) = 1.08 \\
w_3 & = 1.08 – 0.1 \cdot 2(1.08 – 3) = 1.656 \\
& \vdots
\end{align*}$$

このようにして、関数 $J(w)$ の最小値 $w=3$ に近づいていきます。

偏微分

多変量関数の偏微分

複数の変数を持つ関数に対して、一つの変数についてのみ微分する操作です。

例題:

関数 $f(x,y,z)=x^2+yz+e^x$ についての偏微分を求めます。

解答:

$$\frac{\partial f}{\partial y} = z$$

ニューラルネットワークのバックプロパゲーションでの重要性

バックプロパゲーションでは、誤差を各パラメータに対して偏微分し、重みの更新に利用します。これにより、モデルが正確な予測を行うためのパラメータを学習します。

例題:

簡単なニューラルネットワークにおける誤差関数 $E=(y_{pred}−y)^2$の重み $w$ に対する偏微分を求めます。

解答:

$$\frac{\partial E}{\partial w} = 2(y_{\text{pred}} – y) \cdot \frac{\partial y_{\text{pred}}}{\partial w}$$

これにより、重み $w$ をどのように更新すべきかがわかります。

積分

確率密度関数の計算方法

積分を用いて、連続確率変数の確率や期待値を求めます。

例題:

確率密度関数

$$f(x) = \begin{cases} 2x ( 0 \leq x \leq 1 )\end{cases}$$

の期待値を求めます。

解答:

$$E[X] = \int_0^1 x \cdot f(x) \, dx = \int_0^1 x \cdot 2x \, dx = 2 \int_0^1 x^2 \, dx = 2 \left[ \frac{x^3}{3} \right]_0^1 = 2 \left( \frac{1}{3} – 0 \right) = \frac{2}{3}$$

最適化問題

コスト関数の最小化

機械学習では、モデルの予測と実際のデータとの差を表すコスト関数を最小化することで、モデルを最適化します。

例題:

2次関数 $J(w)=(w−3)^2 $の最小値を求めます。

解答:

微分を計算

$$\frac{dJ}{dw} = 2(w – 3)$$

最小値の条件を設定

$$\frac{dJ}{dw} = 0 \quad \Rightarrow \quad 2(w – 3) = 0 \quad \Rightarrow \quad w = 3$$

補足:特異値分解(SVD)の実装

本ブログでは、高校生が理解しやすいように、手計算での例題を中心に解説しましたが、実際のデータ分析ではプログラミングが不可欠です。以下に、Pythonを用いた計算と図の作成の基本的な例を示します。

例題:

$$A = \begin{pmatrix}
3 & 1 & 1 \\
1 & 3 & 1 \\
1 & 1 & 3 \\
\end{pmatrix}$$

の特異値分解(SVD)をPythonで行い、結果を確認します。

import numpy as np
import matplotlib.pyplot as plt

# 行列Aの定義
A = np.array([[3, 1, 1],
              [1, 3, 1],
              [1, 1, 3]])

# SVDの計算
U, Sigma, VT = np.linalg.svd(A)

print("U:")
print(U)
print("\nSigma:")
print(Sigma)
print("\nVT:")
print(VT)

# 特異値を対角行列に変換
Sigma_matrix = np.zeros((A.shape[0], A.shape[1]))
np.fill_diagonal(Sigma_matrix, Sigma)

# SVDの再構成
A_reconstructed = U @ Sigma_matrix @ VT
print("\n再構成されたA:")
print(A_reconstructed)

# 図の作成:行列AのSVDによる分解
fig, ax = plt.subplots(1, 3, figsize=(18, 5))
ax[0].set_title("行列A")
cax0 = ax[0].imshow(A, cmap='viridis', interpolation='none')
fig.colorbar(cax0, ax=ax[0])
ax[0].set_xticks([])
ax[0].set_yticks([])

ax[1].set_title("U")
cax1 = ax[1].imshow(U, cmap='viridis', interpolation='none')
fig.colorbar(cax1, ax=ax[1])
ax[1].set_xticks([])
ax[1].set_yticks([])

ax[2].set_title("ΣV^T")
cax2 = ax[2].imshow(Sigma_matrix @ VT, cmap='viridis', interpolation='none')
fig.colorbar(cax2, ax=ax[2])
ax[2].set_xticks([])
ax[2].set_yticks([])

plt.tight_layout()
plt.show()
U:
[[-5.77350269e-01 -1.13131347e-16  8.16496581e-01]
 [-5.77350269e-01 -7.07106781e-01 -4.08248290e-01]
 [-5.77350269e-01  7.07106781e-01 -4.08248290e-01]]

Sigma:
[5. 2. 2.]

VT:
[[-0.57735027 -0.57735027 -0.57735027]
 [ 0.         -0.70710678  0.70710678]
 [ 0.81649658 -0.40824829 -0.40824829]]

再構成されたA:
[[3. 1. 1.]
 [1. 3. 1.]
 [1. 1. 3.]]

上記のコードでは、行列 $A$ の特異値分解を行い、再構成された行列 $A$ が元の行列と一致することを確認しています。また、行列 $A$、行列 $U$、および $ΣV^T$ の可視化を行い、データの構造を視覚的に理解することができます。

学習の振り返りと次回予告

今回、機械学習の基礎となる線形代数の主要な概念を3×3行列を用いて詳しく解説しました。固有値と固有ベクトル、次元削減手法(PCA)、特異値分解(SVD)、行列分解(LU分解、QR分解)、非負値行列分解(NMF)などは、機械学習のさまざまなアルゴリズムやモデルにおいて重要な役割を果たします。

次回は、「確率統計」と「最適化手法」について詳しく解説します。お楽しみに!


コメント

タイトルとURLをコピーしました