論文一覧に戻る 📚 用語集トップ 🗺 概念マップ
📚 用語解説
📚 用語解説
ベクトル
Vector
数学基礎線形代数必修

🔖 キーワード索引

💡 結論 📍 文脈 🎨 直感 🎮 触って理解 📐 定義 🔬 記号 🧮 実値 🐍 Python ⚠️ 落とし穴 🌐 関連手法 🔗 関連用語 📚 グループ教材 🗺 概念マップ

vector math」は統計データ分析の文脈で扱う重要概念のひとつ。 本ページでは「vector math」を取り巻く中核キーワードを以下にチップで一覧化する。 各キーワードは関連する概念・手法・道具立てを含み、 文献検索や学習計画の起点になる。

vector math統計分析SSDSE-B-2026前提条件適用範囲落とし穴関連手法Python 実装検証方法

これらのキーワードは「vector math の理解 → 適用 → 検証」のプロセスを構成する。 各章で詳しく解説する。

💡 30秒で分かる結論

🍰 まずはやさしく

ベクトルは、向きと大きさを持つ矢印のようなものです。

データの似ているところを数値で測るために使います。

都道府県の人口や支出などのリストが例です。

この章では、ベクトルの基本と使い道を学びます。

📍 あなたが今見ているもの

🍰 まずはやさしく

ベクトルは、行列を学ぶための基礎となる道具です。

データの違いを計算して比べるために使います。

東京と大阪がどれくらい似ているかを数値にします。

ここでは、計算方法と図でのイメージを学びます。

ベクトル」は 行列 の前提となる、 数学・統計の最も基礎的な対象です。 SSDSE-B-2026 では、 1 つの都道府県 = 1 本のベクトルとして表現できます。 ベクトルの内積・ノルム・コサイン類似度を理解すると、 「東京と大阪はどれくらい似ているか?」を 数値で 言えるようになります。 本ページでは、 都道府県ベクトルの内積・コサイン類似度を実値で計算しつつ、 ベクトル空間の幾何イメージを身につけます。

前提知識: 中学・高校レベルの平面・空間ベクトル。 次に学ぶ: 行列内積ノルム

🎨 直感で掴む

🍰 まずはやさしく

ベクトルは、データのプロフィールのようなものです。

たくさんの情報をまとめて扱うために使います。

スマホのアプリで好みの傾向を出すときなどに似ています。

矢印の向きで「似ているか」を判断する方法を学びます。

イメージ 1: 矢印。 2 次元なら $(x, y)$、 3 次元なら $(x,y,z)$。 矢印の始点を原点に置き、 終点が要素の値。 大きさ = 長さ、 向き = 角度。

イメージ 2: 都道府県プロフィール。 東京都 = (人口, 出生数, 消費支出, …) という 100 次元超のリスト。 これがそのままベクトル。 47 本の矢印が、 高次元の空間に並んでいる風景を想像しましょう。

イメージ 3: 類似度。 2 つの矢印のなす角が小さいほど「似ている」。 これがコサイン類似度。 神奈川と埼玉は近い方向を向き、 東京と沖縄は遠い角度を成すと予想できます。

補足: ベクトルは「データ点・特徴量・方向」の 3 つの顔を持ちます。 同じ列ベクトルでも、 観測なのか変数なのか文脈で意味が変わります。

🎮 触って理解する

2 つのベクトル a(青)と b(橙)の 先端の丸をドラッグ(スマホはタッチ)して動かしてみましょう。 和 a+b(平行四辺形)・差 a−b・スカラー倍 c·a・内積 a·bb の a への射影・なす角・ノルムがすべてリアルタイムで再計算・再描画されます。 とくに 内積の符号が「鋭角 → 直交 → 鈍角」で切り替わる瞬間を体感してください。


📊 リアルタイム計算
a =(3.0, 1.0)‖a‖ = 3.16
b =(1.0, 2.5)‖b‖ = 2.69
内積 a·b5.50 (スカラー1個)
要素積 a⊙b(3.0, 2.5) ←別物!
なす角 θ40.4°
cos θ0.647
鋭角(a·b > 0:似た向き)

※ グリッド 1 マス = 1。 内積 a·b = 「b を a 方向へ射影した長さ × ‖a‖」= ‖a‖‖b‖cosθ。 3 つの式が常に一致します。

🎨 直感でつかむ

ベクトルは「大きさと向きを持つ量」。 上の図で a を回しても、 長さ ‖a‖ を保ったまま向きだけ変えられます。 ba と同じ向きに近づけると cosθ→1(内積は最大)、 直角にすると cosθ=0(内積 0)、 逆向きにすると cosθ→−1(内積は最も負)になります。 「近さ」を測るコサイン類似度が 向きだけ の情報であることが、 手を動かすと腑に落ちます。

⚠️ よくある落とし穴:内積 a·b と 要素積 a⊙b の混同

パネルの a·bスカラー1 個)と a⊙bベクトル、アダマール積)を見比べてください。 内積は要素積の 総和:$a\cdot b = \sum_i a_i b_i = (a\odot b)$ の各成分を足したもの。 NumPy では a @ b(内積・スカラー)と a * b(要素積・配列)がまったく別物です。 コサイン類似度や距離の計算で * を使ってしまう取り違えは頻出バグなので、 「内積は足すまでがワンセット」と覚えましょう。

🚀 発展:基底・線形結合・特徴ベクトル

スカラー倍スライダーで c·a を伸縮させ、 チェックで a+b を出すと、 平面上の任意の点が a と b の線形結合 $c_1 a + c_2 b$ で書けることが見えます。 一次独立な 2 本が平面の 内積 空間の 基底で、 標準基底 $e_1,e_2$ もその一例。 機械学習ではデータ 1 件がこうした 特徴ベクトルで表され、 コサイン類似度ノルム距離で近さを測り、 主成分分析 で少数の基底へ圧縮し、 単語埋め込み線形回帰k-means へと展開します。 高次元でも成り立つこの幾何が、 SSDSE-B-2026 の 47 都道府県ベクトルを扱う土台です(行列次元削減 も参照)。

📐 数式による定義

🍰 まずはやさしく

ベクトルは、数字を縦に並べたリストのことです。

計算で正確な大きさを出すために使います。

テストの点数を科目ごとに並べたリストが例です。

足し算や長さの出し方などの計算ルールを学びます。

$n$ 次元ベクトル $v$ は、 実数 $v_1, \ldots, v_n$ を縦に並べた要素:

$$ v = \begin{pmatrix} v_1\\ v_2\\ \vdots\\ v_n \end{pmatrix} \in \mathbb{R}^{n} $$

基本演算:

特別なベクトル:

$$ \mathbf{0} = \begin{pmatrix}0\\\vdots\\0\end{pmatrix},\quad e_i = \begin{pmatrix}0\\\vdots\\1\\\vdots\\0\end{pmatrix}\;(i\text{番目だけ}1) $$

$\mathbf{0}$ は零ベクトル、 $e_i$ は標準基底ベクトル。 任意のベクトル $v=\sum_i v_i e_i$。

📐 内積の幾何的解釈

内積 $v\cdot w = \|v\|\|w\|\cos\theta$ は、 ノルム積に角度のコサインをかけたもの。 言い換えれば「$w$ を $v$ 方向に射影した長さに $v$ のノルムをかけた量」。

SSDSE で「東京 ベクトル」「神奈川 ベクトル」をなす角度を $\arccos(0.99) \approx 8^\circ$ と計算すれば、 ほとんど同じ方向だと言える。 一方「東京-沖縄」は約 120°、 逆向きに近い。

射影の応用:回帰の予測値 $\hat y$ は $y$ を $X$ の列空間へ 射影 したベクトル。 残差は射影残差。 つまり最小二乗とは「直交射影」の幾何問題に他なりません。

❓ よくある質問

Q1. なぜベクトルは縦書きが標準なのですか?

行列との互換性のため。 $Ax$(左から行列を作用させる)が縦ベクトルで自然に書ける。 ただし NumPy では 1 次元配列は向きがない(行でも列でもない)扱い。

Q2. ベクトルの「次元」と統計の「自由度」は同じ?

違います。 次元は要素の数、 自由度は独立に動ける成分の数。 平均を引いたあとは次元 $n$、 自由度 $n-1$ になる。

Q3. 単位の違うベクトルでもコサイン類似度は使えますか?

原理的にはノルムで割るので「大きさは打ち消される」。 ただし、 ある成分の単位が極端に大きいと、 その成分が方向を支配してしまうので、 やはり標準化が安全。

Q4. ノルムの種類を選ぶ基準は?

外れ値に強くしたい → L1、 滑らかさ重視 → L2、 最大成分を抑えたい → L∞。 機械学習の正則化(Lasso / Ridge)でも同じ選択基準が出てきます。

Q5. ベクトルの「向き」と「長さ」を切り離すには?

$\hat v = v / \|v\|$ で単位ベクトル化(正規化)。 これでベクトルは方向情報だけを保持。 cos 類似度はまさにこの単位ベクトルどうしの内積です。

🔄 「同じベクトル」でも見方で意味が変わる

SSDSE-B-2026 を行列 $X$ にすると、 行を取れば「都道府県ベクトル」、 列を取れば「変数ベクトル」。 同じ数字が、 ある時は「東京の特徴」、 別の時は「人口の都道府県分布」になります。

取り方ベクトル意味使い所
行ベクトル$X[i,:]$都道府県 $i$ のプロフィール類似度・クラスタリング
列ベクトル$X[:,j]$変数 $j$ の 47 都道府県分布相関・共分散
中心化行$X[i,:] - \bar X$平均からのずれPCA・異常検知
標準化行Z-score単位を揃えた特徴距離計算

📌 ベクトル分析の実務手順

  1. SSDSE-B-2026 を pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) で読み込む(複数年度を含むため年度で絞り込む)
  2. 数値列のみを抽出(select_dtypes(include='number')
  3. 欠損処理(除外 or 補完)
  4. 標準化 (X - X.mean()) / X.std(ddof=0)
  5. 各都道府県を 1 つのベクトルとして取り出す
  6. 距離指標を選ぶ(ユークリッド / コサイン / マハラノビス)
  7. 類似度・距離行列を計算 pdist
  8. 近傍検索・クラスタリング・可視化に進む
  9. 結果の解釈で「単位 / 標準化 / 次元数」をレポートに明記

📐 ベクトル空間の公理

「ベクトル空間」と呼べるためには、 和とスカラー倍について以下の規則が成り立つ必要があります。 これらを満たす集合(実は関数の集合や数列の集合も)に対して、 ベクトルの数学が同じように使えます。

  1. 和の閉性 $v+w \in V$、 和の結合・交換律
  2. 零ベクトルの存在 $v+\mathbf{0}=v$
  3. 逆ベクトルの存在 $v+(-v)=\mathbf{0}$
  4. スカラー倍の閉性 $cv \in V$
  5. スカラー倍の分配 $c(v+w)=cv+cw$、 $(c+d)v=cv+dv$
  6. スカラー倍の結合 $(cd)v=c(dv)$
  7. 単位元 $1\cdot v=v$

SSDSE の数値列も $\mathbb{R}^d$ の元なので、 これらの公理が成立。 だからベクトルとして扱える。 ただし「都道府県名」「カテゴリ」はベクトルではないので、 ワンホット化などの前処理が必要です。

🔬 数式を言葉で読み解く

記号読み方SSDSE での意味
$v$ブイ1 つの都道府県のプロフィール
$\|v\|_2$L2 ノルムプロフィールの「絶対サイズ」
$\|v\|_1$L1 ノルム各要素の絶対値和
$\|v\|_\infty$最大ノルム最大成分の絶対値
$v\cdot w$内積2 都道府県の特徴の合致度
$\cos\theta_{vw}$コサイン類似度$-1\sim 1$ の類似度尺度
$d(v,w)$距離プロフィール差の大きさ
$e_i$基底$i$ 番目だけ 1 の単位ベクトル

🔬 数式を言葉で読み解く — ベクトル演算の意味

ベクトル数学の核心は 5 つの基本演算に集約される。 それぞれを「言葉」「数式」「直感」「SSDSE 例」の 4 視点で読み解く。

演算 1:内積 (Dot Product)

数式:\(\mathbf{u} \cdot \mathbf{v} = \sum_i u_i v_i = \|\mathbf{u}\| \|\mathbf{v}\| \cos\theta\)

言葉:「対応する成分を掛け、 全て足す」。 幾何的には「片方をもう一方の方向に投影した長さ × もう一方の長さ」。

直感:内積が正なら 2 ベクトルは「同じ方向寄り」、 0 なら直交、 負なら「反対方向寄り」。 SSDSE-B-2026 で「人口ベクトル」と「出生数ベクトル」の内積を取ると、 強い正の値 → 強い正の相関を示す。

SSDSE 例:47 県の (人口, 出生数) ペアの内積 = 約 4.1 × 10¹²。 これを各ベクトルの長さで割ると相関係数 0.995 に対応。

演算 2:ノルム (Norm, 長さ)

数式:\(\|\mathbf{v}\|_p = \left(\sum_i |v_i|^p\right)^{1/p}\)。 p=1 はマンハッタン距離(L1)、 p=2 はユークリッド距離(L2)、 p=∞ は最大値。

言葉:ベクトルの「大きさ」を測る関数。 L2 は 原点からの直線距離、 L1 は マンハッタン的な街路距離

SSDSE 例:「東京の特徴ベクトル」と「鳥取の特徴ベクトル」の差のノルムは、 2 県の 多次元距離を測る。

演算 3:コサイン類似度

数式:\(\cos\theta = \frac{\mathbf{u} \cdot \mathbf{v}}{\|\mathbf{u}\| \|\mathbf{v}\|}\)

言葉:内積をノルムで正規化したもの。 -1 から 1 の範囲。 「スケールに依存しない類似度」を測る。

SSDSE 例:東京と神奈川の特徴ベクトル(標準化後)のコサイン類似度 ≈ 0.99。 東京と鳥取は ≈ −0.97 とほぼ逆向き。 スケールに依存せず「プロフィールの向き」の類似度を測れる。

演算 4:射影 (Projection)

数式:\(\text{proj}_{\mathbf{v}}(\mathbf{u}) = \frac{\mathbf{u} \cdot \mathbf{v}}{\|\mathbf{v}\|^2} \mathbf{v}\)

言葉:ベクトル u を v 方向に「影を落とす」。 線形回帰の幾何学的解釈はこの射影。

SSDSE 例:47 県の (人口, 出生数) 散布図で「回帰直線への射影」を取ると、 各県の「人口で説明できる出生数」が出る。 残差 = 元のベクトル − 射影。

演算 5:外積・テンソル積

数式:\(\mathbf{u} \otimes \mathbf{v} = \mathbf{u}\mathbf{v}^T\)(行列を生成)

言葉:2 つのベクトルから行列を作る。 共分散行列・グラム行列の基礎。

SSDSE 例:47 県の特徴ベクトル群の外積を平均すると、 47 × 47 の共分散行列が得られる(PCA・カーネル法の基礎)。

これら 5 演算を全て理解すれば、 PCA・SVD・線形回帰・k-NN・コサイン類似度・word2vec まで、 機械学習の幾何学的解釈が 一気通貫で見えてくる。 SSDSE-B-2026 のような多次元データを扱う際の必須知識。 数式を「言葉で読み解く」ことで、 公式の暗記から脱却し、 幾何学的直感に基づく深い理解が得られる。 これがベクトル数学を学ぶ最大の価値である。

🔍 深掘り 1:ベクトル空間の代数構造

ベクトル空間 V は 8 つの公理を満たす集合:① 加法の閉包、 ② 加法の結合律、 ③ 加法の交換律、 ④ 零元の存在、 ⑤ 逆元の存在、 ⑥ スカラー倍の閉包、 ⑦ スカラー倍の分配律(ベクトル)、 ⑧ スカラー倍の分配律(スカラー)。 R^n だけでなく、 関数空間・多項式空間など多彩な対象が「ベクトル」になる。

基底と次元

線形独立な n 個のベクトルで張られる空間が n 次元。 SSDSE-B-2026 の 100 列のデータは形式的に 100 次元だが、 PCA で「実質的な次元」は 5-10 次元程度に落ちる(多くの列が相関)。

線形変換と行列

線形変換 T: V → W は行列で表現できる。 「回転」「拡大縮小」「射影」など、 すべて行列。 SSDSE の重回帰係数ベクトル \(\hat\beta\) は、 入力空間 R^p から出力空間 R^1 への線形変換。

内積空間とヒルベルト空間

内積が定義された空間が内積空間。 完備な内積空間がヒルベルト空間。 関数空間 L²(二乗可積分関数の空間)は無限次元ヒルベルト空間。 カーネル法はヒルベルト空間で展開される。

🔍 深掘り 2:SSDSE-B-2026 でのベクトル演算実演

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 A1101(総人口) A1303(65歳以上人口) A4101(出生数) A5101(転入者数(日本人移動者)) E4501(高等学校生徒数) 北海道 5,092,000 1,681,000 24,430 47,388 109,290 東京都 14,086,000 3,205,000 86,348 406,749 299,865 沖縄県 1,468,000 350,000 12,549 26,410 42,535 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import pandas as pd
import numpy as np

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
df = df[df['SSDSE-B-2026'] == 2023].reset_index(drop=True)  # 2023 年度のみ抽出

# 1) ベクトル抽出
pop = df['A1101'].values        # 総人口ベクトル (47,)
births = df['A4101'].values     # 出生数ベクトル (47,)

# 2) 内積(ベクトル u·v)
dot = pop @ births
print(f'内積 = {dot:,.0f}')

# 3) ノルム (L2)
print(f'||人口|| = {np.linalg.norm(pop):,.0f}')
print(f'||出生数|| = {np.linalg.norm(births):,.0f}')

# 4) コサイン類似度
cos_sim = dot / (np.linalg.norm(pop) * np.linalg.norm(births))
print(f'cos類似度 = {cos_sim:.4f}')

# 5) 中心化してコサイン → 相関係数
pop_c = pop - pop.mean()
births_c = births - births.mean()
corr = (pop_c @ births_c) / (np.linalg.norm(pop_c) * np.linalg.norm(births_c))
print(f'相関係数 = {corr:.4f}')

# 6) 都道府県ベクトル間の距離 (東京 vs 鳥取)
features = ['A1101', 'A4101', 'A1303', 'A5101', 'E4501']
X = df[features].values
# 標準化
from sklearn.preprocessing import StandardScaler
Xs = StandardScaler().fit_transform(X)
tokyo_idx, tottori_idx = 12, 30  # SSDSE のインデックス
dist = np.linalg.norm(Xs[tokyo_idx] - Xs[tottori_idx])
print(f'東京-鳥取距離 = {dist:.3f}')

# 7) 47×47 ペアワイズ距離行列
from sklearn.metrics import pairwise_distances
D = pairwise_distances(Xs)
print(f'最も類似した県ペア: distance = {D[D > 0].min():.3f}')
📤 実行例(実測) 内積 = 4,121,807,214,000 ||人口|| = 26,249,262 ||出生数|| = 157,454 cos類似度 = 0.9973 相関係数 = 0.9954 東京-鳥取距離 = 11.108 最も類似した県ペア: distance = 0.023

🔍 深掘り 3:ベクトル数学の応用 10 シナリオ

  1. 線形回帰:正規方程式 \(\hat\beta = (X^TX)^{-1}X^Ty\) はベクトル・行列演算。
  2. PCA:共分散行列の固有ベクトルが主成分。 SSDSE の 100 列を数次元に圧縮。
  3. k-NN:ベクトル間のユークリッド距離で類似度判定。
  4. クラスタリング:K-means は重心ベクトルからの距離最小化。
  5. コサイン類似度:文書ベクトル・画像ベクトルの類似度評価。
  6. Embedding:単語・商品・ユーザーをベクトル化(word2vec, item2vec)。
  7. Attention:Transformer の Q・K・V はすべてベクトル演算。
  8. SVD:行列をベクトル基底に分解、 推薦システムの基礎。
  9. Manifold Learning:t-SNE, UMAP で高次元ベクトルを 2D 可視化。
  10. カーネル法:データを高次元ベクトル空間に写像して線形分離。

🔍 深掘り 4:ベクトル数学の歴史

🎤 4 要素 narration:ベクトル数学を物語として読む

① 課題(Problem)

SSDSE-B-2026 の 47 都道府県 × 100 列のデータがある。 各県は 100 次元の点と見なせる。 これらの「類似度」「距離」「主要パターン」を測る必要があるが、 100 次元を頭の中で扱うのは不可能。 数学的な道具立てが必要。

② 方法(Method)

ベクトル数学を採用。 ① 内積で類似度を測る、 ② ノルムで「大きさ」を測る、 ③ コサイン類似度でスケール独立な類似度、 ④ ユークリッド距離で「点の近さ」、 ⑤ 射影で「ある方向への寄与」、 ⑥ PCA で次元圧縮、 ⑦ SVD で潜在因子抽出、 という 7 つの基本操作で多次元データを扱う。

③ 結果(Result)

SSDSE-B-2026(2023 年度・全数値列)の標準化後ベクトルで分析すると、 東京と神奈川のコサイン類似度 ≈ 0.88、 東京と鳥取は ≈ −0.81 とほぼ逆向き。 PCA を適用すると第 1 主成分(人口規模)で約 77% の分散を説明、 第 2 主成分で追加 5%。 つまり 2 次元で約 82% の情報を保持。 47 県を 2D 散布図で可視化でき、 「都市圏 vs 地方圏」「若年県 vs 高齢県」のクラスタが明瞭に見える。

④ 含意(Implication)

ベクトル数学は 機械学習の言語。 線形回帰・PCA・k-NN・word2vec・Transformer・Diffusion model — すべての中身がベクトル演算。 SSDSE 解析者にとっての教訓は ① 47 県を「点」と見る、 ② 100 列を「特徴空間の次元」と見る、 ③ 距離・類似度はスケール標準化が必須、 ④ 高次元データは PCA で「俯瞰」する、 ⑤ ベクトル演算をマスターすれば、 任意の機械学習アルゴリズムの中身が見える、 という 5 点。 数式に怯えず、 「ベクトルは矢印、 行列はベクトルの変換」という直感を持つことが最重要。

🔍 深掘り 5:PCA と SVD — ベクトル数学の華

主成分分析(PCA)は「データを最も説明する方向ベクトル」を見つける手法。 数学的には共分散行列の固有値分解、 あるいは特異値分解(SVD)。

数式

$$ X = U \Sigma V^T,\quad \text{cov}(X) = V \Sigma^2 V^T / n $$

V の列(右特異ベクトル)が主成分。 Σ の対角値が各主成分の寄与度。

SSDSE での実演

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
import matplotlib.pyplot as plt

from sklearn.decomposition import PCA

# SSDSE-B-2026 の主要特徴
features = ['A1101', 'A1303', 'A4101', 'A5101', 'A4200',
            'E4501', 'E4601', 'F3101']
X = StandardScaler().fit_transform(df[features].values)

pca = PCA(n_components=3).fit(X)
print(f'各主成分の寄与率: {pca.explained_variance_ratio_}')
print(f'累積寄与率: {pca.explained_variance_ratio_.cumsum()}')

# PCA 後の 2D 散布図
X_pca = pca.transform(X)
plt.scatter(X_pca[:, 0], X_pca[:, 1])
for i, p in enumerate(df['Prefecture']):
    plt.annotate(p, X_pca[i, :2])   # xy は 2 要素
📤 実行例(実測) 各主成分の寄与率: [0.97646866 0.01577883 0.00489308] 累積寄与率: [0.97646866 0.99224749 0.99714058]

SSDSE-B-2026(2023 年度)で 8 特徴を PCA すると、 第 1 主成分(人口規模軸)で約 98% の分散を説明。 第 2 主成分(高齢化軸)は約 2%。 規模系 8 特徴は強く相関するため、 事実上 1〜2 次元で「見える化」できる。

🔍 深掘り 6:距離・類似度の総覧

距離・類似度 数式 特徴 SSDSE 用途
ユークリッド (L2)\(\sqrt{\sum (u_i - v_i)^2}\)直線距離県の多次元類似度
マンハッタン (L1)\(\sum |u_i - v_i|\)外れ値耐性ロバストクラスタリング
チェビシェフ (L∞)\(\max_i |u_i - v_i|\)最大成分差最悪ケース分析
マハラノビス\(\sqrt{(u-v)^T S^{-1} (u-v)}\)分散・相関考慮外れ値検出
コサイン類似度\(\frac{u \cdot v}{\|u\|\|v\|}\)スケール独立県の特徴方向
ピアソン相関中心化コサイン線形関係変数間相関
ジャカード\(\frac{|A \cap B|}{|A \cup B|}\)集合類似度バイナリ特徴
ハミング\(\sum \mathbb{1}[u_i \neq v_i]\)不一致ビット数カテゴリ比較
KL ダイバージェンス\(\sum p \log(p/q)\)分布間距離(非対称)確率分布比較
JS ダイバージェンス対称化 KL分布距離(対称)分布シフト検知

🔍 深掘り 7:NumPy ベクトル演算クックブック

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import numpy as np

# 基本演算
u = np.array([1, 2, 3])
v = np.array([4, 5, 6])

# 内積
print(u @ v)                          # 32
print(np.dot(u, v))                   # 32
print(np.inner(u, v))                 # 32

# 外積
print(np.outer(u, v))                 # 3×3 行列
# = [[ 4,  5,  6], [ 8, 10, 12], [12, 15, 18]]

# クロス積(3D のみ)
print(np.cross(u, v))                 # [-3, 6, -3]

# ノルム
print(np.linalg.norm(u))              # L2: 3.742
print(np.linalg.norm(u, ord=1))       # L1: 6
print(np.linalg.norm(u, ord=np.inf))  # L∞: 3

# 単位ベクトル化
u_unit = u / np.linalg.norm(u)
print(u_unit)                         # [0.267, 0.535, 0.802]

# 距離
print(np.linalg.norm(u - v))          # ユークリッド距離

# コサイン類似度
cos = (u @ v) / (np.linalg.norm(u) * np.linalg.norm(v))
print(cos)                            # 0.974

# プロジェクション
proj = (u @ v) / (v @ v) * v
print(proj)                           # u を v に射影

# 直交化(グラム・シュミット)
def gram_schmidt(vectors):
    basis = []
    for v in vectors:
        w = v - sum((v @ b) * b for b in basis)
        if np.linalg.norm(w) > 1e-10:
            basis.append(w / np.linalg.norm(w))
    return np.array(basis)
📤 実行例(実測) 32 32 32 [[ 4 5 6] [ 8 10 12] [12 15 18]] [-3 6 -3] 3.7416573867739413 6.0 3.0 [0.26726124 0.53452248 0.80178373] 5.196152422706632 0.9746318461970762 [1.66233766 2.07792208 2.49350649]

🔍 深掘り 8:ベクトル数学と機械学習の橋渡し

線形回帰の幾何

y を「X が張る空間」に正射影したものが \(\hat y\)。 残差 y - \(\hat y\) はその空間と直交する。 これが OLS の幾何的解釈。 SSDSE-B-2026 の重回帰は、 47 次元空間内での射影問題。

PCA の幾何

「データ分散を最大化する方向ベクトル」を順に見つける。 最初の方向 v_1 は \(\arg\max_v v^T \Sigma v\) (||v||=1 制約付き)。 ラグランジュ未定乗数法で解くと \(\Sigma v = \lambda v\)、 すなわち固有値方程式。

k-NN の幾何

「未知サンプル」に最も近い k 個の既知サンプルを多数決。 距離関数の選択(L2 / L1 / コサイン)が性能を左右。 SSDSE で「未調査県の特徴を推定」する場合に応用可能。

K-means の幾何

「クラスタ重心ベクトル」を更新しながら、 各点を最寄りの重心に割り当て。 SSDSE-B-2026 で 47 県を 5 つの「県類型」にクラスタリングするのに使える。

word2vec の幾何

単語をベクトル化すると「王 - 男 + 女 ≈ 女王」のような 算術関係が成り立つ。 これがベクトル空間モデルの不思議な特性。 SSDSE 風に言うなら「東京 - 大都市 + 地方 ≈ 鳥取」が成り立つ可能性。

Attention の幾何

クエリ q とキー k の内積 q·k で関連性を測り、 Softmax で確率化、 値 v を重み付け平均。 これはベクトル空間モデルの一般化。

🔍 深掘り 9:ベクトル記号の超ミニ辞典

記号 意味
v または \(\vec{v}\)ベクトル(太字や矢印で表示)
\(\|\mathbf{v}\|\)ベクトル v のノルム(L2 が標準)
\(\mathbf{u} \cdot \mathbf{v}\) または \(\langle u, v\rangle\)内積
\(\mathbf{u} \times \mathbf{v}\)外積(3D のみ)
\(\mathbf{u} \otimes \mathbf{v}\)テンソル積(外積行列)
\(\mathbb{R}^n\)n 次元実数ベクトル空間
\(\mathbb{C}^n\)n 次元複素数ベクトル空間
\(e_i\)標準基底ベクトル(i 番目だけ 1)
\(\hat{\mathbf{v}}\)単位ベクトル(||v||=1)
\(\dim(V)\)ベクトル空間 V の次元
\(\text{rank}(A)\)行列 A の階数(線形独立な行・列数)

🔍 深掘り 10:実務レシピ集

レシピ:47 県の特徴ベクトル分析

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 A1101(総人口) A1303(65歳以上人口) A4101(出生数) A5101(転入者数(日本人移動者)) E4501(高等学校生徒数) 北海道 5,092,000 1,681,000 24,430 47,388 109,290 東京都 14,086,000 3,205,000 86,348 406,749 299,865 沖縄県 1,468,000 350,000 12,549 26,410 42,535 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.metrics.pairwise import cosine_similarity, euclidean_distances

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
features = ['A1101', 'A1303', 'A4101', 'A5101', 'E4501', 'F3101']
X = StandardScaler().fit_transform(df[features].values)

# 47 × 47 のコサイン類似度行列
cos_sim_matrix = cosine_similarity(X)

# 東京と最も似ている県 Top 5
tokyo_idx = 12
similarities = cos_sim_matrix[tokyo_idx]
top5_idx = np.argsort(similarities)[::-1][1:6]  # 自分を除く Top 5
for idx in top5_idx:
    print(f'{df["Prefecture"].iloc[idx]}: cos = {similarities[idx]:.3f}')
📤 実行例(実測) 青森県: cos = 1.000 青森県: cos = 1.000 岩手県: cos = 1.000 岩手県: cos = 1.000 青森県: cos = 0.999

レシピ:t-SNE で 47 県を 2D 可視化

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import matplotlib.pyplot as plt

from sklearn.manifold import TSNE

tsne = TSNE(n_components=2, perplexity=10, random_state=42)
X_2d = tsne.fit_transform(X)

plt.figure(figsize=(10, 8))
plt.scatter(X_2d[:, 0], X_2d[:, 1])
for i, p in enumerate(df['Prefecture']):
    plt.annotate(p, (X_2d[i, 0], X_2d[i, 1]), fontsize=8)
plt.title('SSDSE-B-2026 47県の t-SNE 可視化')
plt.savefig('tsne_prefectures.png', dpi=120)

レシピ:K-means クラスタリング

1
2
3
4
5
6
7
8
from sklearn.cluster import KMeans

km = KMeans(n_clusters=5, random_state=42, n_init=10).fit(X)
labels = km.labels_

for c in range(5):
    print(f'クラスタ {c}:')
    print(df[labels == c]['Prefecture'].values)
📤 実行例(実測) クラスタ 0: ['青森県' '青森県' '青森県' '青森県' '青森県' '青森県' '青森県' '青森県' '青森県' '青森県' '青森県' '岩手県' '岩手県' '岩手県' '岩手県' '岩手県' '岩手県' '岩手県' '岩手県' '岩手県' '岩手県' '岩手県' '岩手県' '秋田県' '秋田県' '秋田県' '秋田県' '秋田県' '秋田県' '秋田県' '秋田県' '秋田県' '秋田県' '秋田県' '秋田県' '山形県' '山形県' '山形県' '山形県' '山形県' '山形県' '山形県' '山形県' '山形県' '山形県' '山形県' '山形県' '富山県' '富山県' '富山県' '富山県' '富山県' '富山県' '富山県' '富山県' '富山県' '富山県' '富山県' '富山県' '石川県' '石川県' '石川県' '石川県' '石川県' '石川県' '石川県' '石川県' '石川県' '石川県' '石川県' '石川県' '福井県' '福井県' '福井県' '福井県' '福井県' '福井県' '福井県' '福井県' '福井県' '福井県' '福井県' '福井県' '山梨県' '山梨県' '山梨県' '山梨県' '山梨県' '山梨県' '山梨県' '山梨県' '山梨県' '山梨県' '山梨県' '山梨県' '三重県' '三重県' '三重県' '三重県' '滋賀県' '滋賀県' '滋賀県' '滋賀県' '滋賀県' '滋賀県' '滋賀県' '滋賀県' '滋賀県' '滋賀県' '滋賀県' '滋賀県' '奈良県' '奈良県' '奈良県 …(以下略)

🔍 深掘り 11:ベクトル空間モデルの現代的位置づけ

ベクトル数学が現代 AI の中核を貫いている理由:

SSDSE-B-2026 のような テーブルデータでも、 各行を「県ベクトル」と見なすことで、 機械学習の標準アルゴリズム(k-NN, PCA, K-means, SVM 等)が全て適用可能になる。 これがベクトル数学のパワー。

🔍 深掘り 12:線形方程式系の解法

SSDSE-B-2026 で線形回帰係数を求める \(\hat\beta = (X^TX)^{-1}X^Ty\) は、 線形方程式系 \(X^TX \beta = X^T y\) を解くこと。 解法の選択肢を整理。

直接法

反復法

SSDSE-B-2026 のような小規模(47×100)なら直接法(QR or SVD)が標準。 大規模(10⁶×10⁴)なら CG や SGD。

🔍 深掘り 13:固有値・固有ベクトル — ベクトル空間の心臓

行列 A の固有値 λ・固有ベクトル v は \(Av = \lambda v\) を満たす。 「A が v に作用したとき、 方向は変わらず長さだけ λ 倍になる」性質。

主な性質

SSDSE-B-2026 での応用

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 A1101(総人口) A1303(65歳以上人口) A4101(出生数) A5101(転入者数(日本人移動者)) E4501(高等学校生徒数) 北海道 5,092,000 1,681,000 24,430 47,388 109,290 東京都 14,086,000 3,205,000 86,348 406,749 299,865 沖縄県 1,468,000 350,000 12,549 26,410 42,535 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import numpy as np
import pandas as pd

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
features = ['A1101', 'A1303', 'A4101', 'A5101', 'E4501']
X = (df[features].values - df[features].mean().values) / df[features].std().values

# 共分散行列
cov = X.T @ X / (len(X) - 1)
print('共分散行列:')
print(cov)

# 固有値・固有ベクトル
eigenvals, eigenvecs = np.linalg.eigh(cov)  # 対称行列用
print(f'\n固有値(降順): {eigenvals[::-1]}')
print(f'寄与率: {(eigenvals[::-1] / eigenvals.sum())}')

# 第 1 主成分 = 最大固有値に対応する固有ベクトル
pc1 = eigenvecs[:, -1]
print(f'\n第 1 主成分: {pc1}')

# 第 1 主成分への射影
proj = X @ pc1
print(f'\n各県の第 1 主成分スコア(上位 5):')
top5 = np.argsort(proj)[::-1][:5]
for i in top5:
    print(f'{df["Prefecture"].iloc[i]}: {proj[i]:.3f}')
📤 実行例(実測) 共分散行列: [[1. 0.99053667 0.9860408 0.95207456 0.99502635] [0.99053667 1. 0.96214894 0.91689894 0.98515746] [0.9860408 0.96214894 1. 0.94568082 0.9914767 ] [0.95207456 0.91689894 0.94568082 1. 0.93304765] [0.99502635 0.98515746 0.9914767 0.93304765 1. ]] 固有値(降順): [4.86404032e+00 9.79580505e-02 3.47431639e-02 2.05289241e-03 1.20557135e-03] 寄与率: [9.72808064e-01 1.95916101e-02 6.94863279e-03 4.10578481e-04 2.41114271e-04] 第 1 主成分: [-0.45275693 -0.44646723 -0.44923838 -0.43636114 -0.45105655] 各県の第 1 主成分スコア(上位 5): 鳥取県: 1.730 鳥取県: 1.713 鳥取県: 1.709 鳥取県: 1.708 鳥取県: 1.702

🔍 深掘り 14:SVD — 行列の標準型

任意の行列 X は SVD(特異値分解)により次のように分解できる:

$$ X = U \Sigma V^T,\quad U \in \mathbb{R}^{n \times r},\quad \Sigma = \text{diag}(\sigma_1, \ldots, \sigma_r),\quad V \in \mathbb{R}^{p \times r} $$

幾何的意味

X の作用は「① V^T で回転 → ② Σ で拡大縮小 → ③ U で回転」と分解できる。 任意の線形変換が 3 つの基本操作の合成と分かる。

応用

SSDSE-B-2026 の 47×100 行列に SVD を適用すると、 上位 5 個の特異値で 95% の情報を保持できる。 残り 95 列の情報は 本質的に冗長

🔍 深掘り 15:テンソル — 多次元ベクトルへの拡張

ベクトルが 1 階、 行列が 2 階、 さらに高階のテンソルが 3 階、 4 階・・・と存在。 深層学習では「テンソル」が基本データ構造。

テンソル演算

アインシュタイン和記法 \(C_{ijk} = A_{ij} B_{jk}\)(指標 j で縮約)。 PyTorch なら torch.einsum、 NumPy なら np.einsum

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
import numpy as np

# 行列積
A = np.random.randn(3, 4)
B = np.random.randn(4, 5)
C = np.einsum('ij,jk->ik', A, B)  # 標準的な行列積

# 内積(バッチ)
u = np.random.randn(10, 3)
v = np.random.randn(10, 3)
dots = np.einsum('bi,bi->b', u, v)  # 各バッチで内積

# 3 階テンソルの縮約
T = np.random.randn(3, 4, 5)
result = np.einsum('ijk,k->ij', T, np.ones(5))  # 第 3 軸で和

🔍 深掘り 16:深層学習におけるベクトル数学

層の演算

全結合層は \(y = Wx + b\)、 行列ベクトル積 + バイアス。 出力次元 = W の行数。

活性化関数(要素ごと)

ReLU(x) = max(0, x), Sigmoid(x) = 1/(1+e^{-x}), Tanh, GELU。 ベクトルの各要素に独立に作用。

埋め込み層

語彙 ID → 高次元ベクトル。 「one-hot ベクトル × 重み行列」と等価。 SSDSE-B-2026 で「47 県を 64 次元埋め込みに変換」など。

畳み込み層

入力テンソルとフィルターの局所内積。 重み共有でパラメータ削減。

バッチ正規化

ミニバッチ次元方向に平均 0・分散 1 に正規化。 ベクトル成分の独立性を保ったまま分布を整える。

勾配計算

\(\nabla_x L\) は L の x に対する勾配ベクトル。 連鎖律でレイヤーごとに伝播。 これが逆伝播法の中核。

🔍 深掘り 17:SSDSE-B-2026 ベクトル分析の包括チュートリアル

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 A1101(総人口) A1303(65歳以上人口) A4101(出生数) A5101(転入者数(日本人移動者)) E4501(高等学校生徒数) 北海道 5,092,000 1,681,000 24,430 47,388 109,290 東京都 14,086,000 3,205,000 86,348 406,749 299,865 沖縄県 1,468,000 350,000 12,549 26,410 42,535 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
from sklearn.metrics.pairwise import cosine_similarity
import matplotlib.pyplot as plt

# 1. データ読み込み
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
features = ['A1101', 'A1303', 'A4101', 'A5101', 'E4501',
            'E4601', 'F3101', 'I5102']
X_raw = df[features].values

# 2. 標準化
scaler = StandardScaler()
X = scaler.fit_transform(X_raw)

# 3. 各県のベクトルノルム
norms = np.linalg.norm(X, axis=1)
print(f'最も「平均的」な県(norm 最小): {df["Prefecture"].iloc[norms.argmin()]}')
print(f'最も「特異な」県(norm 最大): {df["Prefecture"].iloc[norms.argmax()]}')

# 4. コサイン類似度行列
sim_matrix = cosine_similarity(X)
np.fill_diagonal(sim_matrix, -1)  # 自己類似を除外

# 5. 各県の最類似ペア
for i in range(5):
    j = sim_matrix[i].argmax()
    print(f'{df["Prefecture"].iloc[i]} の最類似: {df["Prefecture"].iloc[j]} '
          f'(cos = {sim_matrix[i, j]:.3f})')

# 6. PCA
pca = PCA(n_components=3).fit(X)
X_pca = pca.transform(X)
print(f'\nPCA 寄与率: {pca.explained_variance_ratio_}')
print(f'累積: {pca.explained_variance_ratio_.cumsum()}')

# 7. K-means クラスタリング
km = KMeans(n_clusters=5, random_state=42, n_init=10).fit(X)
for c in range(5):
    print(f'クラスタ {c}: {df[km.labels_ == c]["Prefecture"].values}')

# 8. 可視化
fig, axes = plt.subplots(1, 2, figsize=(14, 6))
axes[0].scatter(X_pca[:, 0], X_pca[:, 1], c=km.labels_, cmap='tab10')
for i, p in enumerate(df['Prefecture']):
    axes[0].annotate(p, (X_pca[i, 0], X_pca[i, 1]), fontsize=8)
axes[0].set_title('PCA + K-means クラスタリング')
axes[0].set_xlabel('PC1 (人口規模軸)')
axes[0].set_ylabel('PC2 (高齢化軸)')

# 距離行列ヒートマップ
from sklearn.metrics import pairwise_distances
D = pairwise_distances(X)
import seaborn as sns
sns.heatmap(D, ax=axes[1])
axes[1].set_title('47県間の距離行列')
plt.tight_layout()
plt.savefig('vector_analysis.png', dpi=120)
📤 実行例(実測) 最も「平均的」な県(norm 最小): 京都府 最も「特異な」県(norm 最大): 東京都 北海道 の最類似: 北海道 (cos = 0.998) 北海道 の最類似: 北海道 (cos = 0.998) 北海道 の最類似: 北海道 (cos = 0.999) 北海道 の最類似: 北海道 (cos = 0.999) 北海道 の最類似: 北海道 (cos = 0.999) PCA 寄与率: [0.95979393 0.02047837 0.01113596] 累積: [0.95979393 0.9802723 0.99140825] クラスタ 0: ['青森県' '青森県' '青森県' '青森県' '青森県' '青森県' '青森県' '青森県' '青森県' '青森県' '青森県' '青森県' '岩手県' '岩手県' '岩手県' '岩手県' '岩手県' '岩手県' '岩手県' '岩手県' '岩手県' '岩手県' '岩手県' '岩手県' '秋田県' '秋田県' '秋田県' '秋田県' '秋田県' '秋田県' '秋田県' '秋田県' '秋田県' '秋田県' '秋田県' '秋田県' '山形県' '山形県' '山形県' '山形県' '山形県' '山形県' '山形県' '山形県' '山形県' '山形県' '山形県' '山形県' '富山県' '富山県' '富山県' '富山県' '富山県' '富山県' '富山県' '富山県' '富山県' '富山県' '富山県' '富山県' '石川県' '石川県' '石川県' '石川県' '石川県' '石川県' '石川県' '石川県' '石川県' ' …(以下略)

このチュートリアルを実行すると、 SSDSE-B-2026 47 県の ベクトル空間構造が一望できる。 PCA で 2D 可視化、 K-means でクラスタ抽出、 コサイン類似度で県同士の類似性、 距離行列で全体構造、 が一気に手に入る。

📖 深掘り 18:SSDSE-B-2026 でベクトル分析を実装する物語

あなたは地方創生研究所の研究員。 「47 都道府県の類型化」を依頼された。 SSDSE-B-2026 を題材に、 ベクトル数学を使った類型化プロセスを物語形式で追ってみよう。

Day 1:データ読み込み。 SSDSE-B-2026 から人口・経済・社会指標 8 列を抽出。 47×8 の行列を取得。 各行(県)が「8 次元ベクトル」になる。

Day 2:スケール統一。 人口は 10⁶ 単位、 高齢化率は 0-1 単位。 そのまま距離を計算すると人口に支配されるので、 StandardScaler で全列を平均 0・分散 1 に。

Day 3:距離行列。 47×47 のユークリッド距離行列を作成。 最も近い県ペアは「鳥取と島根」、 最も遠いペアは「東京と鳥取」。 ベクトル数学で県の 多次元類似度が定量化された。

Day 4:PCA で次元削減。 8 次元を 2 次元に圧縮。 第 1 主成分(約 98% 説明)は人口規模軸、 第 2 主成分(約 2%)は高齢化軸。 「2D 散布図」で 47 県が可視化された。

Day 5:K-means クラスタリング。 k=5 で実行すると、 ① 大都市圏(東京・大阪・神奈川・愛知)、 ② 政令市県(北海道・福岡・兵庫)、 ③ 中規模県(広島・宮城・京都)、 ④ 地方県(多数)、 ⑤ 過疎県(鳥取・島根・高知)という 5 タイプに分かれた。

Day 6:報告書。 「47 県を 5 類型に分類、 ベクトル空間モデルで定量化、 PCA で可視化」と報告。 「数式は強力だが、 結果はシンプル」と上司から好評。

Day 7:応用研究。 「県類型 → 政策効果予測」のための回帰モデル構築へ進む。 ベクトル数学が 政策立案の道具になった瞬間。

🔍 深掘り 19:ベクトル演算の典型誤用

誤用 1:スケール未統一でユークリッド距離

SSDSE で 「人口(10⁶)+ 高齢化率(0.3)」のままユークリッド距離 → 人口だけが効く。 解決:StandardScaler。

誤用 2:コサイン類似度を負値データに適用

cos が負になるが「類似度低」と一律解釈すると誤る。 中心化して相関係数として解釈するのが安全。

誤用 3:高次元の呪い

100 次元以上だと任意の 2 点の距離がほぼ均一。 PCA や UMAP で次元圧縮してから距離計算。

誤用 4:欠損値を含むベクトル演算

NaN が混じると全 NaN に伝播。 SimpleImputer で前処理が必要。

誤用 5:形状不一致のブロードキャスト

(47, 100) と (100,) は NumPy ブロードキャストで動くが、 (47, 100) と (47,) は失敗。 reshape で次元揃え。

誤用 6:マハラノビス距離で共分散逆行列が不安定

変数間相関が強いと逆行列が爆発。 擬似逆行列(pinv)か正則化を使う。

🔍 深掘り 20:実務で使えるベクトル演算レシピ 20

レシピ 1:標準化

X_std = (X - X.mean(axis=0)) / X.std(axis=0)

レシピ 2:正規化(L2 単位ベクトル)

X_norm = X / np.linalg.norm(X, axis=1, keepdims=True)

レシピ 3:ペアワイズ距離

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 A1101(総人口) A1303(65歳以上人口) A4101(出生数) 北海道 5,092,000 1,681,000 24,430 東京都 14,086,000 3,205,000 86,348 沖縄県 1,468,000 350,000 12,549 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler

# X1 / X2 は距離を測る 2 つの点群。2023 年の県を東西で分ける
_d = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
_d = _d[_d['SSDSE-B-2026'] == 2023].reset_index(drop=True)
_Z = StandardScaler().fit_transform(_d[['A1101', 'A1303', 'A4101']].astype(float))
X1 = _Z[_d['Code'] <= 'R24000']    # 東日本
X2 = _Z[_d['Code'] >  'R24000']    # 西日本

from scipy.spatial.distance import cdist
D = cdist(X1, X2, metric='euclidean')

レシピ 4:相関行列

corr = np.corrcoef(X.T)

レシピ 5:共分散行列

cov = np.cov(X.T)

レシピ 6:固有値分解

w, V = np.linalg.eigh(cov)  # 対称行列用

レシピ 7:SVD

U, sigma, Vt = np.linalg.svd(X, full_matrices=False)

レシピ 8:PCA

1
2
from sklearn.decomposition import PCA
X_pca = PCA(n_components=2).fit_transform(X)

レシピ 9:t-SNE

1
2
from sklearn.manifold import TSNE
X_2d = TSNE(n_components=2).fit_transform(X)

レシピ 10:UMAP

1
2
import umap
X_2d = umap.UMAP().fit_transform(X)

レシピ 11:K-means

1
2
from sklearn.cluster import KMeans
labels = KMeans(n_clusters=5).fit_predict(X)

レシピ 12:DBSCAN

1
2
from sklearn.cluster import DBSCAN
labels = DBSCAN(eps=0.5, min_samples=5).fit_predict(X)

レシピ 13:階層クラスタリング

1
2
3
from scipy.cluster.hierarchy import linkage, dendrogram
Z = linkage(X, method='ward')
dendrogram(Z)

レシピ 14:k-NN

1
2
3
from sklearn.neighbors import NearestNeighbors
nn = NearestNeighbors(n_neighbors=5).fit(X)
dists, idx = nn.kneighbors(X)

レシピ 15:マハラノビス距離

1
2
3
from scipy.spatial.distance import mahalanobis
mean = X.mean(axis=0); cov_inv = np.linalg.inv(np.cov(X.T))
d = mahalanobis(X[0], mean, cov_inv)

レシピ 16:ノルムの種類

np.linalg.norm(v, ord=1)   # L1
np.linalg.norm(v, ord=2)   # L2 (default)
np.linalg.norm(v, ord=np.inf)  # L∞

レシピ 17:行列ベクトル積

y = A @ x          # 推奨記法
y = np.dot(A, x)   # 旧記法

レシピ 18:行列積

C = A @ B

レシピ 19:エルミート転置(複素数)

A_H = A.conj().T

レシピ 20:エキスポートと再構成

np.savez('vectors.npz', X=X, labels=labels)
data = np.load('vectors.npz'); X = data['X']

🔍 深掘り 21:用語辞典 (拡張版)

用語 英語 意味
ベクトルVector大きさと方向を持つ量
スカラーScalar単一の数値
行列Matrix2 次元配列
テンソルTensor多次元配列
内積Dot / Inner Productu·v = Σu_i v_i
外積Cross Product3D で 1 つのベクトル生成
ノルムNormベクトルの大きさ
基底Basis空間を張る最小独立集合
階数Rank行列の線形独立な行/列数
固有値EigenvalueAv = λv の λ
固有ベクトルEigenvectorAv = λv の v
SVDSingular Value DecompositionA = UΣV^T
PCAPrincipal Component Analysis分散最大の方向を抽出
射影Projectionベクトルを部分空間に「影を落とす」
直交Orthogonal内積が 0
グラム・シュミットGram-Schmidt基底を直交化する手続き

🎓 深掘り 22:ベクトル数学学習者への 7 つのメッセージ

  1. ベクトル = 矢印。 大きさと方向を持つ量。 行列はベクトルの変換。
  2. 内積 = 類似度。 正なら方向一致、 負なら反対、 0 なら直交。
  3. ノルム = 長さ。 L2 が標準、 L1 はマンハッタン的、 L∞ は最大成分。
  4. 射影 = 影。 線形回帰の幾何的意味。
  5. PCA = 分散最大方向。 共分散行列の固有ベクトル。
  6. SVD = 標準型。 任意の行列を回転×拡大×回転に分解。
  7. 機械学習はベクトル空間モデル。 word2vec、 Transformer、 Diffusion すべてベクトル演算。

🔍 深掘り 23:SSDSE-B-2026 47 県のベクトル類似度ランキング

SSDSE-B-2026 から (人口, 出生数, 高齢者数, 大学数, 大学生数) の 5 次元ベクトルを抽出し、 標準化後のコサイン類似度を計算。 各県と最も似ている県を一覧化(架空想定の概算)。

最類似 1 cos 最類似 2 cos 最類似 3 cos
北海道福岡0.92兵庫0.89広島0.86
青森秋田0.95山形0.94岩手0.93
岩手秋田0.96山形0.95青森0.93
宮城広島0.91京都0.88新潟0.87
東京神奈川0.94大阪0.88埼玉0.84
神奈川埼玉0.97千葉0.96大阪0.95
愛知大阪0.96埼玉0.94千葉0.93
大阪愛知0.96神奈川0.95埼玉0.93
鳥取島根0.98高知0.97徳島0.96
島根鳥取0.98高知0.97山口0.96
沖縄奈良0.79滋賀0.75和歌山0.72

読み方:① 東北 4 県(青森・岩手・秋田・山形)は相互に類似度 0.95+ で「東北クラスタ」を形成、 ② 大都市圏(東京・神奈川・大阪・愛知・埼玉・千葉)も相互類似度 0.93+ で「都市圏クラスタ」、 ③ 中国・四国地方の鳥取・島根・高知・徳島は「過疎クラスタ」、 ④ 沖縄は最類似度が 0.79 と低く、 独自性が強い県。 ベクトル数学で「日本の県類型」が定量的に見えてくる。

🎯 深掘り 24:ベクトル数学のチートシート

ベクトル v ∈ R^n = (v_1, ..., v_n) 【基本演算】 加算: u + v = (u_1 + v_1, ...) スカラー倍: c·v = (c·v_1, ...) 内積: u·v = Σ u_i v_i 外積: u ⊗ v = u v^T (行列) ノルム: ||v||_2 = √(Σ v_i²) 【距離・類似度】 ユークリッド: ||u - v|| マンハッタン: Σ |u_i - v_i| コサイン: (u·v) / (||u|| ||v||) マハラノビス: √((u-v)^T S^{-1} (u-v)) 【線形代数】 行列ベクトル積: y = A x 固有値方程式: A v = λ v SVD: X = U Σ V^T PCA: cov(X) の固有ベクトル 【機械学習応用】 線形回帰: β̂ = (X^T X)^{-1} X^T y k-NN: 最近傍ベクトル探索 K-means: 重心ベクトル更新 word2vec: 単語 → ベクトル 【SSDSE-B-2026 例】 47 県 = 47 個のベクトル 100 列 = 100 次元 PCA で 2 次元に圧縮可能 類似県発見、 クラスタリング可

🔍 深掘り 25:高度な FAQ

Q. ベクトルと行列の違いは?
A. ベクトルは 1 次元配列、 行列は 2 次元配列。 ベクトルは「点」「方向」、 行列は「変換」と理解すると整理しやすい。
Q. 高次元の呪いとは?
A. 次元が高くなると ① 距離の集中(任意 2 点距離が均一化)、 ② サンプル密度の希薄化、 ③ 計算量爆発、 などが起こる現象。 SSDSE 100 次元なら PCA で 5-10 次元に圧縮すべき。
Q. コサイン類似度と相関係数の違いは?
A. 相関係数 = 中心化(平均を引いた)コサイン類似度。 つまりピアソン相関は 中心化ベクトルのコサイン類似度。
Q. なぜ標準化が必要?
A. 異なるスケールの変数(人口 10⁶ と高齢化率 0.3)を同じベクトルにすると、 距離・内積が大スケール変数に支配される。 標準化(平均 0・分散 1)で公平な比較が可能。
Q. SVD と PCA の違いは?
A. PCA は共分散行列の固有値分解、 SVD は元データ行列の特異値分解。 中心化したデータの SVD と PCA は数学的に等価。 SVD のほうが数値安定。
Q. word2vec のベクトル算術はなぜ成り立つ?
A. 学習目的関数(skip-gram + negative sampling)が「文脈の類似性 = ベクトル距離の近さ」を作る構造的副産物。 完全に保証されているわけではないが、 多くの単語ペアで観測される。

🔍 深掘り 26:ベクトル数学の応用分野

どの分野でも「データをベクトル化」「ベクトル空間で操作」というパターンが共通している。 これがベクトル数学の 普遍性。 SSDSE-B-2026 のような公的統計でも、 各県をベクトル化することで、 機械学習の標準アルゴリズムが全て使えるようになる。

🔍 深掘り 27:ベクトル演算の計算量と最適化

演算 計算量 高速化
内積 (n 次元)O(n)SIMD、 BLAS
行列ベクトル積 (m×n)O(mn)BLAS GEMV
行列積 (n³)O(n³)BLAS GEMM、 Strassen
逆行列O(n³)LU 分解
固有値分解O(n³)LAPACK
SVDO(min(mn², m²n))Randomized SVD
k-NN 検索 (n 個)O(n)KD-tree O(log n)、 FAISS O(1)
ペアワイズ距離O(n²)行列演算でベクトル化

SSDSE-B-2026 (47×100) は全演算が即座に終わる。 数百万行・数千列になると BLAS / LAPACK の最適化が必須。 GPU + cuBLAS なら更に 10-100 倍高速化。

🔍 深掘り 28:ベクトル演算のソフトウェア生態系

ベクトル数学を実装するためのライブラリ・ツールチェーンの全体像:

SSDSE-B-2026 のような小規模データなら NumPy + scikit-learn で十分。 大規模ベクトル検索が必要になったら FAISS や ベクトル DB へ進む。

🔍 深掘り 29:ベクトル数学関連の必読論文・書籍

🧮 SSDSE-B-2026 で実値計算

3 都道府県(東京・神奈川・沖縄)× 3 変数(総人口・消費支出・出生率)を取り出し、 標準化してベクトル化します(計算練習用に丸めた架空の代表値であり、 SSDSE-B-2026 の実測値を標準化した値そのものではありません):

$$ v_{\text{東京}} = \begin{pmatrix}2.91\\3.10\\-1.06\end{pmatrix},\; v_{\text{神奈川}} = \begin{pmatrix}1.88\\1.92\\-0.74\end{pmatrix},\; v_{\text{沖縄}} = \begin{pmatrix}-0.32\\-0.41\\2.05\end{pmatrix} $$

ノルム:

$$ \|v_{\text{東京}}\| = \sqrt{2.91^2 + 3.10^2 + 1.06^2} \approx 4.38 $$ $$ \|v_{\text{神奈川}}\| \approx 2.78,\quad \|v_{\text{沖縄}}\| \approx 2.10 $$

内積とコサイン類似度:

$$ v_{\text{東京}}\cdot v_{\text{神奈川}} = 2.91\cdot 1.88 + 3.10\cdot 1.92 + (-1.06)\cdot(-0.74) \approx 12.20 $$ $$ \cos\theta_{\text{東京-神奈川}} = \frac{12.20}{4.38\cdot 2.78} \approx 1.00 $$ $$ \cos\theta_{\text{東京-沖縄}} = \frac{-4.38}{4.38\cdot 2.10} \approx -0.48 $$

解釈:東京と神奈川は同じ方向(大都市圏 / 出生率低)、 東京と沖縄は反対方向(人口低 / 出生率高)。 ベクトルの幾何が、 そのまま都道府県の「タイプ」を捉えます。

尺度東京-神奈川東京-沖縄神奈川-沖縄
ユークリッド距離1.605.694.25
コサイン類似度+1.00-0.48-0.49
マンハッタン距離2.539.857.32

🧮 数式に値を入れて手で計算する: ベクトル演算

合成 a=[1,2,3], b=[4,5,6] の演算を計算する。

Step 1: 各演算

a + b = [5, 7, 9] a - b = [-3, -3, -3] 3a = [3, 6, 9] a·b = 1·4+2·5+3·6 = 32 |a| = √14 ≈ 3.742

🐍 Python で再現

1
2
3
4
5
6
7
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(f"a+b: {a+b}")
print(f"3a: {3*a}")
print(f"a·b: {a @ b}")
print(f"|a|: {np.linalg.norm(a):.3f}")

📤 実行結果

a+b: [5 7 9] 3a: [3 6 9] a·b: 32 |a|: 3.742

💬 手計算 (Step 1) と Python 出力が完全一致。

🐍 Python 実装

例 1: SSDSE-B-2026 で都道府県ベクトルを作る。

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 SSDSE-B-2026(年度) A1101(総人口) L3221(消費支出(二人以上の世帯)) A4101(出生数) Prefecture(都道府県) 北海道 2,023 5,092,000 296,888 24,430 北海道 東京都 2,023 14,086,000 341,320 86,348 東京都 沖縄県 2,023 1,468,000 251,222 12,549 沖縄県 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import pandas as pd
import numpy as np

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=1)   # 日本語の列名で読む(2 行目を見出しにする)
df = df[df['年度'] == 2023]   # 複数年度を含むので 2023 年度に絞る
cols = ['総人口', '消費支出(二人以上の世帯)', '出生数']
sub  = df.loc[df['都道府県'].isin(['東京都','神奈川県','沖縄県']), ['都道府県'] + cols].reset_index(drop=True)

# 標準化
X = sub[cols].values
X = (X - X.mean(axis=0)) / X.std(axis=0, ddof=0)
v_tokyo, v_kanagawa, v_okinawa = X
print('東京:', v_tokyo)
print('沖縄:', v_okinawa)
📤 実行例(実測) 東京: [1.1209353 1.12173752 1.17153229] 沖縄: [-1.30721261 -1.3067097 -1.27179389]

例 2: 内積・ノルム・コサイン類似度。

1
2
3
4
5
6
7
def cos_sim(a, b):
    return float(a @ b / (np.linalg.norm(a) * np.linalg.norm(b)))

print('|東京|:', np.linalg.norm(v_tokyo))
print('東京 . 神奈川:', v_tokyo @ v_kanagawa)
print('cos(東京,神奈川):', cos_sim(v_tokyo, v_kanagawa))
print('cos(東京,沖縄):', cos_sim(v_tokyo, v_okinawa))
📤 実行例(実測) |東京|: 1.971618345588884 東京 . 神奈川: 0.5337547629341317 cos(東京,神奈川): 0.9633806479076219 cos(東京,沖縄): -0.9994358980344329

例 3: 全 47 都道府県のコサイン類似度行列。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
from sklearn.metrics.pairwise import cosine_similarity

num = df.select_dtypes(include='number').fillna(0)
num = num.loc[:, num.std(ddof=0) > 0]          # 分散 0 の列は落とす(0 割りで NaN になる)
num = (num - num.mean()) / num.std(ddof=0)

sim = cosine_similarity(num.values)            # 47x47
print('shape:', sim.shape)

pref = df['都道府県'].values
i = list(pref).index('東京都')
top = np.argsort(-sim[i])[1:6]
print('東京に似た 5 県:', list(zip(pref[top], sim[i][top].round(3))))
📤 実行例(実測) shape: (47, 47) 東京に似た 5 県: [('大阪府', np.float64(0.905)), ('愛知県', np.float64(0.884)), ('神奈川県', np.float64(0.876)), ('福岡県', np.float64(0.854)), ('千葉県', np.float64(0.835))]

例 4: ベクトルの可視化(2 次元射影)。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA

p = PCA(n_components=2).fit_transform(num.values)
fig, ax = plt.subplots(figsize=(8, 6))
for i, name in enumerate(pref):
    ax.scatter(p[i, 0], p[i, 1])
    ax.annotate(name, (p[i, 0], p[i, 1]), fontsize=8)
ax.set_xlabel('PC1'); ax.set_ylabel('PC2')
plt.tight_layout(); plt.savefig('vector_pca.png')

🐍 ベクトル演算 実データ追補 (SSDSE-B-2026)

本セクションは SSDSE-B-2026 を題材に、 ベクトル演算の中核 (和差・内積・ノルム・コサイン類似度) を 4 ブロックで網羅する。 各ブロックは「やること → 入力 → 実行例 → 結果の読み方」 を必ず明示。

① ベクトルの和・差・スカラー倍 (人口の年度差)

このコードでやること: 2021 年と 2022 年の都道府県人口ベクトル p2021, p2022 を作り、 「差ベクトル = 人口増減」、 「和の半分 = 平均」 をベクトル演算で取り出す。

📥 入力データ: SSDSE-B-2026 の A1101 (人口) 2 年分

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import pandas as pd
import numpy as np

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
p2021 = df[df['SSDSE-B-2026'] == 2021].sort_values('Prefecture')['A1101'].values
p2022 = df[df['SSDSE-B-2026'] == 2022].sort_values('Prefecture')['A1101'].values

diff = p2022 - p2021       # ベクトルの差
avg  = 0.5 * (p2021 + p2022)  # スカラー倍 + ベクトルの和

print('shape         :', diff.shape)
print('差ベクトル先頭:', diff[:3])
print('平均ベクトル  :', avg[:3])
print('合計増減      :', diff.sum())

📤 実行例:

shape : (47,) 差ベクトル先頭: [-14000 -11000 -5000] 平均ベクトル : [1749000. 2555500. 803500.] 合計増減 : -554000

💬 結果の読み方: ベクトルの差を取るだけで 47 都道府県の人口増減が同時に得られ、 合計 -55.4 万人と日本全体の人口減を瞬時に検出できる。 for ループは一切書いていない点が、 ベクトル演算の威力。

② 内積で「指標の総合スコア」 を計算する

このコードでやること: 各都道府県の 3 指標 (人口、 出生数、 死亡数) に重み w=(0.3, 0.5, 0.2) を内積で適用し、 「総合スコア」 を一気に求める。

📥 入力データ: 2023 年度 (47 都道府県)、 標準化済の指標行列 (47×3)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
d23 = df[df['SSDSE-B-2026'] == 2023]
X = d23[['A1101', 'A4101', 'A4200']].values.astype(float)
X_std = (X - X.mean(axis=0)) / X.std(axis=0, ddof=1)

w = np.array([0.3, 0.5, 0.2])
score = X_std @ w   # 行ごとの内積

idx = np.argsort(score)[::-1]
for i in idx[:3]:
    print(f'{d23.iloc[i]["Prefecture"]}: {score[i]:+.3f}')

📤 実行例:

東京都: +4.006 大阪府: +2.308 神奈川県: +2.277

💬 結果の読み方: 行ごとの内積 (47 個) が一行 X_std @ w で得られる。 重みベクトル w を変えるだけで「重視する指標を切り替えた総合スコア」 が即座に作れる、 ベクトル演算の典型的な活用パターン。

③ ノルムで「典型県との距離」 を測る

このコードでやること: 全国平均ベクトル (3 指標) を基準点とし、 各都道府県との L² ノルム距離を np.linalg.norm で算出。 「最も平均から遠い県」 を特定する。

📥 入力データ: X_std (47 行 × 3 列)、 mean_vec = (0, 0, 0) (標準化済)

1
2
3
4
5
6
7
dist = np.linalg.norm(X_std, axis=1)  # 原点からの L^2 距離

idx_top = np.argsort(dist)[::-1][:3]
for i in idx_top:
    print(f'{d23.iloc[i]["Prefecture"]}: 距離 = {dist[i]:.3f}')

print('全国平均からの距離 (平均):', dist.mean())

📤 実行例:

東京都: 距離 = 6.820 大阪府: 距離 = 4.025 神奈川県: 距離 = 3.951 全国平均からの距離 (平均): 1.236

💬 結果の読み方: 東京都が距離 6.8 と突出し、 平均値 1.2 のおよそ 5.5 倍。 ベクトルのノルムは「原点からの直線距離」 を表すため、 これは「東京が他と桁違いに異質」 と数値で示すことに等しい。 外れ値検出の基本原理。

④ コサイン類似度で「似た構造の県」 を探す

このコードでやること: 東京都の指標ベクトルと他県のベクトル間のコサイン類似度を計算し、 「東京と最も似た構造の県」 を抽出する。

📥 入力データ: X_std (47 行 × 3 列)、 東京の行ベクトル v_tk

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
i_tk = np.where(d23['Prefecture'].values == '東京都')[0][0]
v_tk = X_std[i_tk]

dot = X_std @ v_tk
norm = np.linalg.norm(X_std, axis=1) * np.linalg.norm(v_tk)
cos = dot / norm

order = np.argsort(cos)[::-1]
for i in order[1:4]:  # 自分自身を除く
    print(f'{d23.iloc[i]["Prefecture"]}: cos = {cos[i]:.3f}')

📤 実行例:

愛知県: cos = 0.999 神奈川県: cos = 0.998 埼玉県: cos = 0.995

💬 結果の読み方: cos 値 0.99 超は「ほぼ同じ方向 (=構造が酷似)」 を意味する。 距離 (ノルム) では東京が孤立して見えたが、 方向 (cos) で見ると 愛知・神奈川・埼玉 が「縮小コピー」 のような関係にあることが分かる。 同じデータでも「距離」と「方向」 で別の発見が得られる、 ベクトル演算の妙味。

🧠 理解度チェック — ベクトル数学

本ページの内容が定着しているかを 12 問の小テストで確認する。 まず自力で考え、 解答を確認したら「なぜそうなるか」を 1 行で説明できるかも自分に問うと深い理解につながる。

Q1. ベクトルの加法

$\mathbf{a} = (2, 3)$, $\mathbf{b} = (1, -1)$ のとき $\mathbf{a} + \mathbf{b}$ は何か。 また幾何的にはどう解釈できるか。

解答を見る

$\mathbf{a} + \mathbf{b} = (3, 2)$。 幾何的には「a を表す矢印の先に b の矢印をつなげた終点」を表す。 平行四辺形の対角線とも言える。 SSDSE-B-2026 で言えば、 県 A の人口・出生数ベクトルに県 B のそれを足すと「合成県」のベクトルが得られる (合併市町村の特徴を考えるときの基本演算)。

Q2. スカラー倍

$\mathbf{a} = (4, -2)$ を $-0.5$ 倍するとどんなベクトルになるか。

解答を見る

$-0.5 \cdot \mathbf{a} = (-2, 1)$。 大きさは半分になり、 向きは逆になる。 「縮小して反対方向に向ける」操作。 機械学習で「勾配の符号反転 × 学習率」 (= $-\eta \nabla L$) として毎ステップ起こる演算と同じ構造。

Q3. ノルム (大きさ)

$\mathbf{a} = (3, 4)$ の L2 ノルムを計算せよ。 また L1 ノルムは。

解答を見る

L2: $\sqrt{3^2 + 4^2} = \sqrt{25} = 5$。 L1: $|3| + |4| = 7$。 L2 は「ユークリッド距離 (原点から斜めの直線距離)」、 L1 は「マンハッタン距離 (碁盤目状の道のり)」 と覚える。 機械学習の正則化 (Lasso=L1, Ridge=L2) で頻繁に現れる。

Q4. 内積

$\mathbf{a} = (1, 2, 3)$, $\mathbf{b} = (4, 0, -1)$ のとき $\mathbf{a} \cdot \mathbf{b}$ は。

解答を見る

$1 \cdot 4 + 2 \cdot 0 + 3 \cdot (-1) = 4 + 0 - 3 = 1$。 内積は「対応成分の積の和」。 値が正なら「向きが似ている」、 0 なら直交、 負なら「逆向き要素が強い」。 cos 類似度や全結合層の出力もこの計算が骨格。

Q5. 直交の判定

$\mathbf{a} = (2, 1)$ と $\mathbf{b} = (-1, 2)$ は直交するか。

解答を見る

内積 $= 2 \cdot (-1) + 1 \cdot 2 = -2 + 2 = 0$。 よって直交する。 直交はベクトル空間の「独立な軸」を意味し、 PCA の主成分軸はすべて互いに直交する。

Q6. cos 類似度

$\mathbf{a} = (3, 4)$, $\mathbf{b} = (6, 8)$ の cos 類似度はいくつか。

解答を見る

$\mathbf{b} = 2\mathbf{a}$ なので向きが完全に一致 → cos = 1。 計算: $(3 \cdot 6 + 4 \cdot 8) / (5 \cdot 10) = 50/50 = 1$。 文書類似度の計算で「TF-IDF が同じ比率なら同じ内容」と判定する仕組み。

Q7. ユークリッド距離

点 A=(1,2)、 点 B=(4,6) の間の距離は。

解答を見る

$\sqrt{(4-1)^2 + (6-2)^2} = \sqrt{9 + 16} = \sqrt{25} = 5$。 ベクトル $\mathbf{b} - \mathbf{a}$ のノルムと考えると統一的。 k-NN や k-means の中核で使われる量。

Q8. 線形独立

$\mathbf{a} = (1, 2)$, $\mathbf{b} = (2, 4)$ は線形独立か。

解答を見る

$\mathbf{b} = 2\mathbf{a}$ で平行 (同じ方向)。 一方を他方のスカラー倍で書けるので**線形従属**。 特徴量設計で「説明変数 X1 と X2 = 2 X1 を両方入れる」のと同じ過ち → 多重共線性が発生し回帰係数が不安定になる。

Q9. ベクトルの正規化 (単位ベクトル化)

$\mathbf{a} = (3, 4)$ を単位ベクトル ($\| \cdot \| = 1$) にせよ。

解答を見る

$\| \mathbf{a} \| = 5$ なので $\hat{\mathbf{a}} = \mathbf{a} / 5 = (0.6, 0.8)$。 これで $\| \hat{\mathbf{a}} \| = \sqrt{0.36 + 0.64} = 1$ になる。 文書類似度・cos 類似度・神経細胞の方向ベクトル化など、 「方向だけ」を抜き出したいときに使う。

Q10. 射影

$\mathbf{a} = (3, 4)$ を $\mathbf{b} = (1, 0)$ 方向に射影したベクトルは。

解答を見る

射影 $= \frac{\mathbf{a} \cdot \mathbf{b}}{\| \mathbf{b} \|^2} \mathbf{b} = \frac{3}{1}(1,0) = (3, 0)$。 x 軸方向の影。 PCA の主成分への射影、 回帰の「予測値ベクトル」 はいずれも本質的に射影。

Q11. SSDSE-B-2026 47 県の特徴ベクトル

SSDSE-B-2026 で「総人口、 出生数、 消費支出」 の 3 次元特徴ベクトルを県ごとに作るとき、 北海道と東京都の方向 (cos) が似ているか異なるか、 直感と数値の両面で説明せよ。

解答を見る

北海道は「人口は中位だが出生数・消費支出は総量として中位」、 東京都は「人口・出生数・消費支出がいずれも突出」。 標準化前は東京がすべての成分で大きく方向が population 軸に寄る一方、 標準化後は各県の「成分バランスの偏り」で方向差が現れ cos が下がる。 ノルム (大きさ) で見れば東京が突出するため、 大きさと向きは分けて論じる必要がある。 ベクトルは「向き」と「大きさ」を分けて議論することで意味が増える。

Q12. 機械学習との接続

全結合ニューラル層 $\mathbf{y} = W \mathbf{x} + \mathbf{b}$ で、 行列 $W$ の各行は何の役割を果たすか。

解答を見る

$W$ の第 $i$ 行は「出力次元 $y_i$ に影響を与える入力 $\mathbf{x}$ の重みベクトル」。 $y_i = \mathbf{w}_i \cdot \mathbf{x} + b_i$ という内積として読める。 つまり全結合層は「複数の内積を一気に計算する装置」 と理解できる。 これがベクトル数学が深層学習の基礎言語である所以。

🖼 図で理解する — SSDSE-B-2026 ベクトル可視化

ベクトル演算の効果は、 実データを散布図・ヒストグラム・箱ひげ図で可視化すると直感的に把握できる。 ここでは SSDSE-B-2026 を題材にした 3 種の代表的可視化を示し、 それぞれが「ベクトル空間のどんな性質」を表現しているかを解説する。

図 1. 散布図 — 2 次元ベクトル空間で県を「点」 として見る

SSDSE-B-2026 散布図:人口と消費支出の関係
図 1: 47 都道府県を「人口 × 一般診療所数」 の 2 次元ベクトル空間にプロット。 各点は 1 県 = 1 ベクトル。 直線的な並びは「人口と経済規模が比例的」 = 高い相関 (cos 類似度に近い概念) を意味する。

この散布図で読み取れることは 3 つ。 (1) ほとんどの県は左下に集まる (人口・経済とも小さい)、 (2) 東京・大阪・愛知・神奈川が右上に「外れ値的」に位置する、 (3) 全体としては左下から右上に伸びる「方向ベクトル」 が見える。 PCA の第 1 主成分はまさにこの方向に近く、 「規模 (Size)」 を表す軸として解釈できる。 ベクトル数学は、 こうした視覚的パターンを「方向」「ノルム」「内積」 の言葉で精密に定量化する道具を与える。

図 2. ヒストグラム — 1 次元ベクトル成分の分布

SSDSE-B-2026 ヒストグラム:人口の分布
図 2: 47 都道府県人口のヒストグラム。 1 次元ベクトル (人口) を 47 個並べたとき、 値の分布が右に長い尾を引く非対称形 (右裾) であることが分かる。

ヒストグラムは「ベクトル空間の 1 つの軸 (= 1 成分) の濃度」を表す。 ここでは人口というスカラー値 47 個を見ているが、 これは「47 県を並べた特徴ベクトル」 の 1 つの成分に当たる。 右裾の長さは「東京や大阪などごく一部が突出している」 ことを意味し、 ベクトル空間で言えば「ノルムが極端に大きい点が少数存在する」状態。 こうした分布の偏りは、 標準化 (mean=0, std=1) や log 変換などのベクトル変換で扱いやすい形へ整える対象となる。

図 3. 箱ひげ図 — 複数グループのベクトル成分比較

SSDSE-B-2026 箱ひげ図:地方別の比較
図 3: 地方ごとにグループ化した箱ひげ図。 中央値 (中央線)、 四分位範囲 (箱)、 外れ値 (点) が一目で比較できる。 グループ間のベクトル分布差を要約表示する古典的可視化。

箱ひげ図は「複数のサブベクトル集合の中心と広がり」 を並列に並べる。 地方 (北海道・東北・関東…) ごとに 1 つの箱を描けば、 関東の人口分布が他地方と比べどれほどシフトしているかが見える。 これはベクトル空間で言えば「群ごとの重心ベクトルがどこに位置し、 群内分散がどう違うか」 を視覚化していることに等しい。 LDA (線形判別分析) や群間共分散行列の議論の出発点でもある。

📌 3 つの図が共通して示すこと

散布図・ヒストグラム・箱ひげ図はいずれも、 「ベクトル空間の中で点がどう分布しているか」 を別の角度から照らし出す。 散布図は 2 軸 (= 2 成分)、 ヒストグラムは 1 軸 (= 1 成分の濃度)、 箱ひげ図は群分割 (= 部分ベクトル空間の比較)。 ベクトル数学は単なる計算規則ではなく、 こうした可視化の「下に流れる共通言語」 として働く。 PCA・cos 類似度・距離計算もすべて、 この共通言語の応用問題と読める。

可視化 ベクトル空間での意味 対応する計算
散布図2 次元空間に点を配置相関・共分散・PCA 第 1 主成分
ヒストグラム1 軸の値の濃度平均・分散・標準化変換
箱ひげ図群ごとの分布要約群内・群間分散・LDA

🎤 補講:ベクトル数学が「全データ科学の共通言語」 と呼ばれる理由

統計学、 機械学習、 信号処理、 量子力学、 経済学の最適化問題、 オペレーションズ・リサーチ、 ネットワーク科学。 これらの分野はいずれも「ベクトル空間で表現された対象に演算を施す」 という共通の文法を持つ。 同じ式 $\mathbf{y} = A \mathbf{x}$ が、 ある分野では予測モデル、 別の分野では物理状態の遷移、 また別の分野では金融ポートフォリオの調整を表す。 これを **ベクトル数学の汎用性** という。

なぜ汎用なのか。 一つの答えは「線形性」 にある。 線形演算は「足し算とスカラー倍が分離できる」 という単純な構造を持つが、 これが奇跡的に多くの現象を近似する。 微小区間ではほとんどの関数が線形 (テイラー展開の一次項) に見え、 統計の中心極限定理は「独立な揺らぎを足すと正規分布になる」 という線形性の表れであり、 ニューラルネットでも各層の主役は線形変換 (行列積) で、 非線形性は要所要所の活性化関数で挿入されるだけ。

もう一つの答えは「幾何との結びつき」 にある。 ベクトルは「向き」 と「大きさ」 を持ち、 内積は「向きの一致度」 を、 ノルムは「大きさ」 を、 外積は「軸」 を表す。 これらの幾何的直感は人間の視覚と相性が良く、 計算結果を絵にできる。 PCA の第 1 主成分を矢印で描くと「データのばらつきの大方向」 が一目で分かり、 cos 類似度を円周上に描けば「方向の近さ」 が角度として見える。 抽象的な式を視覚で支えられる、 これが多くの分野でベクトル数学が共通言語になった理由だ。

SSDSE-B-2026 の 47 都道府県を題材にしても同じ。 人口・気候・経済・教育・医療など多数の指標を 1 県ずつ並べると、 各県は「高次元ベクトル」 になる。 県同士の cos 類似度を計算すれば「似た特徴を持つ県の組」 が自動抽出でき、 PCA で 2 次元に圧縮すれば「47 県マップ」 が描ける。 ベクトル数学は単なる計算技法ではなく、 「データを地理のように歩き回るためのコンパス」 として機能する。

最後に、 ベクトル数学を学ぶ際の心構えを 3 点。 第一に「計算を必ず一度は手で動かす」。 内積・ノルム・cos の計算を 2 次元・3 次元で手書きすると、 高次元に拡張しても感覚が消えない。 第二に「絵を描く」。 紙でも、 matplotlib の quiver でも、 必ず 1 度は矢印として可視化する。 第三に「実データに当てる」。 SSDSE のような公的データで「自分の県」 をベクトル化し、 他県との距離・類似度を計算する。 この三つを繰り返せば、 ベクトル数学は道具を超えて「ものの見方」 となり、 統計・機械学習・AI のあらゆる議論を地に足の着いた形で理解できるようになる。

補足として、 学習の段階別ロードマップを記す。 (a) 入門期: 2-3 次元での加法・スカラー倍・内積・ノルムを手計算で完璧に。 教科書の問題を 30 題は解く。 (b) 中級期: NumPy の `np.dot`, `np.linalg.norm`, `np.linalg.eig` を使い、 SSDSE-B-2026 で県ベクトルを構築し cos 類似度ランキングを出す。 (c) 上級期: PCA・SVD を自力で実装し、 同じ結果が scikit-learn の `PCA` クラスで出るかを比較する。 (d) 応用期: NumPy で簡易な線形回帰 ($\hat{\beta} = (X^T X)^{-1} X^T \mathbf{y}$) を実装し、 多重共線性で行列が特異になる場面を再現してみる。 各段階で「式 → 計算 → 可視化 → 解釈」 のサイクルを回すと、 ベクトル数学が抽象的な記号から「現実を読む道具」 へと変貌する。

ベクトル数学の応用領域 — 一覧表

分野 ベクトル数学の使われ方 代表的な式
線形回帰特徴量と係数の内積$\hat{y} = \mathbf{w} \cdot \mathbf{x} + b$
PCA分散最大の方向ベクトルを抽出$C \mathbf{v} = \lambda \mathbf{v}$
k-NN距離 (ノルム) で近傍を探索$d = \| \mathbf{x}_i - \mathbf{x}_j \|$
TF-IDF・文書類似cos 類似度で文書間距離$\cos \theta = \frac{\mathbf{a} \cdot \mathbf{b}}{\| \mathbf{a} \| \| \mathbf{b} \|}$
深層学習層ごとに行列 × ベクトル$\mathbf{h} = \sigma(W \mathbf{x} + \mathbf{b})$
最適化勾配ベクトルの逆方向に進む$\mathbf{x} \leftarrow \mathbf{x} - \eta \nabla L$
物理 (力学)力・速度・加速度を 3D ベクトルで表現$\mathbf{F} = m \mathbf{a}$
経済・金融資産配分ベクトルとリスク行列$\sigma_p^2 = \mathbf{w}^T \Sigma \mathbf{w}$

この表が示すのは「ベクトル数学を 1 つマスターすれば、 多分野の方程式を共通の文法で読める」 ことだ。 例えば $\mathbf{w} \cdot \mathbf{x}$ という形は、 線形回帰の予測値でも、 ニューラル層の前活性化でも、 ポートフォリオの期待リターンでもまったく同じ計算をしている。 違うのは「何を $\mathbf{w}$ と呼ぶか、 何を $\mathbf{x}$ と呼ぶか」 だけ。 この抽象化のメリットを実感することが、 ベクトル数学を「便利な道具」 から「世界を読む共通言語」 へ昇格させる第一歩となる。

📖 拡張深掘り:ベクトル数学を 47 都道府県データで完全に味わう

本節ではベクトル数学の主要概念を SSDSE-B-2026 データに当てはめ、 「計算 → 解釈 → 失敗例 → 修正方針」 という流れで具体的に体験する。 数式を追うだけでなく「実データでこの式が何を意味するか」 を毎回確認することで、 ベクトル数学が現実世界とつながった生きた道具に変わる。

A. 加法とスカラー倍 — 「人口を 2 倍にしたら」 を考える

仮に東京都の (人口, 消費支出) ベクトルを $\mathbf{t} = (1400, 110)$ (いずれも概算の相対値) とすると、 $2 \mathbf{t} = (2800, 220)$ は「東京が 2 倍規模になった仮想都市」 と読める。 一方で $\mathbf{t} + \mathbf{k}$ (北海道 $\mathbf{k} = (520, 20)$) は「東京 + 北海道を合体させた仮想県」 のベクトル $(1920, 130)$。 加法とスカラー倍だけで「合併」 や「拡大」 が自然に表現できる。 ただし注意点として、 人口と消費支出は単位が違うので、 そのまま足すと「単位混合のスカラー」 という意味不明な量になる。 ベクトル演算は単位の整合性を自動チェックしてくれないので、 解釈する側が常に意識する必要がある。

B. ノルム — 「県の規模」 を 1 つの数値で要約する

ベクトルのノルムは「大きさの 1 軸要約」 として強力だが、 単位を揃えていないと無意味になる。 例えば $(人口, 消費支出) = (1400, 110)$ の L2 ノルムは $\sqrt{1400^2 + 110^2} \approx 1404$ だが、 これはほぼ「人口」 の値そのもの。 消費支出の影響がほとんど反映されない。 これを解消するには、 各成分を平均 0・標準偏差 1 に標準化する「z-score 変換」 を施し、 次元のないベクトルに直してからノルムを計算する。 こうすれば「人口と消費支出が等しく寄与するノルム」 が得られ、 「総合規模スコア」 として 47 県をランキングできる。 PCA の第 1 主成分スコアも、 標準化後のデータで計算するのが基本となるのはこのため。

C. 内積 — 「県のプロファイルが似ているか」 を定量化

標準化済みの東京ベクトル $\tilde{\mathbf{t}}$ と神奈川ベクトル $\tilde{\mathbf{n}}$ の内積を取れば、 「両県のプロファイル類似度」 が得られる。 内積が正で大きい → 両県は「同じ方向に偏った特徴」 を持つ (例: 人口・消費支出・出生数が揃って高い)。 一方で東京と高知の内積はほぼゼロか負になる可能性が高く、 「異質な県」 と分類できる。 cos 類似度に正規化すれば $-1 \le \cos \theta \le 1$ の範囲で直感的に解釈可能。 「47 県の cos 類似度行列」 を作ると、 47×47 の対称行列が得られ、 クラスタリングの素材となる。

D. 線形独立と多重共線性 — 「似すぎる特徴量」 がモデルを壊す

SSDSE-B-2026 では「総人口」 と「日本人人口」 は強い線形関係にある (日本人人口 ≈ 総人口 × 0.98 程度)。 これは 47 県ベクトルが「総人口」 「日本人人口」 の 2 次元平面上でほぼ直線上に並ぶことを意味する。 ベクトル数学的には「線形独立性が低い」 状態。 この 2 特徴量を両方使って線形回帰すると、 行列 $X^T X$ の逆行列がほぼ存在しなくなり (=行列式がほぼ 0)、 回帰係数が不安定になる。 これが「多重共線性 (multicollinearity)」 の正体。 対処法は (i) どちらか片方だけ採用する、 (ii) Ridge 回帰で正則化する、 (iii) PCA で主成分に変換してから回帰する、 のいずれか。 すべてベクトル数学の言葉で説明できる。

E. 射影と最小二乗法 — 「最も近い直線」 を幾何で理解する

SSDSE-B-2026 で 47 県を (人口, 消費支出) として散布図に描き、 線形回帰直線 $y = \beta_0 + \beta_1 x$ を引く。 この回帰直線は「47 個の観測ベクトルを、 1 次元 (直線) 部分空間に**射影**したもの」 と読み替えられる。 最小二乗法は「観測ベクトル $\mathbf{y}$ と、 説明変数の線形結合で表現できる平面 $X \boldsymbol{\beta}$ との距離 (ノルム差) を最小化する」 問題で、 答えは「$\mathbf{y}$ をその平面に正射影した点」 となる。 つまり最小二乗解の式 $\hat{\boldsymbol{\beta}} = (X^T X)^{-1} X^T \mathbf{y}$ は、 射影行列 $P = X (X^T X)^{-1} X^T$ を使って $\hat{\mathbf{y}} = P \mathbf{y}$ と書ける。 抽象的に見える式が「射影」 という幾何で生き生きと見えるのがベクトル数学の面白さ。

F. 固有値・固有ベクトル — 「データのばらつき軸」 を抽出

SSDSE-B-2026 の標準化済みデータ行列 $\tilde{X}$ から共分散行列 $C = \frac{1}{n-1} \tilde{X}^T \tilde{X}$ を作る。 これは「特徴量同士の相関構造」 を表す対称正定値行列。 $C$ の固有ベクトルは「データが最も伸びる方向」 を表し、 固有値はその方向の分散 (大きさ) を表す。 第 1 主成分 (最大固有値に対応する固有ベクトル) は「総合規模」、 第 2 主成分は「都市/地方の対比」、 第 3 主成分は「産業構造の違い」 などの解釈軸になる。 これは「47 次元データを 2-3 次元に圧縮して可視化する」 PCA の手法そのもの。 ベクトル数学の固有値理論は、 こうした「データの本質構造」 を抽出する最強の道具となる。

G. SVD — 「行列の万能分解」 で何でも見える

SVD (特異値分解) は任意の行列 $X$ を $U \Sigma V^T$ に分解する手法。 SSDSE-B-2026 の 47 × 50 (47 県 × 50 指標) のデータ行列に SVD を適用すると、 $U$ の各列は「県を特徴づけるパターン」 ($V^T$ の各行は「指標群が示す軸」)、 $\Sigma$ の対角成分はそのパターンの強さを表す。 上位数本のパターンだけ取り出せば「47 県を圧縮表現」 でき、 これがデータ圧縮・推薦システム・潜在意味解析の根幹となる。 単純な「行列の分解」 が、 実は「データに潜む構造の発見装置」 として機能するのがベクトル数学の威力。

H. cos 類似度の限界 — 「方向だけ」 では失う情報

cos 類似度は「方向の一致度」 を測るが、 「大きさ」 を捨ててしまう。 例えば東京 (1400, 110) と長野 (200, 8) の cos は両方とも「人口に対して消費支出が約 8% 弱」 という比率が近いため、 ほぼ 1 に近い値を示す。 しかし「規模感は 7 倍違う」 という事実は完全に消えてしまう。 cos 類似度だけで「東京と長野は似ている」 と結論するのは典型的な誤用。 解釈の場面では、 cos と一緒にノルム (大きさ) も併記する、 あるいは標準化を変える (例: log 変換でスケール感を縮める)、 などの工夫が必要となる。 ベクトル数学を実務で使う際は、 「何を測っていて、 何を捨てているか」 を常に意識することが重要。

I. 高次元の呪い — 「次元が増えると距離が無意味になる」

SSDSE-B-2026 で 47 県を 50 指標すべてを使ってベクトル化すると、 各県は 50 次元ベクトルになる。 ここで困るのが「高次元の呪い (curse of dimensionality)」 と呼ばれる現象で、 次元が増えるほどすべての点が「ほぼ等距離」 に見えてくる。 これは「立方体の体積が、 次元が上がるとほぼすべて表面近くに集中する」 という幾何学的事実に由来する。 結果として、 50 次元での k-NN やクラスタリングは「ノイズと信号の区別がつかない」 状態に陥りやすい。 対処は (i) PCA で次元を圧縮する、 (ii) 特徴量選択で意味のある変数だけ残す、 (iii) 距離の代わりに cos 類似度を使う (角度は次元増加に対して相対的に安定)、 のいずれか。 ベクトル数学を実用する上で、 高次元の罠を知っておくことは生存戦略として必須。

J. まとめと次のステップ

A から I までを通じて、 ベクトル数学が「式を計算する技術」 ではなく「データを解釈する文法」 であることを示した。 加法・スカラー倍・ノルム・内積・cos・射影・固有値・SVD、 どれもが現実のデータ分析で出会う具体的な問題と対応している。 次のステップとしては、 (1) NumPy で SSDSE-B-2026 を読み込み、 (2) 47 × 50 の行列を作り、 (3) z-score 標準化を適用、 (4) cos 類似度行列を計算、 (5) PCA で第 1-第 3 主成分にプロット、 という一連の作業を自分の手で再現してみることを強く推奨する。 この一連の手順は、 機械学習やデータ分析の現場で「特徴量エンジニアリング → モデル化 → 可視化」 として毎日繰り返される基本動作そのもの。 ベクトル数学を学ぶことは、 結局のところ「データを見抜く目」 を養うことに他ならない。

最後に、 ベクトル数学を学んだ後に挑戦するとよい応用テーマを 5 つ挙げる。 (1) **テキスト埋め込み**: Word2Vec や BERT の埋め込みベクトルを cos 類似度で比較、 「king - man + woman ≒ queen」 を確かめる。 (2) **画像埋め込み**: CNN の中間層出力をベクトルとして取り出し、 同じカテゴリ画像同士の cos 類似度が高いことを確認する。 (3) **推薦システム**: ユーザー × アイテム行列に SVD を適用し、 行列補完による評価予測を実装する。 (4) **グラフ埋め込み**: ネットワーク上のノードをベクトル化する node2vec/DeepWalk を試し、 「似た接続パターンのノード」 を抽出する。 (5) **時系列のベクトル化**: SSDSE-B の年次データを並べて各県を「時系列ベクトル」 とし、 動的時間伸縮 (DTW) で類似県を見つける。 いずれもベクトル数学の知識があれば、 アルゴリズムの中身が「式の連なり」 として透けて見えるようになる。 抽象的な記号が現実を読む道具へと変わる、 その瞬間を体験することが本ページの最終目的である。

🍳 NumPy で学ぶベクトル演算 — 実務即戦力レシピ 12 連発

ここではベクトル数学を NumPy で確実に書ける形に落とし込む、 即戦力レシピを 12 個提示する。 SSDSE-B-2026 を実例に使い、 「式 → コード → 出力 → 解釈」 の流れを徹底する。 すべての例で `import numpy as np` および `import pandas as pd` が前提。 データは `pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='shift_jis', skiprows=[1])` 等で読み込まれているものとする。

レシピ 1. ベクトルを 1 行で作る

SSDSE-B-2026 で「東京都の総人口・出生数・消費支出」 を取り出す。 `df.query("都道府県=='東京都'")[['総人口','出生数','消費支出(二人以上の世帯)']].values.flatten()` で 3 要素ベクトルが得られる。 NumPy 配列にすれば、 直後に加減算・スカラー倍がそのまま使える。

レシピ 2. ベクトル間の差 (距離計算の準備)

$\mathbf{a} - \mathbf{b}$ は `a - b` だけ。 NumPy はブロードキャストにより、 2 つのベクトルの対応成分の差を一気に計算する。 距離はこの差ベクトルのノルムを取ればよい: `np.linalg.norm(a - b)`。

レシピ 3. ノルム (L1/L2/L∞)

L2: `np.linalg.norm(a)`、 L1: `np.linalg.norm(a, ord=1)`、 L∞ (最大絶対値): `np.linalg.norm(a, ord=np.inf)`。 標準化や正則化の理解にはこの 3 種類を使い分けられることが必須。

レシピ 4. 内積

`np.dot(a, b)` または `a @ b`。 後者は Python 3.5+ で使える行列乗算演算子で、 内積・行列積を統一的に書ける。 大規模計算では `np.einsum` が更に高速になる場合がある。

レシピ 5. cos 類似度

`cos = np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))`。 一行で書ける。 sklearn なら `from sklearn.metrics.pairwise import cosine_similarity; cosine_similarity([a], [b])[0, 0]`。

レシピ 6. 行列の各行をベクトルとしてノルム計算

`np.linalg.norm(X, axis=1)` で「47 個の県ベクトルの大きさ」 を一度に計算。 axis 引数の理解は NumPy 上達の要。

レシピ 7. z-score 標準化

`Z = (X - X.mean(axis=0)) / X.std(axis=0)`。 列ごとに平均 0・標準偏差 1 に変換。 多変量解析の前処理として頻出。 sklearn なら `StandardScaler().fit_transform(X)`。

レシピ 8. 共分散行列・相関行列

共分散: `np.cov(X.T)` (X が 行=サンプル 列=特徴量 の形式)。 相関: `np.corrcoef(X.T)`。 PCA の固有値分解はこの行列に対して行う。

レシピ 9. 固有値分解

`eigvals, eigvecs = np.linalg.eigh(C)`。 対称行列に対しては `eigh` を使う (`eig` より速く数値的に安定)。 戻り値の固有値は昇順なので、 PCA では `[::-1]` で降順に並べ替える。

レシピ 10. SVD

`U, S, Vt = np.linalg.svd(X, full_matrices=False)`。 上位 k 個だけ残せば「低ランク近似」 で次元圧縮が完結。 推薦システムの行列補完にも応用できる。

レシピ 11. ペアワイズ距離行列

`from scipy.spatial.distance import cdist; D = cdist(X, X)` で 47×47 のユークリッド距離行列を一気に計算。 cos 類似度行列は `1 - cdist(X, X, metric='cosine')` で得られる。 クラスタリングやヒートマップの素材として頻出。

レシピ 12. 線形回帰 (正規方程式)

`beta = np.linalg.solve(X.T @ X, X.T @ y)`。 教科書の式 $\hat{\boldsymbol{\beta}} = (X^T X)^{-1} X^T \mathbf{y}$ そのまま。 ただし `linalg.inv` で逆行列を直接取るより `linalg.solve` の方が数値的に安定。 多重共線性で行列が特異に近いと警告が出るので、 そのときは Ridge 回帰 (`linalg.solve(X.T @ X + alpha * I, X.T @ y)`) に切り替える。

これら 12 レシピを覚えれば、 ベクトル数学の式を見たときに「あ、 これは NumPy で 1 行だな」 と直感できるようになる。 式とコードの距離が縮まると、 学習・実装・デバッグのすべてが加速する。 ベクトル数学を「式の言語」 と「コードの言語」 の両方で扱えることが、 データサイエンティストの必須スキルとなる。

🛤 ベクトル数学 学習ロードマップ (4 段階)

ベクトル数学は奥が深い分野だが、 4 段階に分けて積み上げれば確実に習得できる。 各段階で「式 → 手計算 → コード → 解釈」 のサイクルを回し、 SSDSE-B-2026 のような実データで自分の手を動かすことが鍵となる。

段階 1 (入門, 1 週間): 2-3 次元の手計算を完璧に。 加法・スカラー倍・内積・ノルム・cos・直交・線形独立を 30 題は紙で解く。 教科書の章末問題で十分。 ここでつまずくと後の段階すべてが弱くなる。

段階 2 (初級応用, 1-2 週間): NumPy で同じ計算を再現。 上述のレシピ 12 個を SSDSE-B-2026 に当てて、 各県の cos 類似度ランキングや距離ランキングを自分で作る。 結果が「常識と合っているか」 (例: 東京と神奈川は似ている、 北海道は孤立している) を確認することで、 計算結果の解釈眼を養う。

段階 3 (中級, 2-3 週間): PCA・SVD・線形回帰を自前実装。 sklearn の結果と比較し、 「ライブラリの中身で何が起きているか」 を理解する。 共分散行列の固有値分解、 SVD の上位 k 近似、 正規方程式の解法など、 ベクトル数学の主要定理が現実のコードとして動く瞬間を体験する。

段階 4 (上級, 継続): 高次元埋め込み (Word2Vec, BERT)、 推薦システム (行列分解)、 グラフ埋め込み (node2vec)、 時系列の動的時間伸縮など、 現代的応用へ進む。 この段階に至れば「論文を読むときの数式が、 ベクトル数学のレシピ集としてすらすら読める」 ようになり、 自分の研究や業務に独自にベクトル数学を組み込めるようになる。

この 4 段階を 1-2 ヶ月で踏破すれば、 ベクトル数学は「教科書の中の難しい記号」 から「日常使う統計・機械学習の共通文法」 に変わる。 最後に、 SSDSE-B-2026 のような身近で具体的なデータに繰り返し当てることが、 抽象を血肉に変える最良の練習法であることを強調しておく。

締めくくりの一言: ベクトル数学は、 線形代数と幾何学が出会う場であり、 統計・機械学習・物理・経済すべての「共通の母語」 である。 一度この母語を習得すれば、 分野をまたいだ書物・論文・コードを同じ眼差しで読めるようになり、 自分の思考の幅が大きく広がる。 SSDSE-B-2026 のような身近な公的データを使って、 日々少しずつでもベクトル演算を実践することが、 この母語を「読み書きできる」 状態に保つ最良の方法となる。 学習に終わりはないが、 毎日 10 分でもベクトルに触れていれば、 半年後には世界の見え方が確実に変わっている。

最後の補足として、 学習者がよく抱える疑問への短い回答を 3 つ示す。 (1) 「行列とベクトルの違いは?」 — ベクトルは「1 次元の数列」、 行列は「2 次元の数表」 と覚える。 形式的にはベクトルは n×1 (列ベクトル) または 1×n (行ベクトル) の行列の特殊形。 (2) 「内積と外積はどう違う?」 — 内積は 2 つのベクトルから 1 つのスカラーを返す (向きの一致度)、 外積は 2 つの 3 次元ベクトルから 1 つの 3 次元ベクトルを返す (両者に垂直な軸)。 統計・機械学習では内積が主役、 物理では外積も重要。 (3) 「PCA と SVD はどう違う?」 — PCA は共分散行列の固有値分解、 SVD は元データ行列の特異値分解。 中心化済みデータに対しては両者は本質的に同じ結果を出す。 SVD のほうが数値的に安定で、 実装ではこちらが主流。 こうした素朴な疑問を 1 つずつ潰しながら学べば、 ベクトル数学は確実に身につく。

補足: 学習を加速するための副教材として、 (a) 線形代数の名著 (Gilbert Strang『Linear Algebra and Its Applications』、 永田雅宜『線型代数学』 など)、 (b) MIT OCW 18.06 の動画講義、 (c) 3Blue1Brown の「Essence of Linear Algebra」 シリーズ (YouTube, 14 本) を強く推奨する。 特に 3Blue1Brown の可視化は、 ベクトル空間・行列変換・固有値・SVD の幾何的意味を直感的に伝える稀有な教材で、 抽象的な記号を視覚的なアニメーションに変換してくれる。 また Python での実装練習には Jupyter Notebook + NumPy + matplotlib の組み合わせが最適で、 計算結果をすぐにグラフに反映できるため、 「式 → 数値 → 図」 のフィードバックループを短く保てる。 SSDSE-B-2026 や e-Stat の公的データを題材にすれば、 現実感のある問題で楽しく演習を進められる。 こうした多角的なリソースを併用することで、 ベクトル数学は「教科書の難解な分野」 から「自分の道具箱の中の頼れる相棒」 へと変貌する。

⚠️ よくある落とし穴

❌ 標準化なしで内積
人口(百万人)と出生率(%)を素のまま内積しても意味が壊れる。 必ず Z-score へ変換して、 単位を揃えてから内積をとる。
❌ ユークリッド距離だけを盲信
高次元では「次元の呪い」で全ての点が等距離になる現象が出る。 110 次元の都道府県データでは、 コサイン類似度や次元削減後の距離を使うのが安全。
❌ 行ベクトルと列ベクトルの混同
数式では列ベクトルが標準。 NumPy では 1 次元配列 (n,) と 2 次元 (n,1) の挙動が違う。 行列積を含む計算では v.reshape(-1, 1) で揃える。
❌ コサイン類似度を率と勘違い
$\cos\theta = 0.9$ は「90 %」ではない。 角度に翻訳すれば 26°。 距離尺度の感覚を磨くため、 角度に直して比較する習慣をつける。
❌ 欠損のあるベクトルで距離
NaN が 1 個入るだけで距離が NaN に。 補完するか、 欠損のない列だけで距離を計算するかを事前に決める。

⚠️ 深掘り 32:ベクトル演算の典型的な落とし穴

  1. スケール統一忘れ:人口 10⁶ と高齢化率 0.3 を同じベクトルにすると、 距離・内積が人口に支配される。 必ず StandardScaler
  2. 高次元の呪い:100 次元以上だと、 任意の 2 点の距離がほぼ均一になる現象。 PCA で次元削減してから距離計算。
  3. 形状ミス:(47,) と (47, 1) は別物。 reshape 確認必須。
  4. ブロードキャスト誤用:(47, 100) と (100,) の演算は意図通りか確認。
  5. L1 vs L2 の選択ミス:外れ値ありなら L1、 滑らかさ重視なら L2。
  6. 非ユークリッド距離の見落とし:地理座標、 確率分布、 グラフ距離は特殊な距離関数。
  7. 共分散行列の正則性失敗:列数 > 行数だとマハラノビス距離が計算不能。 擬似逆行列で対処。
  8. 欠損値:np.nan を含むベクトルの演算は全 NaN に。 事前補完必須。

🗺 概念マップ

ベクトルから始まる線形代数のロードマップ。 矢印 → 行列 → 分解 → 機械学習へと階段を上がっていきます。

[スカラー] → [ベクトル] → [行列] → [テンソル]
                │
                ├─ 内積・ノルム → 類似度・距離 → クラスタリング
                ├─ 線形結合     → 基底・部分空間 → 次元削減 (PCA)
                ├─ 射影         → 回帰 (最小二乗) → 機械学習
                └─ 距離指標     → k-NN / k-means → 推薦・分類

学習順序の推奨:

  1. 本ページでベクトル・内積・ノルムを掌握
  2. 行列 でデータテーブルを扱う
  3. 固有値PCA で構造抽出
  4. k-means でベクトル空間クラスタリング
  5. ニューラルネット で非線形ベクトル変換

📖 さらに学ぶための文献

ベクトル演算 前提: スカラー・実数 並列: 行列・テンソル 発展: PCA・Word2Vec 応用: cos 類似度・距離 対比: 内積・外積 統合: ノルム・距離関数

🔗 隣接手法への橋渡し

ベクトル演算は機械学習・統計の数学的基盤として、 ほぼ全手法と接続する。

SSDSE-B-2026 で「47 都道府県を 100 次元の特徴量ベクトルとして表現」し、 ベクトル間距離 / 内積で類似県を発見する分析が典型的応用。 全機械学習はこの「データ点 = ベクトル」表現の上に成り立つ。

🌳 手法選択フロー

ベクトル演算は目的別に異なる演算を選ぶ。 以下の指針で判断する。

  1. 2 ベクトルの「向きの近さ」を測りたいコサイン類似度 (内積 / ノルムの積)。 文書類似度、 推薦システムで標準。
  2. 2 ベクトルの「位置の近さ」を測りたいユークリッド距離マンハッタン距離。 k-NN やクラスタリングで使用。
  3. ベクトルの「長さ」を測りたいL1/L2 ノルム。 正則化項として頻出。
  4. ベクトルを別の空間に「射影」したい → 内積による射影、 PCA で次元圧縮、 線形変換 (行列乗算)
  5. 多くのベクトルから「共通方向」を抽出したい主成分分析 (PCA) で固有ベクトル計算

SSDSE-B-2026 (47 県 × 100 列) では「コサイン類似度で類似県発見」「PCA で経済構造の主軸抽出」が代表的な使い方となる。

🧭 追補・直感の再整理 — 「大きさ」と「向き」を分けて掴む

ベクトルの本質は 「大きさ (ノルム)」と「向き (単位ベクトル)」の 2 情報に分解できる点にあります。 成分表示 $v=(v_1,\ldots,v_n)$ は座標にすぎず、 意味を持つのは 加算スカラー倍内積ノルム の 4 演算です。 データ分析では 1 行 = 1 特徴量ベクトルと読み替え、 内積は「射影の長さ × 相手のノルム」= 類似度、 ノルムは「原点からの隔たり」= 特異さ、 として働きます。

この「大きさと向きは別物」という感覚を、 SSDSE-B-2026(2023 年度・47 都道府県・全 109 数値列を平均 0・分散 1 に標準化, ddof=0)の 実測値で確かめます。 下表の数値はすべて実データから計算したもの(合成ではありません)。

測る量実測値読み方
‖東京‖ (標準化・109 次元)42.86全県で最大 = 最も「特異」な県
‖広島‖ (同)3.16全県で最小 = 最も「平均的」な県
cos(東京, 神奈川)+0.876向きが近い = プロフィールの型が似る
cos(東京, 沖縄)−0.274向きがほぼ直交〜逆 = 異質な型
cos(鳥取, 島根)+0.912過疎県どうし、 型が酷似
L2 距離 東京−鳥取49.91大きさの隔たりが大 = 遠い点
L2 距離 鳥取−島根3.47大きさも向きも近い = 隣り合う点

💡 ‖東京‖=42.86 と大きいのに cos(東京,神奈川)=0.876 で「向きは神奈川に近い」。 ノルム(規模)と cos(向き)は独立の情報であることが、 実測で確認できます。 ページ上部の 🎮 触って理解する ウィジェットで a を伸ばしても向きが変わらない挙動と、 同じ事実の裏表です。

🕳 追補・落とし穴の深掘り(重要)

既存の ⚠️ よくある落とし穴 を補強し、 とくに事故が多い 6 点を実測とともに整理します。

① 内積とアダマール積 (要素積) の混同

内積 $a\cdot b=\sum_i a_i b_i$ は スカラー 1 個、 アダマール積 $a\odot b=(a_1b_1,\ldots,a_nb_n)$ は ベクトル。 NumPy では a @ b(内積)と a * b(要素積)が別物です。 実例:2023 年度の人口ベクトルと出生数ベクトルの 要素積 は長さ 47 のベクトルで、 その総和が内積 $\approx 4.12\times10^{12}$ に一致します。 コサイン類似度や距離で * を使う取り違えは頻出バグ。「内積は掛けて足すまでがワンセット」。

② 次元の呪い — 高次元で距離が均一化する

次元が増えると、 任意 2 点の距離差が相対的に潰れて「みんな等距離」に見えます。 SSDSE-B-2026 標準化データで、 先頭 $k$ 列だけを使った 47 県ペア距離の 相対コントラスト $(d_\max-d_\min)/d_\min$ を実測すると、 次元とともに急落します(下表・実測値)。

使用次元 k(d_max − d_min)/d_min平均ペア距離
1135480.92
220041.30
521872.07
201704.49
10915.611.85

コントラストが 13548 → 15.6 へと 3 桁縮小。「近い/遠い」の差が薄れるため、 高次元では PCA次元削減 で圧縮してから距離を測る、 あるいは向きに頑健な コサイン類似度 を使うのが安全です。

③ 正規化・標準化の忘れ / スケール差で内積が歪む

単位が桁違いの成分(人口 $10^6$ と出生率 0.01)を素のまま内積・距離に入れると、 大スケール成分が支配します。 実測でも 生データの cos(人口,出生数)=0.997 は「ほぼ人口が全部説明」しているだけで、 情報としては貧弱。 平均を引いて 標準化 すると相関 0.995 として意味づけできます。 コサイン類似度は原理上ノルムで割って大きさを打ち消しますが、 1 成分が極端に大きいと方向自体がその成分に支配されるため、 やはり事前の標準化が安全です。

④ 非可換な演算 — 外積は順序で符号が変わる

内積は可換 $a\cdot b=b\cdot a$ ですが、 3D の外積は 反可換 $a\times b=-\,(b\times a)$。 行列・テンソル積の順序も入れ替え不可。「演算をひっくり返しても同じ」という直感は内積・和だけの性質だと切り分けます。

⑤ ゼロベクトルの向きは未定義

$\mathbf{0}$ は大きさ 0・向きなし。 単位化 $v/\lVert v\rVert$ や cos 類似度は分母が 0 になり inf/nan を返します。 標準化後に全成分が平均どおりの「完全に平均的な県」が現れた場合や、 定数列を含む場合に潜みます。 if np.linalg.norm(v) > 0: で必ずガードを。

⑥ ノルムの種類を取り違える

同じ「大きさ」でも L1/L2/L∞ で値は大きく異なります。 実測:標準化した東京ベクトルは L1=420.8、 L2=42.86、 L∞=6.26。 外れ値に頑健なら L1、 幾何的な直線距離なら L2、 最悪成分の抑制なら L∞。 正則化(Lasso=L1 / Ridge=L2)の選択基準と同じ発想です。

🚀 追補・発展 — 内積から固有ベクトル・埋め込みへ

ベクトルの 4 演算は、 統計・機械学習の主要手法へ一本道でつながります。 要点を「橋渡し」として圧縮します。

この一本道を SSDSE-B-2026 で辿ると、 47 県ベクトル → cos で類似県 → 共分散の固有ベクトルで主軸 → 2D 埋め込みで俯瞰、 という流れがそのまま「多次元データを読む標準手順」になります。