🐈

Act 11. numpyを使ってみる

2024/11/01に公開

はじめに

Act 01. AIで外国為替を自動売買するまでの道のりをベースに学習を進めて行く。

Act 10. 機械学習に触れる前に学んだ数学の内容では機械学習に必要な最低限の数学を学習した。

Act 06. Pythonでデータ処理を行うの時にnumpyを触る予定だったが、数学の知識がなさ過ぎて断念したため、今回はAct10で学んだ内容をnumpyでやってみようと思う。

微分

numpyで微分を行う関数はないらしい。残念。
sympyというモジュールならできるそうだけど、今回はいったん諦める。

線形代数

線形代数はどんとこい!って感じらしいので触ってみる。

行列の定義

まずは行列を定義する方法。

array関数で定義可能。
配列の中に配列(行)を追加していく感じらしい。

Act11.py
import numpy as np

A = np.array([[1, 2]])
print("1x2行列")
print(A)

B = np.array([[1, 2], [3, 4], [5, 6]])
print("3x2行列")
print(B)

出力は以下の通り。

1x2行列
[[1 2]]
3x2行列
[[1 2]
 [3 4]
 [5 6]]

行列の積

二つの行列の積を求める場合はdot関数を使用する。

Act11.py
import numpy as np

A = np.array([[1, 2]]) # 1x2行列
B = np.array([[1, 2], [3, 4]]) # 2x2行列

print(np.dot(A, B))

出力は以下の通り。

[[ 7 10]]

行列Bを3行2列にした場合、1行2列の行列と掛け算は出来ない。

Act11.py
import numpy as np

A = np.array([[1, 2]])
B = np.array([[1, 2], [3, 4], [10, 11]])

print(np.dot(A, B))

出力は以下の通り。

Traceback (most recent call last):
  File "/home/onishi/python/Act11.py", line 6, in <module>
    print(np.dot(A, B))
          ^^^^^^^^^^^^
ValueError: shapes (1,2) and (3,2) not aligned: 2 (dim 1) != 3 (dim 0)

転置行列

転置行列も可能。

Act11.py
import numpy as np

A = np.array([[1, 2]])
B = np.array([[1, 2], [3, 4]])

print(B.T)

出力は以下の通り。

[[1 3]
 [2 4]]

統計

平均や中央値、分散、標準偏差を求めてみる。

平均

まずは平均から。

Act11.py
import numpy as np

data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1000000000])

print(data.mean())
print(np.mean(data))

出力は以下の通り。
どちらでも同じ結果になる。

90909095.9090909
90909095.9090909

中央値

先ほどの平均値は一つの大きな値につられているため、中央値を求めてみる。

Act11.py
import numpy as np

data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1000000000])

print(np.median(data))

出力は以下の通り。

6.0

分散

分散も求められる。

Act11.py
import numpy as np

data = np.array([25, 13, 86, 45, 77, 94, 43, 44, 24, 10, 32])

print(np.var(data))

出力は以下の通り。

760.8760330578511

標準偏差

先ほどの分散の内容を標準偏差にした場合

Act11.py
import numpy as np

data = np.array([25, 13, 86, 45, 77, 94, 43, 44, 24, 10, 32])

print(np.std(data))

出力は以下の通り。
どのくらいのばらつきがあるか求められた。

27.583981457683937

さいごに

実際に使ってみて思ったけど、なんか難しいね。
結局どれが重要なのか全くわからないし、どこで必要になるのか分からないとモチベが。。

これから学ぶ機械学習の内容で必要になったものをしっかり学ぼうと思う。
一旦こんなことが出来るんだな程度で次に進もうと思う。

ではまた

Discussion