最近、有志を集めてデータサイエンスの実践的手法を学ぶ勉強会を開催しています。
その勉強会で教材にしているのが、『東京大学のデータサイエンティスト育成講座』です。
リンク
本書はプログラミング言語Pythonを用いて、データ分析の手法や応用について解説する、大変良いテキストです。
目次
データ分析と数学
データ分析の手法を学ぶには、統計学をはじめとする数学の知識が必須です。とくに、昨今話題のAI・機械学習・データアナリティクスといったトピックスを理解するには、高校数学以上のやや高度な数学が不可避になっています。
具体的には、微分積分学(解析学)や行列(線形代数学)についての大学初級レベルの知識がまず求められます。
しかし、かんたんな微積分はさておき、行列に関しては、高校時代に文系課程を修了した人や、若い世代の人は、高校数学の範囲内で勉強してこなかったため、
いざデータ分析の勉強をしてみようと思っても、テキストの最初からちんぷんかんぷん、ということが多々あります。
本記事ではこの「行列」に関する「最初の一歩」を踏み出すことを目的として、高校レベルの行列について基本的な事項をさらっと整理しておきます。
行列とはなにか、その定義とイメージ
私たちが数学でよく目にするのは、整数\( 1\)とか、変数\( x\)とか、関数\( f(x)\)だったりします。これらの文字や数字は、今までは「単体で」目にすることが多かったでしょう。
しかし、これら文字や数字を
並べて、まとめる
ことで、計算が簡略化されたり、数式が見やすくなったりと、いろいろと嬉しいことが起こります。
本記事で解説する行列(行列、martixマトリックス)とは、「文字や数字を長方形に並べ、両側をカッコでくくったもの」のことです。
行列は次のように表します。
\begin{equation} \begin{split} \left(
\begin{array}{ccc}
1 & x & 5 \\
y & 0 & 7
\end{array}
\right)
\end{split} \end{equation}
このようにして作った行列の、ヨコ方向のまとまりを「行(row)」、タテ方向のまとまりを「列(column)」といいます。
上の行列において、行は2つあり、
\begin{equation} \begin{split}
第1行 = \left(
\begin{array}{ccc}
1 & x & 5
\end{array}
\right)\\
第2行 = \left(
\begin{array}{ccc}
y & 0 & 7
\end{array}
\right)
\end{split} \end{equation}
です。
上の行列において、列は3つあり、
\begin{equation} \begin{split}
第1列= \left(
\begin{array}{c}
1 \\
y
\end{array}
\right),
第2列= \left(
\begin{array}{c}
x\\
0
\end{array}
\right),
第3列= \left(
\begin{array}{c}
5 \\
7
\end{array}
\right)
\end{split} \end{equation}
です。
行列の大きさ・サイズは、行数と列数によって言い表すことが出来ます。
行数が\( m\)、列数が\( n\)の行列を「\( m\times n\)行列」といいます。
正方行列とはなにか
「文字や数字を長方形に並べ、両側をカッコでくくったもの」が行列ですから、長方形の特別な場合である正方形に並べることがあっても構いません。正方形に並べるとき、行数と列数は一致しますので、「\( n\times n\)行列」が作れることになります。これを正方行列といいます。以下の行列\( A\)は\( 3\times 3\)行列です。
\begin{equation} \begin{split} A = \left(
\begin{array}{ccc}
1 & x & 5 \\
y & 0 & 7\\
-2& 0.4 & z\\
\end{array}
\right)
\end{split} \end{equation}
行列の要素・成分
行列のなかに置かれている数字や文字は「成分」もしくは「要素」と呼ばれ、行数と列数を指定することで特定してあげることが出来ます。上の行列\( A\)における\( y\)は、2行目・1列目の成分です。
行列の成分を文字を使って表すこともあり、たとえば行列\( A\)の\( i\)行目・\( j\)列目の成分を表すときに\( a_{ij}\)と表したりします。
上の行列\( A\)では
\begin{equation} \begin{split}
a_{2,1}&=y\\
a_{3,2}&=0.4
\end{split} \end{equation}
です。
行列の足し算(加算)と引き算(減算)
数字が足し引きできたのと同様、行列も足し引きできます。行列は「長方形に並べた要素」のことでした。
行列を足し引きしたければ、「要素ごとに足し引きする」のが自然でしょう。
\begin{equation} \begin{split} \left(
\begin{array}{cc}
a & b \\
c & d
\end{array}
\right)+
\left(
\begin{array}{cc}
p & q \\
r & s
\end{array}
\right)=
\left(
\begin{array}{cc}
a+p & b+q \\
c+r & d+s
\end{array}
\right)
\end{split} \end{equation}
\begin{equation} \begin{split} \left(
\begin{array}{cc}
a & b \\
c & d
\end{array}
\right)-
\left(
\begin{array}{cc}
p & q \\
r & s
\end{array}
\right)=
\left(
\begin{array}{cc}
a-p & b-q \\
c-r & d-s
\end{array}
\right)
\end{split} \end{equation}
このように足し算引き算を考える上で大切なことは、足し引きする行列の行と列の数が一致している必要がある、ということです。
例えば\( 2\times 3\)行列と\( 2\times 4\)行列を足すことはできません。
行列の実数倍
行列を実数倍(定数倍)するときも、「要素ごとに掛け算する」というルールで計算できます。\begin{equation} \begin{split}
k\times \left(
\begin{array}{cc}
a & b \\
c & d
\end{array}
\right)= \left(
\begin{array}{cc}
ka & kb \\
kc & kd
\end{array}
\right)
\end{split} \end{equation}
行列同士の掛け算(乗法)
行列に実数を掛けるのは簡単でしたが、では「行列と行列を掛ける」ことはできるのでしょうか。実は、ここが行列を勉強するときの最初のつまづきポイントです。
最初は「要素ごとに掛け算したらいいのでは?」と思うでしょう。
つまり掛け算を(あえて\( \times\)と書かずに)\( \circ\)と書いて
\begin{equation} \begin{split}
\left(
\begin{array}{cc}
a & b \\
c & d
\end{array}
\right)\circ
\left(
\begin{array}{cc}
p & q \\
r & s
\end{array}
\right)=
\left(
\begin{array}{cc}
ap & bq \\
cr & ds
\end{array}
\right)
\end{split} \end{equation}
として掛け算するのが自然だ、と思いたくなります。
この掛け算をアダマール積とか要素積といいます。
しかし、この掛け算は「ベクトルの内積」と相性がよくありません(内積についてはこちらのサイトを参考にしてください)。
ベクトルの内積については別の機会に説明をしますが、ここでは「要素ごとの掛け算は、行列同士の掛け算としてはあまり適当でない」ということを押さえておいてください。
「要素のまとまり」を考える行列においては、実は以下のようなルールで、行列同士の掛け算を考えると都合がいいとされています(掛け算記号\( \times\)は省略して書くのが通常です)。
\begin{equation} \begin{split}
\left(
\begin{array}{cc}
a & b \\
c & d
\end{array}
\right)
\left(
\begin{array}{cc}
p & q \\
r & s
\end{array}
\right)
=
\left(
\begin{array}{cc}
ap+br & aq+bs \\
cp+dr & cq+ds
\end{array}
\right)
\end{split} \end{equation}
この掛け算のルールを言葉で表現すると、「左の行列の各行と、右の行列の各列の内積を並べる」ということになります。
より詳しい内容は参考文献に書いてありますので、是非読んでみてください。
行列の掛け算は、右の行列の列数と、左の行列の行数が一致している必要があります。
つまり\( l\times \underline{m}\)行列と\(\underline{m}\times n \)行列のようなセットでないと、計算することが出来ません。
また、行列\( A\)と\( B\)の掛け算であっても、\( AB\)と\( BA\)は一致しないことがあります。つまり、行列\( A\)に、行列\( B\)を右から掛けるか、左から掛けるかによって、答えが変わるのです。
行列の掛け算のポイントをまとめるます。
- 要素ごとの掛け算は、あまり適当でない
- ちょっと複雑な計算によって、掛け算を定義する(右の行列の行と、左の行列の列の、内積をならべる)
- 右の行列の列数と、左の行列の行数が一致している必要がある
- 行列を右から掛けるのと左から掛けるのとで、答えが変わる
単位行列とはなにか
さて、すこし頭の体操です。以下のような「\( 1\)を斜めに並べ、他の要素は\( 0\)」になるような正方行列\( E\)(ここでは\( 2\times 2\)行列)を考えてみましょう。
\begin{equation} \begin{split} E=
\left(
\begin{array}{cc}
1 & 0 \\
0 & 1
\end{array}
\right)
\end{split} \end{equation}
このとき、\( 2\times 2\)の正方行列\( A\)について
\begin{equation} \begin{split}
AE=EA=A
\end{split} \end{equation}
が成り立ちます。実際に計算してみてください。\( E\)は右から掛けても左から掛けても、掛けられる行列\( A\)がそのまま返ってきます。
「どんな実数も1を掛けると、掛けられた数がそのまま返ってくる」のと似ていますね。
この「\( 1\)を斜めに並べ、他の要素は\( 0\)」になるような正方行列\( E\)を単位行列といい、「行列の世界での\( 1\)のような役割」を果たします。
逆行列とはなにか
実数を考えたとき、かならずそれに逆数が存在することを、私たちは知っています。実数\( a\)に「ある実数\( x\)」を掛けた答えが\( 1\)になるような実数のことを、\( a\)の逆数と言うのでした(この\( x\)はつまり\( \frac{ 1}{ a}=a^{-1}\)のことです)。
\( 2\)の逆数は\( \frac{ 1}{ 2}\)ですし、\( \sqrt{3}\)の逆数は\(\frac{1 }{ \sqrt{ 3}}=\frac{\sqrt{ 3 }}{ 3} \)です。
行列にも逆数のようなものが存在します。
つまり、行列\( A\)に「ある行列\( X\)」を掛けた答えが単位行列\( E\)(行列の世界での\( 1\)の役割)になるような行列のことを、\( A\)の逆行列といい、\( A^{-1}\)と表します。
数式で表すと
\begin{equation} \begin{split}
AX=XA=E
\end{split} \end{equation}
となるような行列\(X \)が、\(A \)の逆行列です。
\begin{equation} \begin{split}
AA^{-1}=A^{-1}A=E
\end{split} \end{equation}
と書いても同じことです。
逆行列なんてどこで使うんだ、と思われる方もいるでしょう。
私たちが方程式\( ax=1\)を解くときに、\( a\)の逆数\(\frac{ 1}{ a} \)が登場して\( x=\frac{ 1}{a }\)と解くことができたように、
行列を使って方程式を解くときなどに、逆行列は大活躍します。
行列\( A\)の逆行列\( A^{-1}\)の求め方や、逆行列を使った方程式の解き方は、参考文献のテキストに説明されています。
参考文献
本記事の参考にした『もう一度高校数学』は、高校1年生の数学から初めて、微積分や行列など、AIやデータ分析を理解するために必須の数学をイチから学び直せる良書です。とくに、2012年の指導要領改訂で高校数学から消えてしまった
数学C 行列
が解説されている点がおすすめできます。
文系社会人がデータ分析やAIの技術を学ぼうとしたとき、行列についての予備知識が皆無なので、テキストの最初から意味がわからない、ということが多々ありますが、
この本で(旧課程の)高校レベルの知識を身につけておけば、データ分析のテキストの理解もスムーズに進むでしょう。
『もう一度高校数学』はテキストの構成が、高校の教科書のように無味乾燥ではないのでとっつきやすいです。
リンク