繰り返し述べている通り、線形代数はベクトルや行列を様々に変換して、別の新しいベクトルや行列を作り出すための算術です。それでは行列とは何でしょうか。当ページでは、この行列について以下のことがわかります。
当ページでわかること
- プログラマーにとって行列とは
- ベクトルと行列の違い
プログラマーにとって行列とは
行列とは何でしょうか?
まずベクトルについておさらいしましょう。ベクトルは線形代数の最も基本的な構成要素であり、データを意味する数値のリストです。たとえば以下の \(v\) は、3 つの数値からできているベクトルです。
\[
v
=
\begin{pmatrix}
2 & 1 & 0
\end{pmatrix}
\]
これと同じように行列もデータを意味する数値のリストです。ただし、行列には文字通り「行」と「列」という概念があります。たとえば以下の \(A\) は 3 行 3 列の行列です。
\[
A
=
\begin{pmatrix}
0 & 0 & 1 \\
1 & 0 & 0 \\
0 & 1 & 0
\end{pmatrix}
\]
このように私たちプログラマーにとっては、ベクトルも行列もデータを意味する数値のリストに過ぎません。
ベクトルと行列の違い
さて、ベクトルも行列もデータであるとしたら、両者の違いは何なのでしょうか。結論から言うと、ベクトルには入力値や出力値といった意味合いがあります。一方で、行列はベクトルを変換する写像(=関数)といった意味合いがあります。
基本的な機械学習を例に考えてみましょう。
機械学習の実践で初めて目にする行列と言えば、訓練データです。この訓練データに対して、未訓練のデータを入力することで、訓練済みデータが出力されます。
\[\begin{eqnarray}
\overset{未訓練}{
\begin{pmatrix}
2 & 1 & 0
\end{pmatrix}}
\overset{入力}{\longrightarrow}
\overset{訓練データ}{
\begin{pmatrix}
0 & 0 & 1 \\
1 & 0 & 0 \\
0 & 1 & 0
\end{pmatrix}}
\overset{出力}{\longrightarrow}
\overset{訓練済}{
\begin{pmatrix}
0 & 2 & 1
\end{pmatrix}}
\end{eqnarray}\]
このようにベクトルと行列は同じデータではありますが、前者は変換される側のデータで、後者は変換する側のデータであると考えることができます。このことから、「あるデータを変換するもの」という意味で、行列は「写像」と言われます(写像とは関数を難しくしただけの言葉です)。
以上が行列です。