特異値分解問題を解く

Python, ML, Math16 January 2021

行列の特異値分解問題の解き方を整理する。
始める前に今回学習に当たって、最強に分かりやすいYoutubeの動画があったので感謝の意を込めて、リンクを記載します。

チャンネル 動画
某处生活_LiveSomewhere 特異値分解PART2:特異値分解

ほぼこちらの動画のサマリになる予定

特異値分解とは

特異値分解の前に、固有値分解の整理から。
ある正則行列$A$に対しては固有値分解を行い、以下のように変形することができた。

$$ A = V \Lambda V^{-1}$$

これに対し、特異値分解は$m \times n$の行列に対し分解を行う。 以下のような式が成立します。

$$ A = U \Sigma V^T $$

  • $A: m \times n$
  • $U: m \times m$の直交行列(転置行列と逆行列が等しい行列)
  • $\sum : m \times n$
  • $V^T: n \times n$の直交行列(転置行列と逆行列が等しい行列)

$$ A = \begin{pmatrix} \vec{u_1} & \vec{u_2} & \cdots \end{pmatrix} \begin{pmatrix} \sigma _1 & 0 & \cdots \ 0 & \sigma_2 & \cdots \ \vdots & 0 & \ddots \end{pmatrix} \begin{pmatrix} \vec{v_1} & \vec{v_2} & \cdots \end{pmatrix}^T$$

  • $\vec{u}:$ 単位ベクトル(左特異ベクトル)
  • $\sigma : A$の特異値
  • $\vec{v}:$ 単位ベクトル(右特異ベクトル)

単位ベクトル

長さが1となるベクトル。以下の式で算出できる。 $$ \frac{\vec{x}}{|\vec{x}|}$$

ベクトルの各要素を長さで割る、ちなみに長さの求め方は以下。 $$ |\vec{x}| = \sqrt{a^2+b^2} $$

例題

以下の行列を特異値分解する。

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

解き方

冒頭の式のように行列$A$を分解するために必要な情報は$U, \Sigma, V^T$の3つです。(当たり前)
これらを求めるには、$AA^T$及び$A^TA$をそれぞれ固有値分解することで求められます。

1. $A^TA$で$V^T$を求める

$$ A^TA = V\Sigma^TU^T U\Sigma V^T $$ ここで、$U$は直交行列なので、$U^T = U^{-1}$となり、打ち消せます。

$$ A^TA = V\Sigma^T \Sigma V^T $$

これは、固有値分解の公式から$A$が$A^TA$に、$\Lambda$が$\Sigma^T \Sigma$に変わったものとみなすことができるので、
固有方程式から、以下が成立する。

$$ | A^TA - \lambda E | = 0 $$

計算は省略 〜〜

よって、$A^TA$の固有値$\lambda = 24, 4$

さらに、$\Sigma$の特異値を$\sigma_1, \sigma_2$とすると、

$$ \Sigma^T \Sigma = \begin{pmatrix} \sigma_1 & 0 & 0 \ 0 & \sigma_2 & 0 \end{pmatrix} \begin{pmatrix} \sigma_1 & 0 \ 0 & \sigma_2 \ 0 & 0 \end{pmatrix} = \begin{pmatrix} \sigma_1^2 & 0 \ 0 & \sigma_2^2 \end{pmatrix} = \begin{pmatrix} \lambda_1 & 0 \ 0 & \lambda_2 \end{pmatrix}$$

となるので、$\sigma = \sqrt{\lambda}$が成立する。よって、$A$の特異値は$\sigma = 2\sqrt{6}, 2$

次に、$A^TA$の固有ベクトルを求め、行列とすると以下となる。

$$ \begin{pmatrix} 1 & 1 \ 1 & -1 \end{pmatrix} $$

これより、$A$の右特異ベクトルは$A^TA$の固有ベクトルを単位ベクトルに変換すれば良いので、
同様に行列化すると以下の通り。

$$ V = \begin{pmatrix} \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \ \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \end{pmatrix} $$

この値は一例であり、同条件を満たす特異ベクトルはいくつか存在する

以上から、元々求めたかった$V^T$は、

$$ V^T = \begin{pmatrix} \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \ \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \end{pmatrix} $$

2. $U, \Sigma$を求める

右特異ベクトルは冒頭の定義式より、

$$ A = U \Sigma V^T $$ $$ U = AV / \Sigma $$

が成立するので、

$$ \vec{u_1} = \frac{1}{2\sqrt{6}} \begin{pmatrix} 1 & 3 \ 2 & 2 \ 3 & 1 \end{pmatrix} \begin{pmatrix} \frac{1}{\sqrt{2}} \ \frac{1}{\sqrt{2}} \end{pmatrix} = \begin{pmatrix} \frac{1}{\sqrt{3}} \ \frac{1}{\sqrt{3}} \ \frac{1}{\sqrt{3}} \end{pmatrix}$$

$$ \vec{u_2} = \frac{1}{2} \begin{pmatrix} 1 & 3 \ 2 & 2 \ 3 & 1 \end{pmatrix} \begin{pmatrix} \frac{1}{\sqrt{2}} \ -\frac{1}{\sqrt{2}} \end{pmatrix} = \begin{pmatrix} \frac{1}{\sqrt{2}} \ 0 \ -\frac{1}{\sqrt{2}} \end{pmatrix}$$

3. 分解式に当てはめる

以上から求めた値を、分解式に当てはめると

$$ A = \begin{pmatrix} \frac{1}{\sqrt{3}} & \frac{1}{\sqrt{2}} \ \frac{1}{\sqrt{3}} & 0 \ \frac{1}{\sqrt{3}} & -\frac{1}{\sqrt{2}} \end{pmatrix} \begin{pmatrix} 2\sqrt{6} & 0 \ 0 & 2 \end{pmatrix} \begin{pmatrix} \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \ \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \end{pmatrix} $$

例題の元ネタ

tags: Python, ML, Math