本文へスキップ
ひもとくAI

ベクトル入門

レッスン 2/7

ベクトルは「複数の数値をひとまとまりにしたもの」

ベクトル と聞くと、難しい数学用語に感じるかもしれません。しかし、すでに登場したものと実はほとんど同じです。

以前、リストやNumPy配列で「複数の値をひとまとまりとして扱う」ことを学びました。

import numpy as np
x = np.array([170, 60])  # 身長170cm, 体重60kg をまとめて扱う

これがまさに、数学で言う ベクトル です。数式では、次のように縦や横に数値を並べて表します。

x⃗=(170, 60)\vec{x} = (170,\ 60)

ベクトルの矢印(x⃗\vec{x})は「複数の数値をひとまとまりにしたもの」という目印だと考えてください。1つの数値(スカラーと呼びます)ではなく、複数の数値の組を1つのオブジェクトとして扱う、という発想です。

なぜこれが重要かというと、機械学習では「1件のデータ」を、複数の数値の組(ベクトル)として表すことが非常に多いからです。例えば「身長・体重・年齢」の3つの数値で1人を表す場合、(170,60,25)(170, 60, 25)のような3つの数値の組がベクトルになります。前のレッスンで学んだNumPy配列は、まさにこのベクトルをコードで表現するための道具でした。

内積:ベクトル同士の「重要な」掛け算

ベクトル同士の計算の中でも、機械学習で特によく使われるのが 内積(ないせき) です。実は、NumPyの単元の演習で、気づかないうちに一度計算していました。

a⃗⋅b⃗=a1b1+a2b2+⋯+anbn\vec{a} \cdot \vec{b} = a_1 b_1 + a_2 b_2 + \cdots + a_n b_n

言葉で説明すると、「同じ位置の要素同士を掛けて、それをすべて足し合わせる」という計算です。

記号の読み方も確認しておきましょう。a1a_1 は「a⃗\vec{a} の1番目の要素」、b2b_2 は「b⃗\vec{b} の2番目の要素」と読みます。右下の小さな数字(添字、そえじ)は、何番目の要素かを表す番号です。⋯\cdots は「途中も同じ規則で続く」という省略の記号で、nn は要素の個数です。例えば要素が3つなら、a1b1+a2b2+a3b3a_1 b_1 + a_2 b_2 + a_3 b_3 という意味になります。

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⃗+by = w_1 x_1 + w_2 x_2 + b = \vec{w} \cdot \vec{x} + b

x⃗\vec{x}が入力データ(身長・体重)、w⃗\vec{w}が各項目の重要度を表す重み、という組み合わせです。「入力が増えても、内積という1つの計算方法でまとめて表せる」という点が、ベクトル・内積を学ぶ大きなメリットです。次のレッスンで、実際にこの考え方を使った線形回帰をscikit-learnで動かしてみましょう。

演習

演習を読み込んでいます…