誰か、固有値を僕に分かりやすく説明してください。行列の累乗から主成分分析に至るまで様々なところで固有値が出てきていて、「もうあと少しで全貌が分かりそうなんだけど」というところまで来ています。でも、知れば知るほどわけが分からなくなっているような気もします。純粋な数学的(開発者的)アプローチと統計学的(ユーザー的)なアプローチとではまったく視点が違うので、その間の薄皮を隔てて両側から見ているような気分です。青函トンネルを青森と函館の両側から掘り進んで、もう少しで中間地点にたどり着けそうなかんじ。その最後のところがなんだかイマイチうまくつかめないのです。
はっきりとフーリエ分析について理解できたのは修士の時でしたし、最小二乗法に至ってはしっかり理解したのは博士課程に入ってからでしたし、この固有値問題のもやもやとした霧が晴れるのはもっと先になりそうです。似たようなものに分散分析もありました。あれもイマイチよくワカラン・・・ストンと腑に落ちてこないのです。まとまった時間が取れる週末あたりにじっくりと腰を据えて考えに考えないといけないのでしょう。
そういえば、最近の疑問を思い出したので書いておきます。コンベンショナルな統計では何でもかんでも「正規分布に従うと仮定して・・・」と正規分布にしてしまいますが、正規分布で片づけられる場合ってそんなに多いのかな?という疑問。少なくとも僕の扱っている音楽音のヒストグラムは正規分布とはほど遠く、原点まわりの情報量がかなり多いのです。そのせいもあって主成分分析のかわりにprojection peusuitとか独立成分分析みたいな手法が出てきたのかもしれませんが。
コメント (13)
そんなこと言うから、解説してみたくなったじゃないかぁ!(行列の固有値について)
http://www.th.phys.titech.ac.jp/~yamamoto/butsuriya/WhatIsEigenValue.pdf
これが、なにかしらの参考になってればいいんだけど。「んなこたぁ、分かってんだよ」ってレベルかもしれません。そのときはご容赦を。
もしこの内容で気に入った場合は、お返しに今度は私に「PHPの分かりやすい入門記事」をプレゼントしてください(笑)。
いまMySQL+PHPに挑戦しようとしています。LinuxZaurusに導入してみました。
投稿者: 山本明 | 2005年8月28日 19:37
日時: 2005年8月28日 19:37
僕の場合は固有値/ベクトルってのはベクトルの回転や拡大縮小と関係しているというのは主成分分析を考えたことでだいぶ理解が進んだ覚えがあります。主成分分析はうまく固有ベクトルの特徴を使っていて、データの分散が最大になる軸から順に第一主成分、第二主成分・・・というふうに決定するんだけど、その「分散が大きい」というのが「固有値が大きい」というのと関係しているんだ。
ただ、固有値/ベクトルの線形代数的なことは分かってるつもりなんだけど、やっぱり腑に落ちないのだよ・・・。
おそらく、固有値/ベクトルに関する多くの説明では、Aという行列があって、と説明を開始して固有値と固有ベクトルを求めて、それの効用を述べるんだけど、「結局のところ固有値と固有ベクトルって何なんだ?」というのがいまいち分からない。「原油からガソリンと灯油が作れて、ガソリンは車を走らせ灯油は部屋を暖めます」という説明を聞いて「使い道は分かったけど、ガソリンと灯油っていったいなんなのさ」と思うのに似ているかも。
たぶん、固有値とかの分かりにくさって、最初のAx=axに起因するんじゃないかと思うのです。Aが既知でaとxが分からない、xを求めたい・・・xを求めたら、なんとなくxとaがAをコントロールしているような感じになっていないかい。おぃおぃAは既知だったじゃないかそこからaとxを導いたのになんで逆の立場になってるんだよ、というような。伝わるかなー。
投稿者: 時間蠅 | 2005年8月28日 20:44
日時: 2005年8月28日 20:44
そうそう、書き忘れちまった。読みごたえのある文章をありがとう。
お礼にPHPの文章を、と言いたいところだけど、僕もPHPのことは良くワカランのです。適当に http://php.net に載ってるサンプルコードを継ぎ接ぎしながらソフトを作っているので。だから、初心者の質問に答えるというのはできそうだけど、入門文章が書けるほどはよく分かってないのです。Matlabを使った信号処理の入門文章だったらなんとかなるかも。
投稿者: 時間蠅 | 2005年8月28日 20:48
日時: 2005年8月28日 20:48
>Aは既知だったじゃないかそこからaとxを導いたのになんで逆の立場になってるんだよ
固有値と固有ベクトルを使った
(固有ベクトルを並べた行列)×(対角成分が固有値の行列)×(1つ目の逆行列)
という形が行列にとっての出発地点だと私は思っています。
そもそも行列の成分を露わに書いていない状態で、行列を掛けるという操作は本来それぞれの“軸”を何倍かするって効果なんだけど、行列を表現するために座標軸を適当に選ぶと、その軸同士が絡み合った表式になってしまう。
では、そんな風に絡み合った表式だけが与えられているときに、どうやって行列本来の“軸”を見いだせばいいのか…って議論が、Ax=axから固有値/固有ベクトルを見つけるという作業かな、と。
疑問点を共有できてなさそうで、筋違いなコメントかもしれないんだけど・・・。
投稿者: 山本明 | 2005年8月30日 07:46
日時: 2005年8月30日 07:46
拡大縮小逆行列×回転行列×拡大縮小行列に分解するとか、回転はその行列の特徴を最も良く表す方向に行くとか、そういうのは分かってるんだけどねー。
話は変わって、昨日出会った固有値問題はFDN( http://www-ccrma.stanford.edu/~jos/pasp/Feedback_Delay_Networks_FDN.html )という、残響音のシミュレーションに使うアルゴリズムを使ったときに、出力結果がちゃんと収束するかどうかを確かめるために固有値を求める、というものだったよ。固有値は複素数で出てくるんだけど、そのうちすべての極が単位円の内側にあれば発散しない、というもの。
完全に固有値問題が理解できていれば、こういうのもすんなり頭にはいるだろうし、考えつくことができるんだろうなー、と思ったのでした。
投稿者: 時間蠅 | 2005年8月30日 08:53
日時: 2005年8月30日 08:53
もうひとつ見つけた固有値問題の使い道。Googleが使っているPageRankという、各Webページの重要度の指標の計算中に固有値問題が!
http://www.kusastro.kyoto-u.ac.jp/~baba/wais/pagerank.html
投稿者: 時間蠅 | 2005年8月30日 09:08
日時: 2005年8月30日 09:08
んー、分野が違えば固有値を使う問題も全く違って見えますねぇ(笑)。リンク先のページを見ても、ちんぷんかんぷん。
ただ複素数が単位円の外側だと、掛け算するたび原点から遠ざかるし、単位円の内側だったら原点に近づいていくってことを想像すると、そのアルゴリズムで行列を何度も掛け算するときに固有値が単位円の外側かどうかを考えることも・・・って、固有値の極が、なのか。…フーリエ変換でもしてる??
やっぱり私も理解が甘いですね。しっかり理解してれば、分野の違いなんて問題にならないだろうし。
投稿者: 山本明 | 2005年8月30日 09:51
日時: 2005年8月30日 09:51
>Googleが使っているPageRank
中身をまだ読んでないけど、輪を掛けて不思議ですね。
ホームページの重要度の解析にも使ってるのかぁ…。
投稿者: 山本明 | 2005年8月30日 09:54
日時: 2005年8月30日 09:54
山さん、反応が素早すぎる! すごいなー。
固有値の極というのは、固有値問題を解いていく過程で零と極が出てきちゃうので、その極に着目しているらしいです。僕もこれはよく分かってません。
Googleのほうはページごとのつながりを指向性グラフにして解析しているとか。グラフ理論ではノード同士のつながりを行列で表すことが多いんだけど、その行列の累乗を求めることによって、あるノードから別のノードに何ステップで行けるかを計算できます。かなり大きな行列の累乗を求めないといけないので、ここでも固有値問題が重要になってきます。
ただ「極を内側にした行列を作って発散を抑えたい」や「何ステップで行けるか」という問題の中で、固有値はどんな意味を持っているのか、というのが理解しにくいところ。固有値=ステップ数とかだったら分かりやすいんだけど。
投稿者: 時間蠅 | 2005年8月30日 10:59
日時: 2005年8月30日 10:59
そっかグラフ理論か。確かに行列が出てくるね。やたら大きい行列になりそう…。
なるほど、行列さえ出てくれば固有値とか固有ベクトルがなにかしら意味を持ってくるんだね。今度、行列に関する話を目にしたら、それの固有値の意味とか考えてみます。いままでにない視点が開ける…といいなぁ。
投稿者: 山本明 | 2005年8月31日 10:32
日時: 2005年8月31日 10:32
僕の扱う行列は正方行列じゃないことが多いし、とても大きいので、特異値分解をよく使ってます。山さんによる固有値問題の説明を読んでいたら、なんと特異値分解の理解が進みました。特異値分解はX=U*S*V'という形をしているんだけど、XはUがSによって拡大縮小されそのあとでVによって回転されたものだということに気づかされたんです。しかもVはユニタリ行列なのでinv(V)=V'。いまは、ここらへんから新しい音を作ろうと考えているんだけど・・・。
投稿者: 時間蠅 | 2005年8月31日 11:32
日時: 2005年8月31日 11:32
あらら、なんか役に立ったんなら、ホント書いた甲斐がありました。1人でも読んでくれる人がいるってだけでも、書いた甲斐はあったのに。
それにしても私が扱う行列といったら、正方行列か、もしくは無限次元の正方行列だったりと、都合のよいものばかりです。正方行列じゃなくても、いろいろ解析できるんだね。正方行列でないときに“特異値分析”と呼ぶの?
投稿者: 山本明 | 2005年8月31日 14:42
日時: 2005年8月31日 14:42
・・・無限次元の正方行列ってのは都合が良いものなのか? 僕にとってはかなり都合が悪そうに見えるんだけど。
特異値分解はLU分解とかQR分解と同様な行列の分解なんだけど、特にX=U*S*V'という分解をして、対角行列Sと正方行列UとVを計算する方法。このVはV'=V^{-1}だから、固有値問題がX=V*D*V^{-1}という形になっているのと似てるよね。僕はコンピュータのメモリ容量の都合でUは最初の2〜7列までを計算させてます。Uが固有ベクトルを並べた行列、Sが固有値を対角に並べた行列、Vが回転行列と考えると、固有値問題と同じような扱いができるのです。
実際、数値計算で固有値問題を解くときには特異値分解を経ることが多いみたい。
投稿者: 時間蠅 | 2005年8月31日 15:51
日時: 2005年8月31日 15:51