Top / SJE2007 / 1217

SJE2007

課題 [edit]

その一 [edit]

SJE2007/1210 の顔画像データから平均顔を求めなさい.

その二 [edit]

上記の顔画像データの第1から第100までの主成分に対応する固有ベクトルを求め,上位のものを画像として表示しなさい. ただし,この画像データの場合,データの次元数が大きいため,これまでのような

  1. 平均を引いたデータを作る
  2. 共分散行列を求める
  3. eig()で固有値・固有ベクトルを求める

というやり方ではうまくいきません(データの次元数が 9216 もあるので,共分散行列(9216x9216)を求めるのが困難,それが求まったとしてもそこから固有値固有ベクトル求めるのがまた困難). かわりに,次のようにするとよいです.ただし,以下では d = (データの次元数), n = (データ数)としています.

  1. 平均を引いたデータをならべた d x n 行列 X を作る(このデータの場合,d > n となる)
  2. SVD(特異値分解(*1))を用いて固有ベクトルを求める
    octave> [ U, S, V ] = svd( X, 1 );
    とすると,U は行列 &mimetex( XX^{\top} ); の固有ベクトルを対応する固有値の大きい方から順に n 本ならべた行列となる.すなわち,

    #mimetex( U = [ {\bf u}_1 {\bf u}_2 \ldots {\bf u}_n ]); と書けて,第 i 列 &mimetex( {\bf u}_i ); が,i 番目に大きな固有値に対する固有ベクトルになる.

  3. 行列 &mimetex( XX^{\top} ); はデータの共分散行列をn倍したものであるので,その固有ベクトルは,共分散行列の固有ベクトルと等しい.上記の U は,共分散行列の固有ベクトルのうち固有値の大きい方から n 本をならべた行列となっている.

得られた行列 U をファイルに書き出して, Mat2PGM すれば,固有ベクトルを画像として眺めることができるでしょう.ただし,行列のサイズに注意.また,スケーリングにも注意.

(*1) 特異値分解については,教科書の6.3節参照

その三 [edit]

国語数学英語の得点を主成分分析した際には,「国際性」を無視して「学力」と「文系・理系指向度」のみから3科目の得点を近似的に再構成することができました. 顔画像の場合も同様に,ある顔画像を,上位の固有ベクトルのみ用いて再構成することができます. 上記で得られた n = 100 本の固有ベクトルのうち上位のもののみを用いて,適当な顔画像を再構成してみなさい.


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-08-13 (水) 13:45:19 (1776d)