読者です 読者をやめる 読者になる 読者になる

gggggraziegrazie

graizegrazieさんのやったこと、学んだことを記録する雑記帳です

特異値分解(SVD)の概要

 データの開先手法の1つとして、特異値分解(SVD:Singular Value Decomposition)という手法があります。SVDでは、不要なデータを取り除くことができるため、画像やテキストデータの圧縮や解析に使われます[1][2]。以降では数式を用いてSVDについて概要を説明します。
 

特異値とは

 そもそも特異値とは、ある行列とその行列の随伴行列(ある行列の共役かつ転置した行列)の積の固有値の非負な平方根のことです。
#直感的にわかる説明ができずすいません。そのレベルまでは理解できてないです。。

特異値分解(SVD)の数式表現

 SVDは行列とベクトルを使った2種類の表し方があります。まず最初に行列を使って表現してみます。例として、AというI×J行列のSVDを行うと、
{ \displaystyle
 A = UDV^{*}
}
と分解できます。ここで、

  •  U : IK列のユニタリ行列
  •  D : KK列の対角行列(対角成分は特異値 \alpha_{k}, k\in{1,2,...,K}で、 \alpha_{1} \geq \alpha_{2} \geq ... \geq \alpha_{K}を満たす)
  •  V^{*} : IK列のユニタリ行列の随伴行列

とします。このとき、Kとは、行列 Aのランクを指します(K  \leq I, J)。

次にベクトルを使って表現すると、
{ \displaystyle
 A = \sum_{k=1}^{K}\alpha_{k}u_{k}v_{k}^{T}
}
とできます。ここで、

  •  u_{k} : 左特異ベクトル(上記 Uのk行成分
  •  \alpha_{k} : 特異値
  •  v_{k} : 右特異ベクトル(上記 V^{*}のk列成分

とします。

 上記のように、SVDを使うことで対象となる行列 Aを、行列 AのランクKまでサイズを縮小、つまりデータサイズを圧縮してデータを表現できます。

SVDによる擬似近似

 特異値の値に閾値を設けることで、SVDでは擬似的にランクを落とすことが可能です。この操作により、サイズをKK'(K  \in K')に落とすことができます(計算式は[3]の1.4節を参照)。