Loading [MathJax]/jax/output/CommonHTML/jax.js

2019年9月27日金曜日

特異値分解

特異値分解についてお話しします。固有値分解が対象としているのは正方行列でした。特異値分解では、これを一般の行列に拡張します。つまり、行列 A に対して、直交行列 U, V、対角行列 S を用いて A=USVt のように分解します。 このとき、 S=(s1s2),U=(u1u2)V=(v1v2) です。S は特異値と言います。分解するときに使う直交行列はU, Vの2個になりますが、「正方行列の」という制限が外れます。従って、どんな行列にも使えます。ここで注意すべき点は、対角行列 S の行と列の数が異なるということです。対角からはみ出る要素はゼロになります。また、直交行列 U, V の要素数は異なります。

行列 A は正方行列である必要はありませんが、AAt は常に正方行列(対称行列)になります。ということは、この正方行列 AAt に対して固有値分解できるということです。つまり、対角行列 D として AAt=UDUt と変形できます。一方で、 AAt=USVt(USVt)t=USVtVStUt=USStUt ですから、D=SStです。同様に、 AtA=VStSVt です。

StS=(s21s22) ですから、AtA を求めて、その固有値を計算し、その正の平方根をとれば、特異値が求まるということです。

2019年9月15日日曜日

固有値分解

固有値と固有ベクトルの話は少し前にやりました。今回は固有値分解についてです。固有値分解は実質的に対角化そのものです。で、対角化とは何だったかと言いますと、正方行列 A に対して、直交行列 P, 対角行列 D として A=PDPt のような形にすることです。このとき、 D=(λ1λ2),P=(v1v2) です。ただし、λ は固有値、v は固有ベクトルです。D は固有値が対角成分に並んだ形になっていますから、対角化です。

で、 A=PDPt という形に変換したことは、正方行列 A を P の要素( P に含まれる直交ベクトル)それぞれの和で表したことになります。つまり、 A=λ1v1vt1+λ2v2vt2+ です。固有値は各項の重みを表していることになりますから、ゼロに近い固有値は無視して計算してしまっても、ある程度の精度が保てます。これは次元削減したことになり、計算コストを下げたりデータ量を減らしたりできます。あとは、Aの累乗の計算が簡単になります。

2019年9月3日火曜日

Google Colaboratoryを使えるようにする

Google Colaboratoryを使おうと思って、net検索すると、Google Driveから「アプリを追加」で対応するようなことが記載されています。で、その通りやって、Google Colaboratoryを登録するのだけど、なぜか関連のフォルダもファイルもできないし、一向に使えるようになりません。

次のようにすると、自動的にGoogle Driveにフォルダやファイルが作成されて、Google Colaboratoryが使える状態になりました。

  1. chromeでGoogleにログインする(IDとPWを入力する)
  2. chromeから直接Google Colaboratoryのサイトにアクセスする
  3. メニューの「ファイル」タブをクリックし、「Python3の新しいノートブック」をクリックする
これで、Google Driveに「Colab Notebooks」というフォルダができ、その中に「Untitled0.ipynb」というファイルができているはずです。