ベクトルと行列──データを“数のかたまり”で表す

数学

データサイエンスを学び始めると、突然出てくる「ベクトル」「行列」という言葉。

一見、物理や数学の専門用語のように感じますが、実は──データを扱うための言葉なのです。

ベクトル=1人分のデータ
行列=全員分のデータ

と考えると、一気に親しみやすくなります。

この記事では、図とPythonコードを使いながら
「なぜデータ分析にベクトル・行列が必要なのか」を直感的に整理していきます。

データ分析や機械学習を学ぶとき、必ず出てくる「ベクトル」と「行列」。
数学が苦手でも、手を動かしながら理解できる講座で学べば、ぐっと身近になります。

👉 TechAcademy|Pythonで学ぶ統計学・データ分析講座

この記事では、図とコードを使って「ベクトル=1人分のデータ」「行列=全員分のデータ」という直感をつかみます。


1. ベクトルとは──“1人分のデータ”をひとまとめに

ベクトルとは、複数の数値をひとつにまとめたもので、データ分析では、1人の観測データや1つのサンプルを表すときに使われます。

たとえば、ある人のプロフィールを次のように整理するとします。

属性
年齢 25
身長 170
体重 60

この3つの数値を「まとめて1つのかたまり」にしたものがベクトルです。

equation

 


ここでのポイントは、

  • 1つの数字ではなく「3つの情報(年齢・身長・体重)」をひとつの単位として扱っている

  • これが“1人分のデータ”という考え方

つまり、

ベクトル=1人分(1つのサンプル)を表す数のまとまり

です。


💡 Pythonで表すとこうなります

import numpy as np
x = np.array([25, 170, 60])
print(x)

出力:

[ 25 170  60]

この1本のベクトル x は、「1人分のデータ行」 に相当します。

  • x[0] → 年齢

  • x[1] → 身長

  • x[2] → 体重

つまり、ベクトルは「個人データを1つの箱にまとめたもの」と考えるとイメージしやすいです。


🔍 ちょっとだけ数学的に言うと…

ベクトルは 方向と大きさ を持つ量(=向きのある数)ですが、データ分析では「特徴量の集まり(feature vector)」として使います。

つまり:

  • 物理では「力や速度を表す矢印」

  • 統計・機械学習では「1人の特徴を数で表した列」

同じ“ベクトル”でも、使う文脈で意味が少し違うのです。
ここでは後者、「データを扱うためのベクトル」 を扱います。


✅ まとめ

観点 ベクトルの意味 イメージ
直感的 1人分のデータをまとめたもの プロフィールを1行で表す
数学的 数を順番に並べた構造(列ベクトル) 数の矢印
データ分析的 特徴量の集まり(feature vector) モデルに渡す1サンプル

次の章では、この「ベクトル」が複数集まってできる行列(matrix)=“全員分のデータ”
を見ていきましょう。


2. 行列とは?──“全員分のデータ”を表す

ベクトルが「1人分のデータ」なら、行列(matrix)は「全員分のデータ」をまとめたものです。

たとえば、3人のプロフィールデータがあるとします。

年齢 身長 体重
A 25 170 60
B 30 180 70
C 22 160 50

ここでは、

  • 行(row) が「人」

  • 列(column) が「項目(変数)」

を表しています。

このような表を「数のかたまり」として整理したものが行列です。


📘 数式で表すと

equation

  • 1行目 → Aさん(25歳, 170cm, 60kg)

  • 2行目 → Bさん(30歳, 180cm, 70kg)

  • 3行目 → Cさん(22歳, 160cm, 50kg)

行列の「行」は“人”、「列」は“特徴(項目)”を意味します。


💡 Pythonで表すと

import numpy as np

X = np.array([
[25, 170, 60], # Aさん
[30, 180, 70], # Bさん
[22, 160, 50] # Cさん
])
print(X)

出力:

[[ 25 170  60]
 [ 30 180  70]
 [ 22 160  50]]

このように、NumPyの2次元配列が行列に対応します。
見方を整理すると──

Pythonの構造 数学的な意味 直感的なイメージ
1次元配列(vector) 1人分のデータ 1行(1サンプル)
2次元配列(matrix) 複数人のデータ 表全体(データセット)

🔍 ちょっとだけ先を見据えると…

実はこの「行列」という形こそ、データ分析や機械学習モデルの入力の基本形です。

たとえば:

行列の形 意味

equation(データ行列)

各行がサンプル、各列が特徴量

equation(ベクトル)

教師データ(ラベル)

行列×重みベクトル=予測値

ベクトル=1人分の情報
行列=全員分のデータ

この考え方を押さえておくと、回帰分析・主成分分析・ニューラルネットワークなど、どんな分野でもスッと理解できます。


✅ まとめ

概念 意味 イメージ
ベクトル 1人分のデータ 数を縦に並べた「ひとりの情報」
行列 全員分のデータ 行=人、列=項目の“データ表”
NumPy配列 ベクトル・行列のPython表現 データ分析の基本構造

次は、この行列を使って「データを変換・操作する」例を見ていきましょう。

行列演算がわかると、スケーリングや回帰分析の計算原理も理解できるようになります。


3. ベクトルと行列の関係──「点」と「面」

ベクトル=点(矢印)

  • 1人分のデータequation は、3次元空間の**1つの点(=矢印の先)**だと思ってOK。

  • 年齢・身長・体重の3軸の“座標”です。

行列=点のあつまり(雲/面)

  • 複数人のデータを並べた行列 equation は、たくさんの点の集まり(点群)

  • 似た傾向のデータは“同じ方向”に並ぶ=面っぽい形が見えてきます(これが後で学ぶ「主成分」や「回帰直線/平面」の直感)。

まとめ
ベクトル=1点、行列=点群(面)。

ここから先は「点群に対して変換をかける」と考えると、行列演算が一気に腑に落ちます。


行列の操作が“データ処理”になる

例:身長を cm → m に一括換算(列ごと変換)

データ行列(行=人、列=[年齢, 身長, 体重])を用意:

equation

 

身長(2列目)だけを100分の1にしたい。

列ごとのスケーリングは、対角行列を右から掛けるだけ:

equation

すると

equation

 

— 身長の列だけ cm→m に変わりました。

ポイント:右掛け(

equation)は“の操作”を表す、と覚えると便利です。

Pythonではこう書く(@ は行列積)

import numpy as np

X = np.array([
[25, 170, 60],
[30, 180, 70],
[22, 160, 50]
])

scale = np.diag([1, 0.01, 1]) # 年齢×1, 身長×0.01, 体重×1
X_converted = X @ scale
print(X_converted)

出力(見やすく整形):

[[25.   1.7 60. ]
 [30.   1.8 70. ]
 [22.   1.6 50. ]]

なぜ右から?
行列の列は「変数(項目)」だから。右掛けで列ごとに独立の比率をかけられます(左掛けは行=“人”の操作)。


変換のバリエーション(実務で超よく使う)

  • 平行移動(中心化):各列から平均を引く
    は列平均)
    → 回帰・PCAの前処理の定番

  • 標準化:列ごとに equation
    → スケールを揃え、距離・学習を安定化

  • 回転・射影:直交行列 equation や基底 equationを右掛け

    → PCAでの次元圧縮や特徴抽出の本体

  • 線形モデルの予測

    → 重みベクトル equationとの積で一括予測

合言葉:「行列×(右掛け)=列方向の一括変換」

これが“データ処理=行列操作”という発想のコアです。


超要約

  • ベクトル=1人分の点、行列=点群(面)

  • 列単位の処理(単位換算・標準化・特徴抽出)は右から対角/基底行列を掛けるだけ。

  • ほぼすべての前処理・PCA・回帰・ニューラルネットは、この拡張版だと思えばOK。


4. 行列は“データ変換の装置”

行列を掛ける=線形変換(回転・拡大・縮小・射影)

データ行列 equation(行=サンプル、列=特徴)に行列を掛けると、座標軸を入れ替えたり、伸ばしたり、向きを変えたりできます。

これが「線形変換」。イメージは透明なフィルターを通す感じです。

  • 右から掛ける equation列(特徴量)方向の変換

    • 例:単位換算、標準化、特徴の再合成、次元圧縮(PCAの射影)

  • 左から掛ける equation … 行(サンプル)方向の変換

    • 例:サンプルの加重平均、バッチ結合など(実務では右掛けが主役になりがち)


具体例①:スケーリング(単位換算・重みづけ)

身長だけ cm→m に換算したい(列ごとに比率を掛ける):

equation

右掛け=列操作なので、2列目(身長)だけが 1/100 になります。


具体例②:回転(座標軸の入れ替え・混ぜ合わせ)

2次元の点群 equationを角度 equation 回す回転行列:

equation

形は保ったまま向きだけ変える(距離・角度は保たれる)。

PCAで「より説明力のある向きに回す」直感に近いです。


具体例③:射影(次元圧縮=“影”を落とす)

高次元のデータを、低次元の「意味のある軸」に**落とす(写す)**操作。

列正規直交な基底行列 equation(列数=新しい次元)を使って:

equation

  • (サンプル数 equation、元の次元 equation

  • equation (取り出したい次元 equation の基底)

  • equation (圧縮後の表現)

PCAでは、ばらつきが最大になる方向(主成分ベクトル)を列にもつ

WW

を使い、equation で情報を保ったまま次元を小さくします。


具体例④:標準化(スケールを揃えて学習を安定)

各列の平均を0、分散を1に:

equation

  • 平行移動(中心化)→ 引き算は行列の和で表せる

  • 列スケールの統一 → 右から対角行列を掛ける

距離計算・回帰・クラスタリングが安定&公平になります。


具体例⑤:機械学習の「1層」は行列積

ニューラルネット(全結合層)の基本式:

equation

  • :重み(特徴の混ぜ合わせ=新しい表現を作る)

  • equation:バイアス(平行移動)

  • :非線形(ReLUやSigmoidなど)
    行列積がコア。学習で equation を更新し、「欲しい出力が出る変換」をデータから見つけます。

ミニコード:PCA風の射影(概念デモ)

import numpy as np

# データ(nサンプル×d次元)
X = np.array([
[25, 170, 60],
[30, 180, 70],
[22, 160, 50],
[28, 175, 68],
[27, 172, 63],
], dtype=float)

# 1) 列方向の中心化
mu = X.mean(axis=0, keepdims=True)
Xc = X - mu

# 2) 共分散行列(d×d)
Sigma = (Xc.T @ Xc) / (len(Xc)-1)

# 3) 固有分解で主成分方向を取得(説明のためSVDでもOK)
eigvals, eigvecs = np.linalg.eigh(Sigma) # 列が固有ベクトル
W = eigvecs[:, ::-1][:, :2] # 分散の大きい順に2次元を採用

# 4) 低次元へ射影(n×2)
Z = Xc @ W
print(Z) # → 3次元→2次元へ「情報の多い向き」に圧縮

出力:

[[  2.84492057  -0.37940977]
 [-12.11473302  -0.97623555]
 [ 17.26523103  -0.07376421]
 [ -6.87648814   1.3676765 ]
 [ -1.11893043   0.06173304]]

ポイント:

  • 中心化 → 共分散 → 固有分解 → 射影がPCAの心臓部

  • まさに「equation に行列 equation を右掛けして、良い向きに並び替える

「なるほど、コードで変換するとこうなるのか!」と思った方は、実際に自分のデータで試してみるのがいちばん理解が早いです。

TechAcademyの講座なら、NumPyを使ったベクトル・行列演算を初心者でも手を動かしながら学べます。

👉 テックアカデミーで講座内容を見てみる


一言まとめ

  • 行列は“データ変換の装置”。右掛けで**列(特徴)**をまとめて変換。

  • スケーリング・回転・射影・標準化・ニューラルネットの重み付け……
    すべてが「行列を掛ける=フィルターを通す」の応用。

  • PCAもNNも、根っこは同じ直感で捉えられます。

合言葉:行列×=特徴をまとめて加工するフィルター
これがわかると、数式が“処理の設計図”に見えてきます。

 


📘 さらに学びたい方へ

ベクトルや行列は、統計・機械学習・AIのすべての基礎。

「理屈だけでなく、手を動かして身につけたい」という方は、TechAcademy|Pythonで学ぶ統計学・データ分析講座で体系的に学ぶのがおすすめです。

確率・分布・推定・検定などの基礎から、NumPy・Pandas・可視化まで。
実際にコードを書きながら「データサイエンスの土台」を作れます。

👉 今すぐTechAcademyで学習内容をチェックする


コメント

タイトルとURLをコピーしました