【機械学習】線形代数【Coursera】-その4-

2019年9月27日

Courseraで受講している機械学習について、勉強したことをアウトプットしていこうと思います。
あくまでも自分用となるので、もっと詳しく知りたい人は是非受講してみてください。

行列とベクトル

行列について

行列とは単なる2次元配列の呼び方の違いでしか無いです。
以下は3*2の行列になります。
この行列は、集合R4X2で表せる行列です。

これらを、表現する記法として、例えばAをこの行列だとすると、
「12」を指す場合A1 1と表現する。

これが例えばA2 2だとすれば「6717」を指すことになる。

ベクトルについて

ベクトルとは1次元の配列のことです。
以下のベクトルは、集合R4で表せる行列です。

これらを、表現する記法として、例えばAをこの行列だとすると、
「12」を指す場合A1 と表現する。

インデックスは0から始まらないので注意が必要です。
これらはプログラミングの配列では無いので1からインデックスが始まるのが主流のようです。
また、行列では変数は大文字を使うのが主流になっていますので、これも合わせて覚えておきましょう。

行列の計算

もし以下のような行列を計算しなければならない場合、それはどのような計算方法になるでしょうか。

これは、単純に対応する箇所を足し算してあげればよい。
だが、これは次元が一致している場合にのみこのような計算になる。
それ以外の場合はエラーになるので気をつけましょう。

次に行列の乗算について

これはどのように計算するか。
これは各要素にX3を行ってあげれば良い。
割り算も同じようにすべての要素の計算を行えば良い。

2つの行列の掛け算

以下のような式があったとします。

はじめに、1つ目の行列の1行目(1,3)と、2つ目のベクトルの1列目(1,5 )の計算をします。
1x1 + 3x5=16
これが、1つ目の結果です。

次は4,0の行x1,5の列、、、というように計算をして、結果[16,4,3]のベクトルになります。

ルールとして、1つ目の式の列数と2つ目の式の行数が一致していなければなりません。
見た感じ転置の計算を行っているのだと思います。
1つ目の行列の行を列に、列を行に変えることで、計算方法が分かりやすく見えてきます。

もう1つ計算を行ってみます。

▶1列目の計算
1,3,2と1,0,5が対応して(1,1)を計算します。
1*1+3*0+2*10=11
4,0,1と1,0,5が対応して(1,2)を計算します。
4*1+0*0+1*5=9
▶2列目の計算
1*3+3*1+2*2=10
4*3+0*1+1*2=14
これらを行列に合わせた結果が答えです。

今回は2x3の行列と、3x2の行列をかけ合わせたのでこのような結果になりました。
1行目がmxnの行列、2行目がnxoの行列となった場合、
答えは、mxoの行列となります。これはそういうルールだと理解します。

行列の転置(インバース)

1という数字は何をかけてもかけたものが帰ってくるため、Identityと呼ばれる。
逆に、ある数字から1を結果として返してもらうときには、逆数を掛けてあげればいい。
例えば12であれば、12(12 * -1乗)=1である。

行列では、正方行列(行列の数が一致している行列)しかこの性質を持たない。
例えば以下を見てください。

Aの逆数を掛けることで、I(単位行列)が帰ってくることが分かると思います。
では、この逆数はどの様にして求めたのでしょう。
手計算で持ってくることもできますが、これは単純にプログラムで関数が実装されていることがほとんどです。
例えばOctaveという言語であれば、pinvというコマンドに行列を渡すことで簡単に求めることができます。

ちなみに、0は逆数を持ちません。Aの値がすべて0であればそれは求めることができません。
この様に逆数(逆行列)を持たないものを「特異行列」、「縮退行列」と呼ぶようです。

これらを踏まえた上で、転置(T)について確認していきましょう。
転置とは単に行列を入れ替えた行列になります。

これが、Aに対しての転置です。

終わりに

こうやって見返してみると、かなりぐちゃぐちゃに知識を覚えているようですね。。。
まとめ方も飛び飛びになっているし、確かにこれは自分の備忘レベルの記事ですわ。。

まぁ自分の為に書いているので自分がわかればそれでいいかな。。。
→じゃあ公開するなよって話ではありますが・・・

他の記事(特にSPO関連)に関してはしっかり書くつもりですので、
このコースに関しての記事は許してください。

それではまた。