これじゃいかんということで、先に線形代数の基礎を勉強することにしました。
目次
codExa(コデクサ)の動画が結構いい
codExaというサイトで機械学習用に線形代数の入門動画を見つけたので、これで勉強していこうと思います。
python+numpyは補講学習という形で、動画下にソースが書いてあります。
(numpy使うのはChapter4から)
線形代数入門は無料、その他有料動画もリーズナブル…。
あれ、Udemyいらなかったんじゃ…?
線形代数入門
Chapter1~3は説明なので、不要な方はChapter4からどうぞ。
Chapter 1 コース概要と紹介
コースの概要と簡単な説明。
- これから機械学習を学ぼうと考えている方
- 既に機械学習を勉強しているが線形代数に不安のある方
が対象とのこと。
【Chapter 2】Numpyのインストールと環境構築(オプション)
Numpyの説明とインストール方法の説明。
Windowsとmacのインストール方法が載っています。
Linuxの方はこちらをどうぞ。
【Chapter 3】行列とベクトル
行列とはなんぞや?の説明。
ベクトル=「n × 1」または「1 × n」の行列
今明かされる衝撃の事実…!!という感じでした。
高校で勉強してた時、まったく理解してなかった。。。
ベクトル=矢印のイメージしかなかった。。。
【Chapter 4】行列の足し算とスカラー倍
ここから、実際に行列の計算について学習していきます。
Numpyの実行結果とソースはこちら。
Numpyでの行列の表し方
Numpyでは行列を1行で書きますが、数式の形に変換するとこんな感じ。
4行1列は、見た目と実際の数式の書き方で行と列の書き方が逆になるので、ちょっとわかりにくいかもしれません。
1行4列
1 |
a = np.array([[2, 0, 7, 3]) |
\text a =
\begin{bmatrix}
2&0&7&3 \\
\end{bmatrix}
$$
4行1列
1 |
b = np.array([[4], [4], [9], [7]]) |
\text b =
\begin{bmatrix}
4 \\
4 \\
9 \\
7 \\
\end{bmatrix}
$$
2行4列
1 |
c = np.array([[2, 4], [0, 4], [7, 9], [3, 7]]) |
\text c =
\begin{bmatrix}
2&4 \\
0&4 \\
7&9 \\
3&7 \\
\end{bmatrix}
$$
4行3列
1 |
d = np.array([[2, 4, 6], [0, 4, 9], [7, 9, 1], [3, 7, 7]]) |
\text d =
\begin{bmatrix}
2&4&6 \\
0&4&9 \\
7&9&1 \\
3&7&7 \\
\end{bmatrix}
$$
行列の足し算
足し算は、それぞれの要素を足していきます。
\begin{bmatrix}
2&4 \\
0&4 \\
7&9 \\
3&7 \\
\end{bmatrix}
+
\begin{bmatrix}
7&2 \\
3&0 \\
8&3 \\
1&5 \\
\end{bmatrix}
=
\begin{bmatrix}
2+7&4+2 \\
0+3&4+0 \\
7+8&9+3 \\
3+1&7+5 \\
\end{bmatrix}
=
\begin{bmatrix}
9&6 \\
3&4 \\
15&12 \\
4&12 \\
\end{bmatrix}
$$
行と列の数が一致しない場合は足すことができません。
Numpyで実行した場合はエラーになります。
\begin{bmatrix}
2 \\
0 \\
\end{bmatrix}
+
\begin{bmatrix}
7&2 \\
3&0 \\
8&3 \\
\end{bmatrix}
=
Error!
$$
行列の掛け算(スカラー倍)
実数と行列をかける場合は、足し算と同じく各要素に実数をかけていきます。
6
\times
\begin{bmatrix}
7&2 \\
3&0 \\
8&3 \\
\end{bmatrix}
=
\begin{bmatrix}
7 \times 6 &2 \times 6 \\
3 \times 6 &0 \times 6 \\
8 \times 6&3 \times 6 \\
\end{bmatrix}
=
\begin{bmatrix}
42&12 \\
18&0 \\
48&18 \\
\end{bmatrix}
$$
行列の割り算(スカラー倍)
割り算も掛け算と同様です。
3で割る、というのは1/3をかける、と表すことができます。
\begin{bmatrix}
6&12 \\
1&9 \\
0&3 \\
\end{bmatrix}
\div 3
=
\begin{bmatrix}
6 \div 3 &12 \div 3 \\
1 \div 3 &9 \div 3 \\
0 \div 3&3 \div 3 \\
\end{bmatrix}
=
\begin{bmatrix}
6 \times 1/3 &12 \times 1/3 \\
1 \times 1/3 &9 \times 1/3 \\
0 \times 1/3&3 \times 1/3 \\
\end{bmatrix}
=
\begin{bmatrix}
2&4 \\
0.333333&3 \\
0&1 \\
\end{bmatrix}
$$
行列の四則演算
ちょっと複雑にして、以下の計算をしてみます。
a =
\begin{bmatrix}
2 \\
1 \\
0 \\
3 \\
\end{bmatrix}
\quad
b =
\begin{bmatrix}
4 \\
2 \\
3 \\
1 \\
\end{bmatrix}
\quad
c =
\begin{bmatrix}
6 \\
0 \\
3 \\
12 \\
\end{bmatrix}
\quad
$$
$$
(5 \times a )- b + (c \div 6) =
$$
普通の計算式と同じく、カッコの中から計算すればOKです。
\begin{bmatrix}
10 \\
5 \\
0 \\
15 \\
\end{bmatrix}
-
\begin{bmatrix}
4 \\
2 \\
3 \\
1 \\
\end{bmatrix}
+
\begin{bmatrix}
1 \\
0 \\
0.5 \\
2 \\
\end{bmatrix}
=
\begin{bmatrix}
7 \\
3 \\
-2.5 \\
16 \\
\end{bmatrix}
$$
まとめ
学生時代は、何のためにそれを計算するのか全く分からず、数学というものが嫌いでした。
(理由を教えられず穴を掘り続ける拷問的な)
でも必要があって勉強してみると、頭にすんなり入ってきますね。
まだまだ入り口部分ですが、勉強してスゲーデータ分析エンジニアになれたらいいなぁ。