Pythonを用いた機械学習13日目
本日から、ベクトルや行列について学んでいく。大量のデータを扱う機械学習では、効率よく扱えるようデータ構造を工夫する必要がある。ここでは、ニューラルネットワークで使われるベクトルと行列の概要をとらえる。
前回の記事はこちらからどうぞ。
0.用語整理
*スカラー・・・数値を表現するときに使う整数や小数などの大きさのみを表す量である。例)「2」「−1」「1.5」など
*ベクトル(ベクター)・・・大きさと向きを持つ量である。高校の教科書ではアルファベットの上に矢印をつけて表現しているが、多くの数学書ではアルファベットを太字にして表記している。
また、ベクトルを表現するとき、そのベクトルの大きさと向きを座標軸の成分に分け、軸の数だけ並べて表記する。
*行列・・・ベクトルは1行または1列なのに対し、横方向と縦方向共に複数のデータを並べたもの。行列Aは太字のアルファベット大文字で表す。
1.行列を扱うNumPyとTensorFlow
NumPyにはndarray(N dimension Array)というデータ構造がある。NumPyでは、リストを使った多重リスト(多次元配列)を引数として渡す。
*NumPyで行列を扱うコード
>>> import numpy as np
>>>
>>> a = np.array([2,1])
>>> print(a)
[2 1]
>>> b = np.array([3,2,1])
>>> print(b)
[3 2 1]
>>> A = np.array([[2,4,1],[6,3,5]])
>>> print(A)
[[2 4 1]
[6 3 5]]
>>>
NumPyを使うと、Pythonの標準リストに比べて高速に処理できる。NumPyで行列演算をするときは、リスト内の要素が基本的にすべて同じ型で構成されている必要がある。
スカラーは0次元、ベクトルは1次元、行列は2次元、さらに多次元を表現したものを「テンソル」とよぶ。また、すべてをまとめてテンソルということもあ利、スカラーは0階のテンソル、ベクトルは1階のテンソル、行列は2階のテンソルということもある。
*TensorFlowで行列を扱うコード
>>> import tensorflow as tf
>>>
>>> a = tf.constant([2,1])
>>> print(a)
tf.Tensor([2 1], shape=(2,), dtype=int32)
>>> tf.print(a)
[2 1]
>>> b = tf.constant([3,2,1])
>>> tf.print(b)
[3 2 1]
>>> A = tf.constant([[2,4,1],[6,3,5]])
>>> tf.print(A)
[[2 4 1]
[6 3 5]]
>>>
記述方法が変更にされたようで、print()で書き出す際は頭にtf.をつけると思うような結果になった。tf.なしでprint()だけで実行すると、データの中身だけでなくデータの形状(shape、各次元ごとの要素数、ここでは2個)や型(dtype、ここではint型)などの情報も書き出されるようだ。
(感想)Anacondaをインストールして今までNumPyしか使っていなかったが、今回は以下の記事を参考にしながらTensorFlowをインストールした。
ただ、新しく仮想環境を作るのもあれだったので、そのまま(base)下にpipでインストールしたがsession()が使えなかったので、今度はcondaでインストールしてみた。なにやらtensorflow-2.0.0がインストールされ、session()記述は要らなくなっているみたい。下記事を参考にコードの記述を少し変更し対応した。
【Texclipメモ】
*行列
\[
A = \left(
\begin{array}{ccc}
a & b & c \\
d & e & f \\
g & h & i
\end{array}
\right)
\]
次回は、ベクトルの和と内積について学習していく。