memo/20120425
created 2012-04-25 modified 2012-04-25
放送大学の「データマイニング」の講義で、実習言語として R言語 を取り上げていたのでおもしろそうだなぁと思い、勝手に聴講中です。
リンク | 備考 |
---|---|
データからの知識発見('12) | 秋光 淳生 センセイ |
今週の話は行列の演算と、固有値・固有ベクトル、対角化をやりました。うーむ。現役のときに絶対やったのだろうと思うけど、全く記憶にないなぁ…。
で、さっそくFedoraに R をインスコして、講義のとおり実習してみました。
講義では
> A <- matrix( c(1,2,3,4),ncol=2,nrow=2,byrow=T ) > B <- matrix( c(1,2,3,4),ncol=2,nrow=2 )
とやってたんですが、ncol=2 と nrow=2 って無駄では?と思って片方省略してみたら、OKでした。
> A <- matrix( c(1,2,3,4),ncol=2,nrow=2,byrow=T ) > A [,1] [,2] [1,] 1 2 [2,] 3 4 > A <- matrix( c(1,2,3,4),ncol=2,byrow=T ) > A [,1] [,2] [1,] 1 2 [2,] 3 4 > B <- matrix( c(1,2,3,4),ncol=2 ) > B [,1] [,2] [1,] 1 3 [2,] 2 4 > A %*% B [,1] [,2] [1,] 5 11 [2,] 11 25 >
代入が左矢印 <- とか、独特ですねぇ。ほとんどのプログラム言語では代入がイコールで、
もうそれで慣れてしまったから、逆に違和感あります。#そういえばPascal系は代入が := だったかな。
そして行列の積は
%*%記号を使う、と。
> C <- solve(A) > C [,1] [,2] [1,] -2.0 1.0 [2,] 1.5 -0.5 > A %*% C [,1] [,2] [1,] 1 1.110223e-16 [2,] 0 1.000000e+00 >
solve()は、本来は連立方程式を解くものなのだけど、行列に適用すると
逆行列を求めてくれるのだそうで。そして、もとの行列と逆行列とで積を求めて、
浮動小数の誤差があるけどほぼ単位行列になるでしょ、と。
> D <- eigen(A) > D $values [1] 5.3722813 -0.3722813 $vectors [,1] [,2] [1,] -0.4159736 -0.8245648 [2,] -0.9093767 0.5657675
そして、eigen()でAの固有値と固有ベクトルを求める...
と、この辺から自分の理解が怪しくなってきます。
前半で、行列に対する固有値・固有ベクトルの説明があったので
なんとかこの辺はついて行ってました。
その後「対角化」するところで訳ワカメ。
対角化すると固有値が並んだ行列が求められて、それによって
Aの性質が読み取れる...?
うーむ、もう一回見ないとだ...
んでも、まぁ、
「Enter押すと走り出す」ものは、なんでもおもしろい。
です。
Mathematicaも、iPythonも、Rも。octaveもかな?