ラベル スカラー の投稿を表示しています。 すべての投稿を表示
ラベル スカラー の投稿を表示しています。 すべての投稿を表示

2012/08/10

文系のための「行列」(4)

行列というものがどのようなものであるか、大体は理解できた。
ふむ。では、さっそく、統計の教科書を読んでみる...。

何やら、色々と記号があって、理解できない。
アルファベットの上に何かが書いてあったり、
右下に「i」とか「j」などと書いてあったり、
見たことの無いような記号「λ」といったものある。

っという状況にある人のために、
「変数」と「添字」の見方についても整理しておく。
意味が解っている人には不要。

数学が苦手で、逃げ続けてきた(いる)人は多い。
そういった類の人は、「変数」と聞いただけで卒倒する。

「あっ...理系の人なんですね〜。私、文系なんで〜。」
はっきり言って、関係ない。

多くの場合、この手の人は、そもそも、何もできない。
そういう人になってはいけない。文系を自称して数学の苦手を強調する人で、
自身の文系能力を「きちんと」説明できた人に会ったことが無い。

深くは述べるつもりは無いが、私は古典的な文化科学の流れを引く文系研究者である。
確かに、数学は苦手ではあるが、これは「文系だから」ではなく、
中学校以来、逃げ続けてきた「結果」に過ぎない。別問題である。

何やら、愚痴っぽいな。私の身に何かあったのかもしれない。
まぁ、それで良い。そういったことを書けるのも、個人のブログ。自己満足。

話が逸れたが、「変数」とは何か?を考える。
以前の投稿で、多次元データにおける「次元」が
ある事象を空間に布置するための「軸」であると説明した。

この「軸」というのは、ある事象の特性の量的な大小であり、
したがって、「属性」の大小を布置するための基準であり、
ある属性の「値」は軸上の「どこかに」布置される。

では、その「どこか」とは、何によって決まるのか?
それは、個々の実際の対象「観測値」に依存する。
実際の対象によって、「変」わる「数」の値であるから「変数」と呼ぶ。

例えば、「人」という事象に関して、「身長」、「体重」、「年齢」、「体脂肪率」
という属性が定義されていて、「Aさん」、「Bさん」、「Cさん」、「Dさん」、
の四つの対象があったとすると、四人のそれぞれの属性の値が「変数」である。

この変数というのは、一般的に、どのような数字が入るのか不明なので、
したがって「x」や「y」、あるいは他の文字で置き換えるのである。

さらに、この話を一般化し、多次元データとして考えてみる。

ここでは、p個の属性から成る事象について、n個の対象を集めてきたとする。
すると、以下のように表現できる。これを「np行列」と呼ぶことにする。
古い教科書では、「nm行列」で表している場合がある。



データによって、属性の数も、対象も変化するので、文字に置き換えているだけである。
つまり、対象数と属性数自身が変数として説明してある。

さて、この行列の個々の「成分」は「スカラー」の「変数」である。
状況に応じて変わるので当たり前。「x」という記号で表されている。

この記号をよく見ると、右下に申し訳なさそうに、
数字(と文字)がちょこんと座っている。これを「添字(そえじ)」と呼ぶ。
要するに、この行列内における変数の場所を示しているのである。
ちなみに、英語では、「subscript」と呼ぶ。

添字も、増えていくと訳が解らなくなるが、
要するに、「何番目の変数であるか?」を表しているだけである。

上の多次元データにおいて、左上の「成分」は、 となっている。
これは、1行目の1列目の成分にある変数であることを指している。

では、 となると、どこを示しているのだろうか?
答えは、5行目の3列目の成分を示す変数である。

次に、「不特定」番目の表現について考えてみる。
対象の数が、1〜nまで存在したとして、この区間の不特定の地点を「i」とし、
属性の数が、1〜pまで存在したとして、この区間の不特定の地点を「j」とすると、
任意のある地点の変数は、 で表現できる。

これで、「変数」と「添字」の意味は大体は理解できた。抑えておきたい点は、

行列として表現されたある多次元データの成分は、
スカラーの変数であり、そのスカラーの行列内の位置を添字で特定する、

次に、行列の「ベクトル」を変数として扱う場合と、
行列自身を一つの変数として扱う場合について考える。
とにかく、最初に、どういった状況であるかを見てみる。

まずは、「横ベクトル」の場合を考える。



この例では、「横ベクトル」を取り出し、それぞれを「変数」として表現している。
つまり、以下のようになっている。全部書くのは面倒なので一行目だけ。



次に、「縦ベクトル」の場合。「横ベクトル」の場合と同じ。
ただし、並び方の関係上、直感的に解りにくいかもしれない。



これも、1列目だけを取り出してみる。
すると、以下のようになる。



疑問に思った人も居るかもしれない。つまり、
「縦ベクトル」と「横ベクトル」の区別ができない、と。
中々、良いセンスである。結論から言うと区別は無い。
そもそも、ベクトルには、縦と横の区別が無い。

では、どうするか?これが厄介である。文脈から判断する。
大抵の場合は、データの一部(あるいは全体)が示されていたり、
計算方式が、どこかに示されているので、それを見て判断する。
実際、混乱の元になるのだが…慣れれば問題ない。

最後に、「行列」自身を変数とする場合。これは、すでに示されてある。
慣例的には、「大文字」の斜体太文字アルファベットで表すのである。
行列の計算では、よくこの大文字の変数で表されていて、
教科書などでこれが出てきたら、とりあえず、行列をイメージすることが重要。


2012/08/08

文系のための「行列」(3)

そろそろ、「行列」というのがどういったものか、
ナントナクでも理解できているのではないだろうか?
そうでないと、少々、困ってしまう。まだ、難しい話はしていない。

すでに述べた話として、
行列は、複数のベクトルの集まりであり、
一つのベクトルは、スカラーの集まりである。

別の言い方をするのであれば、
スカラーが、格子状に並んでいるのが行列とも言える。
まぁ、当たり前のことではあるが。

教科書では、これを「成分」と呼ぶ場合が多い。
ということで、これも覚えておいた方が良い。
実際に、ここからは「成分」という言葉を実際に使うことになる。

さてさて、まだ、難しい話はしていないが、覚えないと行けないことはまだある。
行列で解説されている教科書を読むには、
最低限、行列の「特殊な形式」を知っておかないといけない。

何せ、理工系の学生に書かれたものの多くは、
周知の事実として、良心的な解説はしてくれない。

逆に、完全に素人向けの解説は、説明が簡単すぎる。
基礎知識の無い文系人間がゼロから始めるには、
あまりにも敷居が高い。仕方ないことかもしれないが。

毎度、関係ない話から入ってしまう。我ながら困ったものである。
そうそう。今回は、行列の「特殊な形式」について書くのであった。
ここから先の話は、覚えるしか無い。しかし、多くは無い。

ここで覚えないといけないのは以下の3つ。
  • 正方行列
  • 対称行列
  • 対角行列
他にも覚えないといけないものはあるが、
見た目の違いでは、上の三つの行列を知る必要がある。

さて、では三つの行列の種類について順番に見ていくことにしよう。
ここからは、「R」 というソフトを使って、話を進めることにする。
以下からダウンロードできる。もちろん、オープンソースで無償。

http://www.r-project.org/

コマンドライン操作なので拒否反応がでるかもしれない。
ここは、我慢。乗り越えれば、なんてことない。難しくはない。
とりあえず、今回の話で登場するコマンドを、コピー・アンド・ペースト。

さてさて、Rのインストールが完了していとして、
早速、Rを使って演習を始める。まずは、Rの基本操作の練習から。

Rが立ち上がったら、コマンドコンソールに以下をコピペ。

# 三つのスカラー「5」と「8」と「3」から、
# 変数名を「x」とするベクトルを作る。
x <- c(5, 8, 3)

ここでは、c() というコマンド(命令)が登場している。
こういったコマンドのことを、一般的に「関数」と呼ぶ。
英語では「function」と呼ぶ。何かの機能を定義しているのである。

c()関数は、combination の略で、スカラーからベクトルを作るための関数。
この関数は、非常に良く使う。計算のみならず、関数のパラメータの指定や、
グラフを描く際の色の指定や、他にも色々な所で登場する。

先頭行にシャープ(「#」)が付いている行は、
関数では無い行を意味する。なぜ、書くのか?単なるメモである。

数千行に渡ってプログラムを書いていると、
書いている本人が色々と忘れる。他の人に教えるにも不便。
この話は、いずれ詳しく書く事にしよう。

さてさて、次は、Rで行列を作る方法。今度は、ベクトルから行列を作ってみる。

# xと名付けたベクトルに、サンプルデータを入れる。
x <- c(8,2,9,3,2,4,6,5,9,6,5,4,3,5,4,1)

# ベクトルx からMと名付けた行列を作る。

M <- matrix(x, nrow=4, ncol=4)

ここで登場するのはmatrix()関数。これもよく使う。
今度は、括弧内に、x、nrow、ncolの3つが入っている。これらをパラメータと呼ぶ。
ここでは、最低限の3つのパラメータを指定しているが、実際にはもっと存在している。

まず、xというのは、最初に作ったベクトル。16個のスカラーから成っている。
nrowというのは、行数を指定するパラメータ。ここでは4を指定している。
ncolというのは、列数を指定するパラメータ。ここでも4を指定している。

要するに、xに入っているベクトルの成分(スカラー)を使って、
4✕4の行列を作成しているのである。
ちなみに、ここで作られた行列は以下のようになっている。



さてさて、いよいよ、本題に入るとしよう。

まずは、「正方行列」について。「正方形」という言葉からも連想できるかと思うが、
要するに、「正方行列」とは、行数と列数が同じ行列のことを言う。

ある行列があって、その行列が n行 × p列 であったとする。
多次元データの場合では、対象数がn個で、属性数がp個である。
つまり、n = p となっているような行列のことである。

実は、先程、Rのコマンド操作の練習で作成した行列「M」も正方行列。
ちなみに、「R」では、行数と列数を以下の方法で取り出すことができるので、
一応、確かめてみる(数が少ないので見れば判るのであるが...)。

# 行列M の行数を取り出す。
nrow(M)

# 行列M の列数を取り出す。

ncol(M)

実行結果は以下の通り。

> # 行列M の行数を取り出す。
> nrow(M)
[1] 4
> 
> # 行列M の列数を取り出す。
> ncol(M)
[1] 4

ここでは、nrow()関数とncol()関数が登場している。パラメータには行列を指定。
結果は、行数が4、列数が4、という結果が帰ってくる。
行数と列数が同じなので、この行列は「正方行列」と言える。

ところで、この正方行列を「じ〜」と眺めてみると、ある特殊な傾向が見えてくる。
一つ目の「縦ベクトル」と一つ目の「横ベクトル」はどのようになっているか?
そうそう、同じベクトルが入っている。これが「対称行列」と呼ばれるもの。

対称行列というのは、「対角成分」を挟んで、「上側の部分」と「下側の部分」が
同じになっているもの。したがって、行と列を入れ替えても同じになる。
これも重要。多次元データ解析では、毎度のように出てくる。

Rの基本操作の練習も兼ねて、同じ行列もう一度作成し、
縦ベクトルと横ベクトルを取り出す。

# xと名付けたベクトルに、サンプルデータを入れる。
x <- c(8,2,9,3,2,4,6,5,9,6,5,4,3,5,4,1)

# ベクトルx からMと名付けた行列を作る。

M <- matrix(x, nrow=4, ncol=4)

# 一つ目の「縦ベクトル(一列目)」を抽出する

M[,1]

# 一つ目の「横ベクトル(一行目)」を抽出する

M[1,]

実行結果は以下の通り。

> # xと名付けたベクトルに、サンプルデータを入れる。
> x <- c(8,2,9,3,2,4,6,5,9,6,5,4,3,5,4,1)
> 
> # ベクトルx からMと名付けた行列を作る。
> M <- matrix(x, nrow=4, ncol=4)
> 
> # 一つ目の「縦ベクトル(一列目)」を抽出する
> M[, 1]
[1] 8 2 9 3
> 
> # 一つ目の「横ベクトル(一行目)」を抽出する
> M[1, ]
[1] 8 2 9 3

行列が入った変数「M」の後ろに大括弧(「[」と「]」)が付いていて、
「カンマ(「,」)」で区切られている。これは、見れば解ること。
要するに、カンマの前で「行番号」を、後ろで「列番号」を指定するのである。

ふむ。確かに、対角成分を挟んで、上半分の成分と、下半分の成分が同じ。
一つ目の「縦ベクトル」(一列目)と、一つ目の「横ベクトル」(一行目)は、
いずれも、[8, 2, 9, 3] である。他の行と列も同じ。要するに反転させても同じ。

最後は、「対角行列」と呼ばれる行列。
結論から言うと、以下のような行列が「対角行列」である。
どのような特徴があるか?この行列をよく見て、その特徴を考えてみる。

 

まず、この行列は、3✕3の行列なので、正方行列である。これは解る。
そして、もうひとつの特徴として、対角成分以外が全て「0」であって、
対角成分のみに値が入っている。そのような特徴がある。

とりあえず、この種の形式の行列が確認できたところで、
Rを使って簡単な演習を行う。


# 三つのスカラー「5」と「8」と「3」から、
# 変数名を「x」とするベクトルを作る。
x <- c(5, 8, 3)

# 作ったベクトル「x」から、
# 変数名を「M」とする「対角行列」を作る。
(M <- diag(x))

そして、その実行結果。

> # 三つのスカラー「5」と「8」と「3」から、
> # 変数名を「x」とするベクトルを作る。
> x <- c(5, 8, 3)
>
> # 作ったベクトル「x」から、
> # 変数名を「M」とする「対角行列」を作る。
> (M <- diag(x))
     [,1] [,2] [,3]
[1,]    5    0    0
[2,]    0    8    0
[3,]    0    0    3


ここでは、diag()関数 が登場する。ベクトルから「対角行列」を作るための関数。
ちなみに、括弧(「(」と「)」)で括っているが、
このようにすることで、出力結果をすぐに表示してくれる。

さて、この結果はどのようになっているか?

たしかに、上手くいった。これが「対角行列」と呼ばれるものである。


2012/08/06

文系のための「逆行列」(1)

スカラーにおける「割り算」は、行列の何に対応するか?
間違っても、スカラーの時のような割り算をしてはいけないし、
分数の表現をするのもNG。ダメダメ。

ふむ、そもそも、「割り算」とはどのようなものだったか?
まずは、そこから整理をしてみよう。

例えば、ケーキを4等分することを考えよう。
1÷4= 0.25 あるいは 1/4 となる。確かにそうなる。

ここで、考え方を少し捻ってみる。いや、逆の考え方をしてみる。
つまり、四等分されたケーキは、いくつ集まって一つになるか?。
これも簡単な問題である。言うまでもなく、「4」である。
「1/4」が「4」個集まって「1」つのケーキになる。

さて、あまりにも当たり前すぎることであるが、
ある数があって、その数を「単位1個分」としたとき、
その数を分母とする分数のことを「逆数」と呼ぶ。

したがって、以下のように言うことができる。

「ある数」 × 「ある数の逆数」 = 「単位数」

ここで、単位数は、例外無く「1」である。
ある数を「単位1個分」とするので当然である。
当たり前すぎるので、文系頭脳では益々混乱の原因になるのだが...。

さて、話を行列に戻そう。つまり、スカラーの逆数に相当するのは何か?
これこそが、「逆行列」と呼ばれるものである。
つまり、ある行列があって、その行列を一つの単位とするとき、
スカラーの単位数に相当するのが「単位行列」であり、
「逆数」に相当するのが、「逆行列」なのである。

かなり、乱暴な説明なので、専門家からは苦言が出てくるかもしれない。
でも、まぁ、数学の知識が皆無であるような、
そういう、自称「文系」向けの話なので、目をつむってもらいましょう。

さて、ここまでで、全体の様子は理解してもらえたとしよう。
ここからが、少々、厄介な話となってくる。

行列の場合、「単位1個分」つまり「単位行列」とは何か、という問題がある。

単位行列は、元の行列に掛けても、
元の行列が出てくるだけ、
という原理を満たさないといけない。

そのようになるには、対角成分が「1」でそれ以外が「0」になる行列しか無い。
ためしに、適当な例をやってみる。

\begin{vmatrix} 1 & 9 & 4\\ 2 & 6 & 4\\ 3 & 4 & 2 \end{vmatrix} \cdot \begin{vmatrix} 1 & 0 & 0\\ 0 & 1 & 0\\ 0 & 0 & 1 \end{vmatrix} = \begin{vmatrix} 1 & 9 & 4\\ 2 & 6 & 4\\ 3 & 4 & 2 \end{vmatrix}

全部を計算するのは大変なので、一行目のだけ手計算。
行列の「かけ算」の仕方を実践すると、

\left ( 1 \times 1 \right ) + \left ( 9 \times 0 \right ) + \left ( 0 \times 4 \right ) = 1


\left ( 1 \times 0 \right ) + \left ( 9 \times 1 \right ) + \left ( 0 \times 4 \right ) = 9



掛けられる方の行列は「横方向」に1, 9, 4 となり、
掛ける方の行列は「縦方向」に1, 0, 0 となる。
それで計算すると、上のようになる。これが解の一行目。
なるほど、確かに元の行列と同じになるようだ。

最後にまとめに入ろう。要するに、「逆行列」とは何か?
我々が通常「割り算」と読んでいるものは、観点を変えると、
スカラーの世界においては「逆数」を掛けるということであり、
行列の世界においては「逆行列」を掛けるということなのである。
つまりは、「ある行列」に「別の行列」を掛けて「単位行列」となるとき、
その「別の行列」のことを「逆行列」と呼び、慣例的には、
行列の変数の右上に「-1」を付けて、 と表す。

一般的に、「逆行列」というのは、「正方行列」にしか適応できず、
縦と横の長さが異なる場合には、「疑逆行列」というのが必要になる。

文系のための「行列」(2)

さて、「行列」見た目上の形式については、既に述べた。
難しいことは無く、ただ、行方向に属性の項目が並んでいて、
列方向に観測対象ごとの属性値が並んで入るのである。当たり前の話である。

ところで、以前の話では、最後に「多次元データ」という言葉が出てきた。
ここで、「うん?多次元??どういう事?」っと思ってしまうのが文系出身者。
だと思う。「現実世界が三次元で、時間が加わって四次元になって...ド○えもん?」とか。

そういった状況では、とにかく困るのである。分析どころでは無い。
少なくとも、以下の四つの用語については知ってもらわないと困る。

  1. スカラー(Scalar)
  2. ベクトル(Vector)
  3. 行列(Matrix)
  4. 次元(Dimension)
これらの用語を知らないと、統計の教科書も読めないのである。
それ故に、最初の章で挫折していまう人が、残念ながら少なからず存在する。

まず、聞き慣れないけれども、最も簡単なのが「スカラー」。
これは、普段我々が目にする「普通の数」のことである。
100円ショップで売っている「電子卓上計算機(電卓)」で使う数字である。

中学校までに扱う数字は、全て「スカラー」なのである。それだけ。

では、それ以外には?ということで登場するのが「ベクトル」。
簡単に言うと、「スカラー」が並んでいるもの。[1, 3, 5, 7, ...] といった感じ。それだけ。

じゃ、「行列」は?これも簡単。要するに、ベクトルが並んでいるもの。
つまり、次のように並んでいるもの。
| 1, 3, 5 |
| 4, 6, 8 |
| 6, 8, 0 |

気付いてもらえただろうか?
「行列」を「ベクトル」で説明しようとした場合、
縦方向で説明したい場合と、横方向で説明したい場合がある。
ところが、「ベクトル」には、縦横が無い。
そこで、横向きに見たときには「行ベクトル」、
逆に、縦方向に見たときには「列ベクトル」と呼ぶ。

前の例で考えると、各対象ごとでは「行ベクトル」であるし、
特定の属性ごとで見ると「列ベクトル」となる。

なぜ、わざわざ「ベクトル」や「行列」というものが存在するのか?
それは、スカラーに対して、足し算、引き算、かけ算、割り算、
といった演算(いわゆる「四則演算」)があるように、
「ベクトル」と「行列」に対しても、四則演算の方法があって、
これが便利なのである。このことについては、別の所で。

最後に「次元」。「ド○えもん」のポケットのことではない。
次元というのは、ある事象の特徴を「空間」に落とし込むための概念であって、
その空間には、次元数に対応した「軸」が存在する。
したがって、ある事象の特徴というのを図形的に表現することができるのだが、
かならずしも、図形を空間上に表現するとは限らない。

ということで、「人」を例に考えてみる。
そして、「人」は、「体重」、「身長」、「年齢」を「属性」に持っているとする。
すると、「人」の特徴は三次元空間上に投影することができる。
さらに、「体脂肪率」という属性を加えると、次元はどうなるか?
簡単。四次元空間に投影することができる。人の特徴は四次元で表現できる。

したがって、「次元」とは、事象の特徴を「空間」に写像するための「軸」と言える。
より高次元なデータは、低次元なデータと比較して、ディテールを表現している。

「なるほど!では、高次元のデータの方は良いな!」...とはならない。
文系の人が陥りやすい問題。高次元の事象を低次元に落とし込むことが、
ある意味では、定量的な分析の課題なのである。
人間は、せいぜい三次元くらいまでしか、視覚的に直感できないのであるし、
実際には、平面上では、二次元に落とし込まないと解釈できないのである。

ある原則にも関わる。すなわち、「ある事柄を説明するためには、
必要以上に多くの実体を仮定するべきでない」ということである。
これを「オッカムの剃刀」と呼び、統計学にも適用される。

余談ではあるが、「オッカムの剃刀」は、
オッカムのウィリアムという人物が提唱者であり、
ショーン・コネリー主演の「薔薇の名前」の主人公である。
いわゆる、歴史サスペンスであり、中々の名作。私好みの映画であった。