大学・線形代数・ベクトル・行列

特異値分解と主成分分析の練習問題

特異値分解の意味が分かり、主成分分析で次元を減らす考え方を説明できる。

考え方

どんな行列も「回転・伸び縮み・回転」に分解する特異値分解(SVD)の意味と、データのばらつきを少ない軸にまとめる主成分分析(PCA)の考え方が分かるようになります。画像の圧縮、アンケートの総合指標、レコメンドで使われます。

特異値 σ\sigma
行列 AA が、ある方向のベクトルを何倍に伸ばすか。ATAA^{\mathsf{T}}A の固有値の正の平方根。
特異値分解
A=UΣVTA = U\Sigma V^{\mathsf{T}}(UU, VV は直交行列、Σ\Sigma は特異値を対角に並べた行列)。
主成分
データのばらつきがいちばん大きい方向(第1主成分)と、それに直交する方向(第2主成分…)。
寄与率
その主成分の分散が、全体の分散のうちどれだけを占めるか。

行列 AA で単位円(長さ 1 のベクトルの先)を変換すると、楕円になります。その楕円の長いほうの半径が最大の特異値 σ1\sigma_1、短いほうが σ2\sigma_2 です。特異値分解 A=UΣVTA = U\Sigma V^{\mathsf{T}} は、この変換を「回転 → 軸ごとの伸び縮み → 回転」に分けて書いたものです。

特異値は、ATAA^{\mathsf{T}}A の固有値の正の平方根として求めます。ATAA^{\mathsf{T}}A は対称行列なので、固有値は 0 以上の実数です。小さい特異値を 0 にして近似すると、情報を大きく失わずにデータを小さくできます(画像の圧縮)。

主成分分析では、データの分散共分散行列 SS の固有ベクトルが主成分の方向、固有値がその方向の分散です。いちばん大きい固有値の方向が第1主成分で、データを1つの軸にまとめるなら、この方向に射影します。

寄与率は(その主成分の分散)÷(分散の合計)です。分散の合計は固有値の和で、SS の対角成分の和(各変数の分散の合計)と等しくなります。寄与率が大きいほど、軸を減らしても元のばらつきをよく保てます。

右上がりに細長く散らばった10個の点と、その広がりの向き(第1主成分)の矢印、それに直交する短い矢印(第2主成分)Oxy第1主成分第2主成分
点はデータ(2つの質問の点数を、平均からの差で表したもの)。ばらつきがいちばん大きい方向が第1主成分、それに直交する方向が第2主成分です。点を第1主成分の軸に射影すると、1つの数にまとめられます。

ポイント

特異値: σi=λi\sigma_i = \sqrt{\lambda_i}(λi\lambda_i は ATAA^{\mathsf{T}}A の固有値)

特異値分解: A=UΣVTA = U\Sigma V^{\mathsf{T}}

第1主成分の寄与率 =λ1λ1+λ2+⋯= \dfrac{\lambda_1}{\lambda_1 + \lambda_2 + \cdots}(分母は SS の対角成分の和に等しい)

解き方の手順

  1. 特異値: ATAA^{\mathsf{T}}A を計算する(AA の列どうしの内積を並べた対称行列)。
  2. det⁡(ATA−λE)=0\det(A^{\mathsf{T}}A - \lambda E) = 0 を解いて固有値を求め、正の平方根をとって大きい順に (σ1,σ2)(\sigma_1, \sigma_2) とする。
  3. 寄与率: 分散共分散行列 SS の固有値を、固有方程式で求める。
  4. 大きいほうの固有値を、固有値の和(対角成分の和)で割る。

例

2つの質問の点数の分散共分散行列が S=(6223)S = \begin{pmatrix} 6 & 2 \\ 2 & 3 \end{pmatrix} のとき、第1主成分の寄与率を求めてください。

  1. 固有方程式: (6−λ)(3−λ)−22=λ2−9λ+14=(λ−7)(λ−2)=0(6 - \lambda)(3 - \lambda) - 2^2 = \lambda^2 - 9\lambda + 14 = (\lambda - 7)(\lambda - 2) = 0
  2. 固有値は λ1=7\lambda_1 = 7, λ2=2\lambda_2 = 2(第1主成分の分散が 7)
  3. 分散の合計は 7+2=97 + 2 = 9(対角成分の和 6+36 + 3 と同じ)
  4. 第1主成分の寄与率は 79≈0.78\dfrac{7}{9} \approx 0.78。1つの軸で、元のばらつきの約 78% を保てます。

見る

計算例

画像の圧縮やレコメンドで使う特異値分解(SVD)では、行列 AA の特異値が「どの方向にどれだけ引き伸ばすか(情報がどれだけあるか)」を表します。単位円を AA で変換すると楕円になり、特異値はその楕円の長いほうと短いほうの半径です。

問いA=(3−533)A = \begin{pmatrix}3 & -5 \\ 3 & 3\end{pmatrix} の特異値 σ1≥σ2\sigma_1 \ge \sigma_2 を求め、(σ1,σ2)(\sigma_1, \sigma_2) の形で答えてください。

途中の式

  1. 特異値は ATAA^{\mathsf{T}}A の固有値の正の平方根です。
  2. ATA=(33−53)(3−533)=(18−6−634)A^{\mathsf{T}}A = \begin{pmatrix}3 & 3 \\ -5 & 3\end{pmatrix}\begin{pmatrix}3 & -5 \\ 3 & 3\end{pmatrix} = \begin{pmatrix}18 & -6 \\ -6 & 34\end{pmatrix}
  3. 固有方程式: λ2−52λ+576=0\lambda^2 - 52\lambda + 576 = 0 より λ=36,16\lambda = 36, 16
  4. σ1=36=6\sigma_1 = \sqrt{36} = 6、σ2=16=4\sigma_2 = \sqrt{16} = 4
  5. 特異値が大きい方向ほど、データ(画像)の情報が多く含まれます。小さい特異値を 0 にして近似するのが、SVD による圧縮です。

答え(σ₁, σ₂)(大きい順)は (6,4)\left(6, 4\right)

一緒にやる

小さく分けて、一緒に解く

1つずつ答えを確かめながら進みます。間違えても大丈夫です。

画像の圧縮やレコメンドで使う特異値分解(SVD)では、行列 AA の特異値が「どの方向にどれだけ引き伸ばすか(情報がどれだけあるか)」を表します。単位円を AA で変換すると楕円になり、特異値はその楕円の長いほうと短いほうの半径です。

A=(−3−223)A = \begin{pmatrix}-3 & -2 \\ 2 & 3\end{pmatrix} の特異値 σ1≥σ2\sigma_1 \ge \sigma_2 を求め、(σ1,σ2)(\sigma_1, \sigma_2) の形で答えてください。

小さな問いに分けて、1つずつ一緒に進めます。

ステップ 1 / 3

ATAA^{\mathsf{T}}A を計算してください。

1行に行列の1行を入力し、要素は空白かカンマで区切ります。改行で次の行に進みます。 入力が終わったら「答え合わせ」を押します(Ctrl+Enter でも可)。

読み取り:(入力すると、ここに数式で表示されます)

自分でやる

練習問題

数字は毎回変わります。2〜3問続けて解けたら、次の単元や元のレッスンに進みましょう。

問題を準備しています…

学び直しマップ

前後の単元

分からないところがあったら前提まで戻り、分かったら使う先へ進みましょう。

学び直しマップで、この単元のまわりを見る