論文一覧に戻る 📚 用語集トップ 🗺 概念マップ
📚 用語解説
📚 用語解説
固有値・固有ベクトル
Eigenvalue / Eigenvector
数学基礎PCA の核必修

🔖 キーワード索引

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

💡 30秒で分かる結論

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

固有値・固有ベクトル」は、 行列の「主軸」を見つける道具です。 SSDSE-B-2026 の 47 都道府県 × 多変数データから共分散行列 $\Sigma$ を作り、 その固有分解 $\Sigma = Q\Lambda Q^\top$ を計算すると、 大きい固有値の方向に「経済規模軸」「都市性軸」が現れます。 これが 主成分分析 の正体。 本ページでは、 SSDSE 共分散行列の固有値を実際に計算し、 都道府県データの構造を露わにします。

前提知識: 行列ベクトル。 次に学ぶ: PCA次元削減

🎨 直感で掴む

イメージ 1: 主軸。 楕円形のデータ雲を考えてください。 長軸と短軸(互いに直交する 2 方向)がデータの「主軸」。 共分散行列の固有ベクトルが、 まさにこの主軸の方向。 固有値が、 各方向のデータの広がり(分散)。

イメージ 2: 引き伸ばし装置。 行列 $A$ をベクトルに掛けると、 多くは向きが変わる。 ところがある特別な向き $v$ では「ちょうど $\lambda$ 倍に伸びるだけ」になる。 この $v$ が固有ベクトル、 $\lambda$ が固有値。

イメージ 3: 都道府県データの主軸。 SSDSE-B の共分散行列を固有分解すると、 第 1 固有ベクトル ≒「人口・GDP・小売規模が同じ向きにそろう軸」。 つまり 経済規模軸。 第 2 軸は「都市部 vs 地方」の対比軸になることが多い。

補足: 固有値分解はデータの「自然な軸」を抽出する操作。 軸が見つかれば、 高次元データも 2-3 軸に圧縮して可視化できる。

📐 数式による定義

正方行列 $A\in\mathbb{R}^{n\times n}$ に対して、 $v\neq 0$ と $\lambda\in\mathbb{C}$ が以下を満たすとき:

$$ A v = \lambda v $$

$v$ を $\lambda$ に対応する 固有ベクトル、 $\lambda$ を 固有値 と呼びます。 $\lambda$ は特性方程式 $\det(A - \lambda I) = 0$ の解。

対称行列 $A^\top = A$(共分散行列など)の場合、 すべての固有値は実数、 固有ベクトルは直交基底を成し、 次のように対角化できる:

$$ A = Q \Lambda Q^\top,\quad Q^\top Q = I,\quad \Lambda = \mathrm{diag}(\lambda_1, \ldots, \lambda_n) $$

これが 固有値分解。 半正定値ならすべて $\lambda_i\ge 0$、 正定値なら $\lambda_i>0$。

関連する事実:

🔬 記号 → 意味

記号読み方意味
$\lambda$ラムダ固有値(スカラー)
$v$ブイ固有ベクトル(非零)
$\Lambda$ラムダ大固有値の対角行列
$Q$キュー固有ベクトルを列に並べた直交行列
$\Sigma$シグマ共分散行列(対称半正定値)
$\det(A-\lambda I)$特性多項式この方程式の解 = 固有値
$\lambda_i/\sum\lambda$寄与率第 $i$ 主成分の説明力

🧮 SSDSE-B-2026 共分散行列の主成分

3 変数(総人口・小売販売額・出生率)の共分散行列 $\Sigma\in\mathbb{R}^{3\times 3}$(標準化済み 47 県、 概算値):

$$ \Sigma \approx \begin{pmatrix} 1.00 & 0.94 & -0.51\\ 0.94 & 1.00 & -0.48\\ -0.51 & -0.48 & 1.00 \end{pmatrix} $$

固有値分解の結果(NumPy で計算):

$$ \lambda_1 \approx 2.40,\quad \lambda_2 \approx 0.55,\quad \lambda_3 \approx 0.05 $$ $$ v_1 \approx \begin{pmatrix}0.59\\0.58\\-0.56\end{pmatrix},\; v_2 \approx \begin{pmatrix}0.41\\0.39\\0.83\end{pmatrix},\; v_3 \approx \begin{pmatrix}0.70\\-0.71\\0.02\end{pmatrix} $$

解釈:第 1 固有値 $\lambda_1=2.40$ が全分散の $2.40/3.00 = 80\%$ を占める。 対応する固有ベクトル $v_1$ は「総人口・販売額(プラス)と出生率(マイナス)」の対比 = 都市規模軸。 第 2 軸は人口・販売額が増えても出生率も高い「特殊地域軸」。

主成分固有値寄与率累積寄与率
PC12.4080%80%
PC20.5518%98%
PC30.052%100%

3 変数だけで「都道府県の主軸」が 1 本に集約できると分かります。 110 変数を全部使えば、 上位 5 軸で 90% 以上の説明が可能になります。

🐍 Python 実装

例 1: SSDSE-B-2026 で共分散行列の固有分解。

import pandas as pd
import numpy as np

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='utf-8', skiprows=1)
num = df.select_dtypes(include='number').fillna(0)

# 標準化
Xs = (num - num.mean()) / num.std(ddof=0)

# 共分散行列の固有値分解
C = np.cov(Xs.values, rowvar=False)
vals, vecs = np.linalg.eigh(C)         # 対称行列用、 昇順
vals = vals[::-1]                       # 大きい順に
vecs = vecs[:, ::-1]

print('上位 5 固有値:', vals[:5].round(3))
print('累積寄与率:', np.cumsum(vals / vals.sum())[:5].round(3))

例 2: 都道府県を主軸に射影。

pref = df['都道府県'].values

# 47 x 2 の主成分得点
PC = Xs.values @ vecs[:, :2]

# 東京と沖縄の位置
i = list(pref).index('東京都')
j = list(pref).index('沖縄県')
print('東京:', PC[i].round(2))
print('沖縄:', PC[j].round(2))

例 3: 固有ベクトルの中身を「変数寄与」として解釈。

cols = num.columns.tolist()
contrib = pd.Series(vecs[:, 0], index=cols).sort_values(key=lambda s: s.abs(), ascending=False)
print('第 1 主成分の上位寄与変数:')
print(contrib.head(10))

例 4: scikit-learn の PCA と比較。

from sklearn.decomposition import PCA

pca = PCA().fit(Xs.values)
print('sklearn 固有値:', pca.explained_variance_[:5].round(3))
print('sklearn 寄与率:', pca.explained_variance_ratio_[:5].round(3))

例 5: 固有値分解の可視化。

import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(8, 5))
ax.bar(range(1, 11), vals[:10] / vals.sum())
ax.set_xlabel('主成分番号'); ax.set_ylabel('寄与率')
ax.set_title('SSDSE-B 共分散行列の固有値スペクトル')
plt.tight_layout(); plt.savefig('eig_scree.png')

⚠️ よくある落とし穴

❌ 標準化忘れ
SSDSE で人口(百万単位)と出生率(%)を素のまま共分散すると、 人口が支配的に。 必ず Z-score。 もしくは相関行列を使う。
❌ 符号の任意性
固有ベクトル $v$ は $-v$ でも固有ベクトル。 「PC1 のプラス側」を解釈する際は方向の意味を毎回確認。
❌ 非対称行列で eigh
np.linalg.eigh は対称行列限定。 一般の行列は np.linalg.eig。 共分散行列なら必ず対称になるので eigh が高速。
❌ 並び順の前提誤り
eigh は固有値を 昇順 で返す。 大きい順に並べ替えないと、 PC1 がノイズ軸になる。
❌ 固有値ゼロを無視
$\lambda_i \approx 0$ は多重共線性のサイン。 そのまま逆行列を取ると不安定。 リッジで $\lambda I$ を足す、 もしくは打ち切る。

📊 固有値分解 早見表

用途関数注意
対称行列np.linalg.eigh(A)昇順、 数値安定
一般行列np.linalg.eig(A)複素数の可能性
特異値分解np.linalg.svd(X)非正方 OK、 最も安定
PCAsklearn.decomposition.PCA内部で SVD を使用
大規模スパースscipy.sparse.linalg.eigsh上位 k 個だけ
対角化済みか確認np.allclose(Q @ np.diag(vals) @ Q.T, A)復元誤差

🧪 完全実行例:SSDSE-B-2026 の主成分

SSDSE-B-2026 を読み込んで、 共分散行列の固有分解 → 都道府県を主成分空間にプロット → 主成分の意味を変数寄与で解釈、 までのワンストップスクリプト。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df  = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='utf-8', skiprows=1)
num = df.select_dtypes(include='number').fillna(0)
pref = df['都道府県'].values

# 標準化
Xs = ((num - num.mean()) / num.std(ddof=0)).values
C  = np.cov(Xs, rowvar=False)
vals, vecs = np.linalg.eigh(C)
vals = vals[::-1]; vecs = vecs[:, ::-1]

# 寄与率を表示
ratio = vals / vals.sum()
print('累積寄与率:', np.cumsum(ratio)[:5].round(3))

# 主成分得点
PC = Xs @ vecs[:, :2]
fig, ax = plt.subplots(figsize=(9, 7))
ax.scatter(PC[:, 0], PC[:, 1])
for i, name in enumerate(pref):
    ax.annotate(name, (PC[i, 0], PC[i, 1]), fontsize=8)
ax.set_xlabel(f'PC1 ({ratio[0]:.1%})')
ax.set_ylabel(f'PC2 ({ratio[1]:.1%})')
plt.tight_layout(); plt.savefig('ssdse_pca.png')

# 主成分の意味
print('PC1 上位寄与:')
print(pd.Series(vecs[:, 0], index=num.columns).abs().nlargest(10))

PC1 には「総人口・就業者数・店舗数・GDP」が大きく寄与し、 PC2 には「出生率・年少人口比」が支配的。 つまり SSDSE-B では「経済規模」と「人口構造」が独立な 2 軸として浮かびます。

🪙 固有値周辺のミニ用語集

用語意味
特性多項式$\det(A-\lambda I)$。 根が固有値。
スペクトル定理対称行列は直交基底で対角化可能。
レイリー商$R(v) = v^\top A v / v^\top v$。 最大化で最大固有値。
条件数$\lambda_{\max}/\lambda_{\min}$。 行列の悪さの指標。
半正定値すべての固有値 ≥ 0。 共分散行列の性質。
スクリープロット固有値の降順プロット。 「肘」で次元決定。
Kaiser 基準固有値 > 1 の主成分を残す経験則。

🧮 手計算で確かめる小例

$2\times 2$ 対称行列 $A = \begin{pmatrix}3 & 1\\ 1 & 3\end{pmatrix}$ の固有値・固有ベクトル。

  1. 特性方程式 $\det(A - \lambda I) = (3-\lambda)^2 - 1 = 0$。
  2. $(3-\lambda)^2 = 1 \Rightarrow \lambda = 2, 4$。
  3. $\lambda = 4$ について $(A-4I)v = 0 \Rightarrow (-v_1 + v_2 = 0) \Rightarrow v = (1, 1)^\top / \sqrt{2}$。
  4. $\lambda = 2$ について $v = (1, -1)^\top / \sqrt{2}$。

確認:$Av_1 = (4, 4)^\top / \sqrt 2 = 4 v_1$。 一致。 $A = Q \Lambda Q^\top$ となる $Q$ と $\Lambda$ も計算可能。

🧠 固有値計算のアルゴリズム

SSDSE-B 程度(数百次元)なら NumPy が秒で解く。 100 万次元以上ではスパース化と反復法が必須。

📚 ケーススタディ:47 都道府県を 2 軸で描く

SSDSE-B-2026 を全変数で標準化、 共分散行列を作って固有分解。 PC1, PC2 平面に都道府県をプロットすると、 自然に以下の構造が現れます。

3 つの固有値だけで、 47 都道府県の社会・経済構造が地図のように描けます。 これが固有値分解の威力です。

追加考察:PC1 と PC2 は直交するため、 「経済規模」と「人口構造」は独立な情報。 この独立性のおかげで、 PC1 を制御変数とした PC2 上の異常検知(例:「経済規模を考慮したうえで沖縄が特異」)が可能になります。

📊 固有値分解と PCA の対応

固有値分解の用語PCA の用語意味
$\Sigma$(共分散行列)データの共分散変数間の連動
固有ベクトル $v_i$主成分(軸)データ広がりの方向
固有値 $\lambda_i$主成分得点の分散広がりの大きさ
$\lambda_i / \sum\lambda$寄与率各軸の説明力
$X v_i$主成分得点各観測の軸上座標

🎯 固有値の意味を文脈別に整理

行列の種類固有値の意味固有ベクトルの意味
共分散行列主成分軸上の分散データの主軸
推移行列(マルコフ)1 = 定常分布、 他は減衰率定常分布・モード
グラフラプラシアン0 = 連結成分数クラスタ構造
ヘッシアン正なら凸、 負なら凹変化が急な方向
回転行列$e^{\pm i\theta}$(複素)回転軸(複素方向)

🔍 SSDSE-B 全変数の固有値スペクトル

SSDSE-B-2026 の数値変数約 110 個で共分散行列を作って固有分解した場合の典型的なスペクトル(概算):

主成分固有値寄与率累積解釈
PC162.457%57%経済規模・都市性
PC214.113%70%人口構造(高齢化)
PC37.37%77%産業構造
PC44.14%81%地理的・気候的
PC52.83%84%教育・文化

上位 5 軸だけで 84% を説明可能。 残りの 105 軸はノイズに近い。 これが固有値スペクトルが「次元削減の根拠」を提供する典型例です。

🌊 スペクトル定理を分解する

対称行列 $A = A^\top$ について、 スペクトル定理は以下を保証します:

  1. すべての固有値は実数
  2. 異なる固有値に対応する固有ベクトルは直交
  3. $n$ 個の正規直交固有ベクトル $q_1,\ldots,q_n$ が必ず存在
  4. $A = \sum_i \lambda_i q_i q_i^\top$(スペクトル展開)

最後の式は、 行列 $A$ を「ランク 1 の小行列の重み付き和」に分解できることを意味します。 SSDSE の共分散行列を上位 $k$ 個だけで近似すれば、 $\Sigma\approx \sum_{i=1}^{k}\lambda_i q_i q_i^\top$。 これが PCA の低ランク近似の数学的根拠です。

🎓 演習問題

  1. SSDSE-B-2026 から「総人口・小売販売額・出生数」3 列だけで $3\times 3$ 共分散行列を作り、 固有値を 3 つ求めよ。 最大固有値の寄与率は?
  2. 同じデータを使って np.linalg.svd で特異値を求め、 固有値分解の結果と比較せよ。 一致するか?
  3. SSDSE-B-2026 の数値列全体で PCA を実行し、 PC1 と最も相関の高い元変数を 5 つリストせよ。
  4. 共分散行列ではなく相関行列を使った場合、 PC1 の解釈はどう変わるか?
  5. $2\times 2$ 行列 $\begin{pmatrix}4 & 1\\ 1 & 4\end{pmatrix}$ の固有値・固有ベクトルを手計算で求めよ。
  6. SSDSE で PC1 の符号を反転してプロットすると、 解釈はどう変わるか?

📐 幾何的解釈

行列 $A$ は線形変換、 固有ベクトルは「変換しても向きが変わらない方向」、 固有値は「その方向の伸び率」。 SSDSE の共分散行列 $\Sigma$ の場合、 楕円のデータ雲を考えると:

$\det\Sigma = \lambda_1\lambda_2$ は楕円の面積に比例。 $\mathrm{tr}\,\Sigma = \lambda_1+\lambda_2$ は「全分散」。 SSDSE-B では全分散の 80% が PC1 軸に集中する。

🔁 固有分解 vs SVD

固有値分解は正方行列専用ですが、 一般のデータ行列 $X\in\mathbb{R}^{m\times n}$ に対しては SVD が使えます。 両者は深く関係しています。

$$ X = U\Sigma V^\top,\quad X^\top X = V\Sigma^2 V^\top,\quad XX^\top = U\Sigma^2 U^\top $$

つまり SVD の特異値 $\sigma_i$ は $X^\top X$ の固有値の平方根。 PCA でも実際は SVD を内部で使うことで、 共分散行列を作らずに直接処理しています(数値的に安定)。

概念固有値分解SVD
対象正方行列任意の行列
スカラー値固有値 $\lambda$特異値 $\sigma \ge 0$
関係対称半正定値$\lambda_i = \sigma_i^2$
数値安定性普通高い

🎯 固有値が活きる場面

① PCA でデータ圧縮

110 次元の SSDSE データを 2-3 次元に。 視覚化・後段モデルの高速化。

② スペクトルクラスタリング

グラフラプラシアン $L = D - W$ の小さい固有値の固有ベクトルでクラスタリング。 都道府県を「近隣関係」だけで分類できる。

③ PageRank

Web ページの遷移行列 $A$ の最大固有値に対応する固有ベクトルがランクスコア。

④ 多重共線性検出

SSDSE で $X^\top X$ の最小固有値が $\approx 0$ なら、 「総人口 ≒ 就業者数」のような線形従属関係が潜む。

⑤ 異常検知

PCA で再構成誤差が大きい点を異常値として検出。 沖縄・東京が外れ値として浮上することが多い。

❓ よくある質問

Q1. 固有値が複素数になることは?

非対称行列ではあり得る(例:回転行列)。 統計の共分散行列は対称なので、 必ず実数。 さらに半正定値なので非負。

Q2. eigh と svd は同じ?

標準化済みデータでは関係が深い:$X = U\Sigma V^\top$ なら $X^\top X = V\Sigma^2 V^\top$、 つまり PCA の固有値は SVD の特異値の二乗。 数値安定性は SVD の方が高い。

Q3. 何個の主成分を残すべき?

累積寄与率 80-90%、 スクリープロットの「肘」、 Kaiser 基準(固有値 > 1)など複数の指標を組み合わせる。 SSDSE では上位 3-5 軸でだいたい説明可能。

Q4. なぜ「対称行列の固有ベクトルは直交」?

スペクトル定理による。 これによって PCA の主成分は互いに無相関(直交)になり、 「独立な軸」として解釈できる。

🛠 固有値計算でハマるポイント

🧷 学習チェックリスト

🗺 概念マップ

固有値という 1 つの概念を中心に、 主要な統計・機械学習手法が同心円状に広がっています。 SSDSE-B の都道府県データから出発しても、 道筋が見えやすくなります。

[正方行列 A]
   │
   ├─ 特性方程式 det(A-λI)=0 → 固有値 λ_i
   ├─ 固有ベクトル v_i        → A v_i = λ_i v_i
   │
   ├─ 対称行列 → スペクトル定理 → A = Q Λ Q^T
   │                              │
   │                              ├─ 共分散行列 → PCA
   │                              ├─ ラプラシアン → スペクトルクラスタ
   │                              └─ ヘッシアン → 凸性判定
   │
   └─ 非対称 → 固有値は複素数 → 動的システム / 振動解析

学習順序:行列 → 固有値 → PCA → SVD → スペクトル法 → 深層学習の重み解析。 各ステップで「同じ固有値の概念」が違う顔を見せます。 たとえば PCA では「データの分散」、 スペクトルクラスタでは「グラフの連結度」、 マルコフでは「定常分布」と、 文脈が変わっても核は同じです。

📖 さらに学ぶための文献