見出し画像

Pythonを用いた機械学習14日目

前回からベクトルや行列について学習している。今回は、ベクトルの和と大きさ(①)、ベクトルの内積(②)について学んでいく。

前回の内容はこちらからどうぞ。


1.ベクトルの和と大きさ

ベクトルの足し算は、各要素をそれぞれ足していくだけ。

例題)以下の2つのベクトルの和を求める

画像1

解答)

画像2


ベクトルの大きさを表すときは、ベクトル記号の両端を「|」で囲う。ベクトルの大きさは三平方の定理で求められる。

画像3


*NumPyでベクトルの計算を実装するコード

>>> import numpy as np
>>> import math
>>> 
>>> a = np.array([3,2])
>>> b = np.array([1,4])
>>> 
>>> print(a + b)
[4 6]
>>> print(a - b)
[ 2 -2]
>>> print(np.linalg.norm(a))
3.605551275463989
>>> print(np.linalg.norm(b))
4.123105625617661
>>> def norm(x):
...     return math.sqrt(sum([i ** 2 for i in x]))
... 
>>> print(norm(a))
3.605551275463989
>>> print(norm(b))
4.123105625617661
>>>

1〜2行目:ライブラリ(NumPyとMath)をインポート

4〜5行目:ベクトルaとベクトルbを定義

7行目:ベクトルの和を表示

9行目:ベクトルの差を表示

11行目:ベクトルaの大きさを表示

13行目:ベクトルbの大きさを表示

15〜16行目:各要素の2乗を合計して、その平方根を求める

18行目:ベクトルaの大きさを表示

20行目:ベクトルbの大きさを表示



2.ベクトルの内積

中点「・」を使って表記する。以下のようにベクトルaとベクトルbがあった場合、その内積はこのように求められる。

画像4

例題)ベクトルaとベクトルbが以下の場合の内積を求める

画像5

解答)

画像6


(2つのベクトルのなす角が垂直のとき、内積が0となる。内積が正のときは2つのベクトルのなす角が90度より小さく、内積が負のときは2つのベクトルのなす角が90度より大きくなる。)


*NumPyのdot関数を使って内積を計算するコード

>>> import numpy as np
>>> 
>>> a = np.array([3,2])
>>> b = np.array([1,4])
>>> 
>>> print(a.dot(b))
11
>>> c = np.array([2,1])
>>> d = np.array([-1,2])
>>> 
>>> print(c.dot(d))
0
>>> ​
>>> print(b.dot(a))
11
>>> print(d.dot(c))
0
>>> ​

5行目:ベクトルaとベクトルbの内積を表示する

10行目:ベクトルcとベクトルdの内積を表示する

13〜16行目:a.dot(b)のaとbを入れ替えてb.dot(a)としても結果は同じだった。c,dに関しても同様となった。


*コーシー・シュワルツの不等式

画像7

2つのベクトルのなす角で内積の最大と最小を考えられる。これはニューラルネットワークにおいて最小値を求めたい場合に使える。また、次数が増えても同じことが成り立つ。



【TeXclipに関するメモ】

*\bm{アルファベット}・・・ベクトルを表す太字

*\hspace{長さ}・・・横方向のスペース。長さは「数字mm」で書ける。行列の要素間のスペースは2mmで指定している。

*\cdot・・・中点「・」

*_(半角アンダーバー)・・・下付き文字

*\times・・・記号「×」

*leqq・・・記号「≦」


次回は、多次元のデータを演算していく。

よろしければサポートお願いします。いただいたサポートを皆さんに還元していきたいと思っております。