ベクトルは「複数の数値をひとまとまりにしたもの」
ベクトル と聞くと、難しい数学用語に感じるかもしれません。しかし、すでに登場したものと実はほとんど同じです。
以前、リストやNumPy配列で「複数の値をひとまとまりとして扱う」ことを学びました。
import numpy as np
x = np.array([170, 60]) # 身長170cm, 体重60kg をまとめて扱う
これがまさに、数学で言う ベクトル です。数式では、次のように縦や横に数値を並べて表します。
x=(170, 60)
ベクトルの矢印(x)は「複数の数値をひとまとまりにしたもの」という目印だと考えてください。1つの数値(スカラーと呼びます)ではなく、複数の数値の組を1つのオブジェクトとして扱う、という発想です。
なぜこれが重要かというと、機械学習では「1件のデータ」を、複数の数値の組(ベクトル)として表すことが非常に多いからです。例えば「身長・体重・年齢」の3つの数値で1人を表す場合、(170,60,25)のような3つの数値の組がベクトルになります。前のレッスンで学んだNumPy配列は、まさにこのベクトルをコードで表現するための道具でした。
内積:ベクトル同士の「重要な」掛け算
ベクトル同士の計算の中でも、機械学習で特によく使われるのが 内積(ないせき) です。実は、NumPyの単元の演習で、気づかないうちに一度計算していました。
a⋅b=a1b1+a2b2+⋯+anbn
言葉で説明すると、「同じ位置の要素同士を掛けて、それをすべて足し合わせる」という計算です。
記号の読み方も確認しておきましょう。a1 は「a の1番目の要素」、b2 は「b の2番目の要素」と読みます。右下の小さな数字(添字、そえじ)は、何番目の要素かを表す番号です。⋯ は「途中も同じ規則で続く」という省略の記号で、n は要素の個数です。例えば要素が3つなら、a1b1+a2b2+a3b3 という意味になります。
import numpy as np
a = np.array([2, 4, 6])
b = np.array([1, 1, 1])
np.dot(a, b) # 2*1 + 4*1 + 6*1 = 12
(a * b).sum() # 同じ結果になる書き方
この内積が重要な理由は、線形回帰のような予測モデルの計算そのものが、内積で表せるからです。例えば「身長」「体重」の2つの特徴から何かを予測するモデルは、次のように表せます。
y=w1x1+w2x2+b=w⋅x+b
xが入力データ(身長・体重)、wが各項目の重要度を表す重み、という組み合わせです。「入力が増えても、内積という1つの計算方法でまとめて表せる」という点が、ベクトル・内積を学ぶ大きなメリットです。次のレッスンで、実際にこの考え方を使った線形回帰をscikit-learnで動かしてみましょう。