[Math for Medical AI: M2.4] 固有値と固有ベクトル — 行列による変換の「本質」を見抜く

目次

TL; DR (要約)

複雑なデータ変換(行列)の「本質」を暴く鍵、それが固有値固有ベクトル
変換されても向きを変えない「不動の軸」と、その「伸縮率」が、AIにデータの要約を教えます。

① 固有ベクトル
(変換の「不動の軸」)

行列で変換しても向きが変わらない特別なベクトル。データの最も重要な「方向性」を示します。

② 固有値
(軸の「重要度」)

固有ベクトルが、変換によってどれだけ伸縮したかを示す値。その軸の「重要度」や「影響力」を表します。

③ 応用
(主成分分析など)

固有値が大きい順に軸(主成分)を選ぶことで、情報の損失を最小限に抑えつつ、データの次元を削減し、本質を抽出します。

固有値と固有ベクトル 行列の変換において、方向が変わらないベクトルが「固有ベクトル」 そのベクトルがどれだけ伸び縮みするかが「固有値」 Av = λv (A:行列、v:固有ベクトル、λ:固有値) 視覚的理解 元のベクトル v 変換後 Av = λv 固有ベクトルは方向不変 固有値は伸縮率 数学的性質 固有値の求め方 det(A – λI) = 0 固有ベクトルの求め方 (A – λI)v = 0 主な応用分野 主成分分析 データの次元削減 重要な方向を抽出 振動解析 構造物の固有振動 共振周波数の計算 画像処理 顔認識システム 特徴量抽出 機械学習 スペクトラル法 グラフ解析 具体例(2×2行列) A = [2 1] [0 3] 固有値: λ₁ = 2, λ₂ = 3 固有ベクトル: v₁ = [1, 0], v₂ = [1, 1] (正規化前) 固有値・固有ベクトルは線形代数の核心概念で、多くの工学・科学分野で活用されています

この章の学習目標と前提知識

この章の学習目標 前提となる知識
  • 固有値・固有ベクトルを「行列による変換の不動の軸と、その伸縮率」として直感的に理解する。
  • 中心的な方程式 `Av = λv` の各要素が何を意味するかを説明できるようになる。
  • なぜ固有値・固有ベクトルが重要なのか、その応用例である主成分分析(PCA)における役割を学ぶ。
  • PCAが共分散行列の固有値分解によって、データの「最も重要な軸」を見つけ出すプロセスを理解する。
  • NumPyを使って、行列の固有値・固有ベクトルを計算する基本的なコードを実装できるようになる。
  • 行列とベクトルの基本的な役割
    行列がベクトルに作用して「変換」を起こす、という基本的なイメージを持っていること。(前回の内容)
  • (推奨) PythonとNumPyの基礎知識
    `np.array`などで配列を作成し、簡単な操作ができると、コードの理解が深まります。
  • (推奨) 分散と相関の概念
    データの「ばらつき」や「関係性」を示す指標であるという、ごく基本的な理解があるとスムーズです。
  • 複雑な数学的証明の知識は不要です。「変換の軸」という直感的な理解を目標とします。

行列という「変換器」が、ベクトルを様々な方向へ動かしてしまう様子を見てきましたね。まるで空間全体をかき混ぜるような、複雑な動きです。でも、どんなに複雑な変換の中にも、その変換の「中心となる軸」や「本質的な流れ」のようなものが隠れているとしたら、知りたくなりませんか?

この「変換の軸」を理解するのに、地球の自転はとても良い例えだと思います。地球が自転するとき、地表のほとんどの点は円を描いて移動します。しかし、北極点と南極点を結ぶ「地軸」、この軸上の点だけは向きを変えず、その場で回転するだけですよね。この地軸こそが、地球の自転という回転変換における、特別な「軸」なんです。

行列による変換にも、これと全く同じことが起こります。ほとんどのベクトルは向きを変えられてしまうのに、ごく一部の特別なベクトルだけは、向きを変えずに、ただその場で伸び縮みするだけ。この、行列に固有の「不動の軸」となるベクトルを固有ベクトル (Eigenvector) と呼びます。

そして、その固有ベクトルが、変換によってどのくらい伸びたり縮んだりしたのか?その伸縮率を示すスカラー値固有値 (Eigenvalue) です。「Eigen」はドイツ語で「固有の」という意味なので、まさに「その行列に固有のベクトルと、そのベクトルに対する固有の値」というわけです。

一見すると抽象的なこの二つの概念が、なぜAI、特にデータを分析する上でこれほどまでに重要なのでしょうか。今回の講座では、この固有値と固有ベクトルが、複雑な行列の「性格」や「本質」をどのように暴き出すのか、その謎に迫っていきたいと思います。


1. 固有値・固有ベクトルとは? — 変換の「不動の軸」を数式で見る

導入で触れた「不動の軸」というアイデアは、数学の世界では、一つのとてもエレガントな式で表現されます。これこそが、固有値・固有ベク​​トルのすべての関係性を凝縮した、中心的な方程式です。

\[Av = \lambda v\]

この式を理解するために、まずは行列による「変換」の様子を、簡単な図でイメージしてみましょう。

【図】行列 A による変換の様子 変換前 (Before) u v 変換後 (After) Au Av ( = λv ) 行列 A による変換 ベクトル u は向きが変わるが、特別なベクトル v (固有ベクトル) は向きを変えず、 大きさだけが λ 倍 (固有値) になっている。

【図の解説】
左の図には、向きの異なる2つのベクトル \(u\) と \(v\) があります。これらがある行列 \(A\) によって変換されると、右の図のようになるとします。

  • 普通のベクトル (\(u\)): 変換後、\(Au\) は全く違う方向を向いてしまいました。これが一般的なベクトルの振る舞いです。
  • 特別なベクトル (\(v\)): それに対し、\(v\) はどうでしょう。変換後の \(Av\) は、元の \(v\) と同じ直線上、同じ向きを保ったまま、ただ長さだけが変わっています。

この、行列 \(A\) にとって特別なベクトル \(v\) こそが固有ベクトルです。そして、その長さが何倍になったかを示すのが固有値 \(\lambda\) です。

このイメージを頭に置きながら、もう一度、中心的な方程式を見てみましょう。

\[Av = \lambda v\]

この式の登場人物を一人ずつ紹介します。

  • \(A\): 今回の「変換」のルールそのものである正方行列です。左の図を右の図へ変える力を持っています。
  • \(v\): この変換に「抵抗」して向きを変えない、特別なベクトル、すなわち固有ベクトルです。ゼロベクトルは、どんな行列を掛けてもゼロベクトルのままで、向きの概念が意味をなさないため、通常は固有ベクトルとは考えません。
  • \(\lambda\) (ラムダ): これが固有値です。固有ベクトル \(v\) が、変換によって「何倍に伸び縮みしたか」を示す、ただのスカラー値です。
    • もし \(\lambda > 1\) なら、ベクトルは長くなります(図の例)。
    • もし \(0 < \lambda < 1\) なら、ベクトルは短くなります。
    • もし \(\lambda < 0\) なら、ベクトルは向きが正反対になり、その上で伸び縮みします。

この式全体が語っているのは、「固有ベクトル \(v\) に、わざわざ行列 \(A\) を作用させるという複雑な操作をしても、結局は、そのベクトル \(v\) の長さを単純に \(\lambda\) 倍するだけの、驚くほど単純な操作と同じ結果になる」という、行列の隠された「性格」なのです。

この固有ベクトルと固有値のペアは、行列 \(A\) が持つ「変換の癖」や「本質的な作用の方向」を、私たちに教えてくれます。この図の例で言えば、この行列は「ベクトル \(v\) が指し示す方向(固有ベクトル)に、\(\lambda\) 倍(固有値)だけ空間を引き伸ばす力を持っている」という本質が、このシンプルな式によって暴かれているわけです。


2. なぜこれが重要なのか? — データの「本質的な軸」を見つけ出す

固有値と固有ベクトルが、行列の「変換の癖」を教えてくれる、という話をしました。面白いけれど、これが一体、私たちのデータ分析にどう役立つのでしょうか。その答えは、AIにおける極めて重要、かつ実用的な課題である「高次元データの『要約』と『次元削減』」に隠されています。

多すぎる情報という「呪い」

例えば、ある患者さん一人の情報が、検査値や問診、生活習慣、遺伝子情報など1000項目に及ぶとします。これは1000次元のベクトルであり、人間には到底、全体像を直感的に把握できません。さらに厄介なことに、これらの項目には「血糖値とHbA1c」や「収縮期血圧と拡張期血圧」のように、強く相関し、似たような情報を指し示しているものが多く含まれています。この情報の「重複」や「冗長性」こそが、分析を難しくし、モデルの性能を低下させる原因にもなり得るのです。

そこで、こう考えます。「この1000個ものバラバラな指標を、情報の損失をできるだけ抑えながら、もっと少数の『総合指標』にうまく要約できないだろうか?」と。

主成分分析(PCA):データの最も重要な「広がり」を見つける

この問いに、固有値と固有ベクトルは見事な解決策を提示してくれます。まずは、2次元の簡単なデータでそのイメージを掴んでみましょう。

【主成分分析(PCA)のイメージ:データの最も重要な「軸」を見つける】 Step 1: 相関のあるデータ分布 コレステロール値 BMI データの広がり (分散) 特定の方向に大きい 共分散行列の固有値・固有ベクトルを計算 Step 2: 主成分 (新しい軸) の発見 元のy軸 元のx軸 PC1 (第1主成分) (固有値: 大) PC2 (固有値: 小)

【図の解説】

この図は、患者データを「BMI」と「コレステロール値」の2つの特徴でプロットしたものです。データが右肩上がりの楕円形に分布していることから、この2つには相関があることが見て取れますね。

先ほどの図で、さも当たり前のように「最もデータが広がる軸」としてPC1が登場しました。では、コンピュータは一体どうやってこの魔法のような軸を見つけ出しているのでしょうか。その計算プロセスは、大きく分けて3つのステップに分かれています。少しだけ、その中身を覗いてみましょう。

「主成分」の正体:固有値・固有ベクトルは、どうやってデータの「軸」になるのか?

さて、先ほどの図では、まるで魔法のように、データが最も広がっている方向にピッタリと沿った軸(PC1)が登場しました。でも、もちろんこれは魔法ではありません。コンピュータは、ある決まった数学的な手順を踏むことで、この「最も重要な軸」を論理的に見つけ出しているのです。

では、一体どのような計算がその裏側で行われているのでしょうか?その秘密を解き明かすための旅に、少しだけお付き合いください。このプロセスは、大きく分けて次の3つのステップで構成されています。


【主成分分析(PCA)の計算プロセス】

[Step 1: 関係性の要約]
  │   患者データセット(例:BMIとコレステロール値)の
  │   「ばらつき」と「相関」を一つの行列に凝縮する。
  │   → 『共分散行列』の作成
  ▼
[Step 2: 本質の抽出]
  │   作成した共分散行列が、どの方向に、どれくらいの強さで
  │   データを広げようとしているのか、その「性格」を暴く。
  │   → 『固有値分解』の実行 (固有値と固有ベクトルを求める)
  ▼
[Step 3: 軸の選択]
  │   求まった固有値(軸の重要度)を大きい順に並べ、
  │   最も重要な軸(主成分)を決定する。
  │   → 主成分の選択と次元削減
主成分分析 (PCA) の計算プロセス Step 1: データの関係性を行列化 患者データ 共分散行列 Σ (データの広がりと相関の設計図) Step 2: 行列の「本質」を抽出 共分散行列 Σ 固有値分解 「Σv = λv」を解く 固有ベクトル v (変換の「軸」の方向) + 固有値 λ (軸の「重要度」) Step 3: 「重要度」順に軸を選ぶ 固有値 λ が大きい順に、対応する固有ベクトル v を並べる 1. λ₁ (最大)v₁ = PC1 (第一主成分) ★ 最重要 2. λ₂ (次点)v₂ = PC2 (第二主成分)

この3つのステップを順番に見ていくことで、「データのばらつき」という直感的な概念が、なぜ「共分散行列の固有値・固有ベクトル」という数学的な話に結びつくのか、そのカラクリが見えてくるはずです。私たちの「BMIとコレ-ステロール値」の架空データを使って、このプロセスを一緒に辿ってみましょう。


Step 1: データの「関係性」を行列に凝縮する(共分散行列の計算)

さて、主成分分析(PCA)の冒険、最初のステップです。ここでの目的は、手元にある患者データセット(例:BMIとコレステロール値)が持つ「性格」を、たった一つの行列にギュッと凝縮すること。AIが扱いやすいように、データの情報を要約してあげる作業ですね。

データの「性格」とは、一体何でしょうか?それは大きく分けて2つあります。

  1. 分散 (Variance): 各項目(例:BMIだけ)が、平均値からどれくらい散らばっているか。値のばらつきの大きさです。
  2. 共分散 (Covariance): 2つの項目(例:BMIとコレステロール値)が、互いにどのような関係で動くか。片方が増えたらもう片方も増えるのか、それとも減るのか、といった傾向です。

この2種類の情報をまとめたものが、共分散行列 (Covariance Matrix) と呼ばれるものです。記号ではよく \( \Sigma \) (大文字のシグマ) が使われます。まさに、データの「ばらつき」と「相関」の全体像を示す設計図のような存在です。

では、この共分散行列は具体的にどうやって計算されるのでしょうか。そのプロセスを、順を追って見ていきましょう。

準備:データのお化粧「中心化」

本格的な計算に入る前に、一つだけ大切な下準備があります。それは、各データ項目の平均値が0になるように、すべてのデータから平均値を引き算しておくこと。この操作を中心化 (Centering) と呼びます。

なぜこんなことをするかというと、話の基準点を「原点(0, 0)」に揃えるためです。こうすることで、データの「位置」という要素を無視して、純粋に「ばらつきの形」や「傾き」だけに集中して分析できるようになります。いわば、分析のためのお化粧のようなものですね。

分散と共分散の計算

データが中心化されたら、いよいよ分散と共分散を計算します。それぞれの数式と、その直感的な意味を見ていきましょう。

分散:一つの軸上での「広がり」
分散は、データの散らばり具合を示す最も基本的な指標です。計算式は以下の通りです。

\[ \sigma_x^2 = \text{Var}(X) = \frac{1}{N-1} \sum_{i=1}^{N} (x_i – \bar{x})^2 \]

  • \(\sigma_x^2\) または \(\text{Var}(X)\) : 変数Xの分散を表します。
  • \(N\): 患者数(データ点の総数)です。
  • \(x_i\): i番目の患者さんのXの値(例:BMI)です。
  • \(\bar{x}\): Xの平均値です(中心化後は0になっています)。
  • \(\sum\): 全患者分(i=1からNまで)を合計するという意味です。

この式がやっていることは、「各患者の(平均からの)ズレを二乗し、それらを合計して、最後にデータの個数(N-1)で割って平均する」という操作です。(※統計学的には、標本分散を計算する際はN-1で割るのが一般的ですが、Nで割る定義でも本質は変わりません)ズレを二乗することで、プラス方向のズレもマイナス方向のズレも、等しく「散らばり」として扱えるのがポイントです。

共分散:「二つの軸の関係性」
共分散は、2種類のデータが一緒に動く傾向を示します。計算式は分散とよく似ています。

\[ \sigma_{xy} = \text{Cov}(X, Y) = \frac{1}{N-1} \sum_{i=1}^{N} (x_i – \bar{x})(y_i – \bar{y}) \]

  • \(\sigma_{xy}\) または \(\text{Cov}(X, Y)\): 変数Xと変数Yの共分散を表します。

分散が「ズレの二乗」だったのに対し、共分散は「XのズレとYのズレの掛け算」を平均しています。この「掛け算」が、関係性を明らかにする鍵です。


【共分散の符号が意味するもの(中心化データの場合)】

患者A: BMI(+) × Chol(+) = 正の値 → 右肩上がりの傾向に貢献
患者B: BMI(-) × Chol(-) = 正の値 → 右肩上がりの傾向に貢献
患者C: BMI(+) × Chol(-) = 負の値 → 右肩下がりの傾向に貢献

→ 全患者で平均した結果...
   正の値が大きい: 全体として右肩上がり(正の相関)
   負の値が大きい: 全体として右肩下がり(負の相関)
   0に近い: 特に目立った傾向なし(無相関)

このように、共分散の符号と大きさは、2つの変数がどのような関係にあるかを教えてくれる優れた指標なのです。

共分散行列の完成

さあ、材料は揃いました。あとは、計算した分散と共分散を、決められたルールに従って2×2の行列に並べるだけです。

\[ \Sigma = \begin{pmatrix} \text{Var(BMI)} & \text{Cov(BMI, Chol)} \\ \text{Cov(Chol, BMI)} & \text{Var(Chol)} \end{pmatrix} \]

  • 対角成分(左上から右下): 各変数の「分散」が入ります。自分自身との関係性、つまり、ばらつき具合です。
  • 非対角成分(右上と左下): 変数間の「共分散」が入ります。なお、Cov(BMI, Chol)とCov(Chol, BMI)は同じ値になるため、この行列は必ず対称な形(対称行列)になります。

それでは、私たちの架空データで、これらの値を計算した結果が次のようになったと仮定しましょう。

  • Var(BMI) = 25
  • Var(Chol) = 169
  • Cov(BMI, Chol) = 60

これらの数値を当てはめると、最終的な共分散行列が完成します。

\[ \Sigma = \begin{pmatrix} 25 & 60 \\ 60 & 169 \end{pmatrix} \]

どうでしょうか。患者さんの生データという、扱いにくかった情報のカタマリが、たった4つの数字で構成される一つの行列に、その本質を保ったまま凝縮されました。この行列こそが、私たちのデータが描く「楕円の形」を完全に表現した設計図であり、次のステップで固有値分解という「X線検査」にかけることで、その内部構造(=主成分)を明らかにしていくのです。

Step 2: 行列の「本質」を抜き出す (固有値分解)

さて、Step 1で私たちの手元には、データの「ばらつき」と「相関」がギュッと凝縮された設計図、共分散行列\(\Sigma\)が用意できました。ここからが、いよいよ本番です。この設計図をX線検査にかけるように、その内部に秘められた「本質的な構造」を暴き出していきましょう。この検査の役割を果たすのが、固有値分解と呼ばれる操作です。

固有値分解とは、一言でいえば、中心的なあの方程式、

\[\Sigma v = \lambda v\]を解くことに他なりません。思い出してみてください。この式は「行列\(\Sigma\)という変換器が持つ、不動の軸(固有ベクトル\(v\))と、その軸方向への伸縮率(固有値\(\lambda\))を見つけ出す」という意味を持っていましたよね。

共分散行列は、データの広がり方を決める「変換器」そのものです。ということは、

  • 共分散行列\(\Sigma\)の固有ベクトル\(v\)は、データが最も広がる「方向」、つまりデータ分布の楕円の軸の向きを示すはずです。
  • そして、その固有値\(\lambda\)は、その軸の方向への「広がりの強さ(分散の大きさ)」、すなわち、その軸の「重要度」を示すはずなのです。

この関係性こそが、PCAの核心です。では、どうやってコンピュータはこの方程式を解いているのでしょうか。その秘密の扉を、少しだけ開けてみましょう。

特性方程式:固有値を見つけるための「鍵」

いきなり\(\lambda\)と\(v\)を同時に見つけるのは難しいので、まずは\(\lambda\)だけを見つける方法を考えます。先ほどの中心的な方程式を、少しだけ変形してみます。

\[ \Sigma v = \lambda v \quad \rightarrow \quad \Sigma v – \lambda v = 0 \quad \rightarrow \quad (\Sigma – \lambda I)v = 0 \]

ここで、\(I\)は単位行列(対角成分が1で、他は0の行列)です。スカラー値である\(\lambda\)を行列の計算に組み込むための、お作法のようなものだと思ってください。さて、この最後の式\((\Sigma – \lambda I)v = 0\)をじっと眺めてみてください。これは「ある行列(\(\Sigma – \lambda I\))をベクトル\(v\)に掛けたら、結果がゼロベクトルになった」と言っています。

この方程式には、\(v\)がゼロベクトル(\(v=0\))なら必ず成り立つ、という自明な解があります。しかし、私たちが探しているのは「軸の方向」なので、ゼロベクトルではない、意味のある解\(v\)が欲しいのです。そして、数学の世界には「この方程式がゼロベクトル以外の解を持つためには、行列(\(\Sigma – \lambda I\))の逆行列が存在してはならない」という、とても重要なルールがあります。

逆行列が存在しない、ということは、その行列の「行列式(\(\det\))」が0になる、ということと同義でしたね(0.2.3節参照)。この条件を利用して得られるのが、固有値を見つけるための「鍵」となる、以下の特性方程式です。

\[ \det(\Sigma – \lambda I) = 0 \]

この式にはもう\(v\)が登場しません。\(\lambda\)だけの方程式になっているのがポイントです。これを解けば、固有値\(\lambda\)が見つかる、というわけです。

具体的な計算プロセス

それでは、私たちの架空の共分散行列を使って、実際に計算してみましょう。Step 1で作った行列は少し計算が複雑になるので、ここでは計算が綺麗になる、次のような共分散行列\(\Sigma\)が得られたと仮定して話を進めます。

\[ \Sigma = \begin{pmatrix} 13 & 4 \\ 4 & 7 \end{pmatrix} \]

この行列を特性方程式に当てはめてみましょう。

\[ \det \left( \begin{pmatrix} 13 & 4 \\ 4 & 7 \end{pmatrix} – \lambda \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix} \right) = 0 \]

\[ \det \begin{pmatrix} 13-\lambda & 4 \\ 4 & 7-\lambda \end{pmatrix} = 0 \]

2×2行列の行列式は \((ad – bc)\) で計算できましたね。なので、

\[ (13-\lambda)(7-\lambda) – (4)(4) = 0 \]

\[ 91 – 13\lambda – 7\lambda + \lambda^2 – 16 = 0 \]

\[ \lambda^2 – 20\lambda + 75 = 0 \]

見慣れた\(\lambda\)に関する二次方程式になりました。これを因数分解すると、

\[ (\lambda – 15)(\lambda – 5) = 0 \]

となり、この方程式の解は \(\lambda_1 = 15\) と \(\lambda_2 = 5\) であることがわかります。これが、この共分散行列が持つ2つの固有値の正体です。これらは魔法の数字ではなく、特性方程式という数学的な手続きから、ただ一つに定まる値なのです。

次に、見つかった固有値を使って、それぞれの相棒である固有ベクトルを探します。元の式\((\Sigma – \lambda I)v = 0\)に、まずは\(\lambda_1 = 15\)を代入してみましょう。

\[ \left(\begin{pmatrix} 13 & 4 \\ 4 & 7 \end{pmatrix} – 15 \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix}\right) \begin{pmatrix} v_x \\ v_y \end{pmatrix} = \begin{pmatrix} 0 \\ 0 \end{pmatrix} \]

\[ \begin{pmatrix} -2 & 4 \\ 4 & -8 \end{pmatrix} \begin{pmatrix} v_x \\ v_y \end{pmatrix} = \begin{pmatrix} 0 \\ 0 \end{pmatrix} \]

これを連立方程式に書き直すと、\(-2v_x + 4v_y = 0\) となります(2行目の式も、整理すると同じ意味になります)。この式は、\(v_x = 2v_y\)という関係を示しています。この関係を満たすベクトルなら、例えば\((v_x, v_y) = (2, 1)\)や\((4, 2)\)など、どれもが固有ベクトルです。通常は、長さを1に正規化したベクトルを代表として使います。

同様に、\(\lambda_2 = 5\)を代入して計算すると、固有ベクトルは\((v_x, v_y) = (1, -2)\)の方向を持つことがわかります。

これで、ついに共分散行列の「本質」が明らかになりました。

【固有値分解の結果】

  • ペア1: 固有値 \(\lambda_1 = 15\) (大きい方) と、それに対応する固有ベクトル \(v_1\) (方向 \(\approx (0.89, 0.45)\) )
  • ペア2: 固有値 \(\lambda_2 = 5\) (小さい方) と、それに対応する固有ベクトル \(v_2\) (方向 \(\approx (0.45, -0.89)\) )

この結果が教えてくれるのは、私たちのデータが持つばらつきは、主に\(v_1\)が指し示す方向に、強さ「15」で広がっており、それに直交する\(v_2\)の方向には、強さ「5」で広がっている、ということです。これで、次のステップでどの軸を選ぶべきか、もうお分かりですね。


Step 3: 「重要な軸」の選択と次元削減

お疲れ様でした。Step 2までの少しハードな計算を経て、私たちの手元には、共分散行列の「本質」を示す、固有値と固有ベクトルのペアが揃いました。いよいよ、この冒険も最終ステップです。ここでの作業は、驚くほどシンプルですよ。

思い出してください。私たちの目標は、データの情報をできるだけ失わずに、より少ない「総合指標」でデータを要約することでした。そして、固有値分解の結果、私たちは次のことを知りました。

  • 固有ベクトル \(v\): データの広がりを示す「新しい軸の方向」。
  • 固有値 \(\lambda\): その軸の方向への「広がりの強さ」、すなわち、その軸の「重要度」

となれば、やるべきことは一つです。求まった固有値を大きいものから順に並べ、その順番で対応する固有ベクトルを新しい軸として採用するのです。

Step 2の計算例では、\(\lambda_1 = 15\) と \(\lambda_2 = 5\) という2つの固有値が得られましたね。当然、大きい方の\(\lambda_1=15\)がより重要です。したがって、

  • 第一主成分 (PC1): 最も大きい固有値\(\lambda_1=15\)に対応する固有ベクトル\(v_1\)の方向を、最も重要な新しい軸とする。
  • 第二主成分 (PC2): 2番目に大きい固有値\(\lambda_2=5\)に対応する固有ベクトル\(v_2\)の方向を、2番目に重要な新しい軸とする。

という順番が決まります。そういうわけで、最初の図でPC1の軸がデータの広がりと見事に一致していたのは、決して偶然ではないのです。固有値分解というプロセスが、「データの分散(広がり)が最大になる方向は、最大固有値を持つ固有ベクトルの方向である」ということを、数学的に保証してくれているからなんですね。

寄与率:その軸は、どれだけ「重要」か?

「重要度」という言葉を使いましたが、それを具体的に数値で表すのが寄与率 (Contribution Ratio) です。これは、「データが持つ全情報(全分散)のうち、その主成分がどれだけの割合を説明しているか」を示す指標で、計算はとても簡単です。

\[ \text{寄与率} = \frac{\text{特定の主成分の固有値}}{\text{すべての固有値の合計}} \]

私たちの例で、PC1の寄与率を計算してみましょう。

\[ \text{PC1の寄与率} = \frac{\lambda_1}{\lambda_1 + \lambda_2} = \frac{15}{15 + 5} = \frac{15}{20} = 0.75 \quad (75\%) \]

この「75%」という数字は、非常に強力なメッセージを持っています。これは、「元のデータが持っていた情報の75%は、たった一つの軸であるPC1の方向に乗っている」ということを意味します。つまり、元の2次元データ(BMIとコレステロール値)を、PC1という1次元の軸に要約(次元削減)しても、情報量の75%は維持できる、というわけです。

これがもし1000次元の臨床データで、上位5つの主成分だけで寄与率の合計(累積寄与率)が95%に達したとしたらどうでしょう?1000個ものバラバラな数値を眺める代わりに、たった5つの「総合スコア」を見るだけで、データの本質の95%を理解できることになります。これこそが、次元削減の威力なのです。

次元削減のイメージ:2次元から1次元へ 元の2次元データ 特徴1 (例:BMI) 特徴2 (例:Chol) 主成分軸 (PC1) 正射影 1次元データに変換 主成分スコア 各データ点を、最も情報が乗っているPC1軸に「正射影」することで、 各点の新しい「1次元の座標値」(主成分スコア)が得られる。

この強力さこそ、PCAが今なおデータサイエンスの様々な場面で「まず試してみるべき手法」として信頼され続けている理由なんですね。固有値・固有ベクトルを計算するという操作は、高次元データという深い霧の中に隠れている「本質的な構造」や「情報のハイウェイ」を見つけ出すための、非常に強力な羅針盤として機能するのです。

3. 「本質の軸」の威力:医療とAIを支える応用例

固有値や主成分分析と聞くと、抽象的な理論に聞こえるかもしれませんが、その応用範囲は驚くほど広く、私たちの身の回りのテクノロジーや最先端の医療研究を支えています。ここでは、代表的な3つの例を少し深く掘り下げて、その強力さを体感してみましょう。

a) ゲノムデータ解析:2万次元の霧の中から、がんの正体を見抜く

ある研究者が、何百もの「がん組織」から遺伝子発現データを取得したとします。一つの組織サンプルに対し、2万個もの遺伝子がそれぞれどのくらい活発に働いているか、というデータです。これは、AIにとっては2万次元というとてつもなく高次元なデータであり、まるで深い霧の中にいるようで、人間がそのまま眺めても、どのサンプルがどのタイプのがんなのか、見分けることは不可能です。

ここに主成分分析(PCA)を適用すると、この2万次元の霧を晴らす「特別な視点」を見つけ出してくれます。

【ゲノムデータ解析におけるPCAの威力】 PCA適用 Before: 20,000次元のデータ (深い霧の中) ? (可視化・解釈が困難) After: PCAによる2次元への次元削減 (霧が晴れ、本質が見える) PC1 (第一主成分) PC2 (第2主成分) 予後良好群 予後不良群 (2つの総合指標で、患者の集団が明瞭に)

PCAは、2万個あった遺伝子という軸を、情報の損失を最小限に抑えながら、全く新しい「総合的な軸(主成分)」へと変換します。そして、最も情報量が多い2つの軸(PC1PC2)だけを使ってデータをプロットし直すと、上の図のように、それまで見えなかった「予後良好なサブタイプ」と「予後不良なサブタイプ」のクラスターが、くっきりと分かれて現れることがあるのです。これは、臨床的な予後や治療反応性に関連する、本質的な生物学的差異を捉えた結果と言えるかもしれません。2万次元の霧の中から、意味のある構造を掘り出した瞬間です。

b) 固有顔 (Eigenface):顔の「基本となる部品」を抽出する

次は、少し趣向を変えて、顔認識の古典的な例「固有顔(Eigenface)」を見てみましょう。これは「たくさんの顔写真データから、”顔らしさ”を構成する本質的な要素は何か?」という問いに、固有値・固有ベクトルが答える、という話です。

【固有顔 (Eigenface) による顔の再構成】 平均顔 (ベース) + w1 × 固有顔_1 (笑顔成分) + w2 × 固有顔_2 (輪郭成分) + = 新しい顔 (再現)

まず、大量の顔写真から、ピクセルごとの輝度値を平均して、ぼんやりとした「平均顔」を作成します。次に、各顔写真と平均顔との「差分」を分析し、その差分(バリエーション)の主要なパターンをPCAで抽出します。このパターンこそが「固有顔」です。

固有顔は、あるものは「笑顔っぽさ」、あるものは「輪郭の丸み」、あるものは「眼鏡っぽさ」といった、顔を構成する本質的な要素(主成分)を捉えていると解釈できます。そして、どんな人の顔でも、この「平均顔」に、いくつかの「固有顔」を適切な重み(w1, w2, ...)で足し合わせることで、近似的に再現できてしまうのです。

これは、少ない情報で顔を表現できるため、データ圧縮や顔認識に応用されました。同様の考え方は、例えば、特定の疾患に見られる特徴的な顔貌変化の定量化や、画像診断における「典型的な病変パターン」の抽出などにも応用できる可能性があります。

c) PageRank:「権威」の正体を暴く

最後に、医療から少し離れますが、皆さんが日常的に使うGoogle検索の初期の根幹をなしたPageRankアルゴリズムも、実は固有ベクトルの考えに基づいています。「良いページは、他の良いページからたくさんリンクされているはずだ」という、非常にシンプルなアイデアです。


【PageRankの概念】
「重要度」は伝播する

      権威のあるサイトA (高ランク)
       ↓         ↘
      サイトB     サイトC (Aからリンクされ、ランク上昇)
       ↑           ↓
      サイトD     サイトE (Cからリンクされ、さらにランク上昇)

この「各ページの重要度は、そのページにリンクしている他のページの重要度によって決まる」という、自己言及的な関係性を、ウェブ全体のリンク構造(巨大な行列)に対する数式で表現します。そして、この数式を解くと、それはまさに行列の固有ベクトルを求める問題に行き着くのです。最大の固有値に対応する固有ベクトルが、全ページのランクを一度に示してくれます。

この「重要度は、他からの参照によって決まる」という考え方は、医療論文の引用関係の分析における影響力の大きい論文の特定や、タンパク質間の相互作用ネットワークにおける中心的な役割を果たすタンパク質の同定など、多くの分野で応用されています。

Python (NumPy)での計算

NumPyを使えば、固有値と固有ベクトルは簡単に計算できます。


# NumPyの線形代数モジュールをインポートします
import numpy as np
from numpy.linalg import eig

# 2x2の正方行列を定義します
A = np.array([
    [4, 2],
    [1, 3]
])

# 固有値と固有ベクトルを計算します
# eig()関数は、(固有値の配列, 固有ベクトルの行列) のタプルを返します
eigenvalues, eigenvectors = eig(A)

print("--- 固有値 (λ) ---")
print(eigenvalues)
print("\n")

print("--- 固有ベクトル (v) ---")
# 各列が、対応する固有値の固有ベクトルになります
print(eigenvectors)
print("\n")

# --- 検算 ---
# 1番目の固有値と固有ベクトルを取り出します
lambda_1 = eigenvalues[0]
v_1 = eigenvectors[:, 0] # 1列目のベクトルを抽出

# Av = λv が成り立つか確認します
# 左辺: A @ v
left_side = A @ v_1
# 右辺: λ * v
right_side = lambda_1 * v_1

print("--- 検算:Av = λv ---")
print(f"左辺 (A @ v) の結果: {left_side}")
print(f"右辺 (λ * v) の結果: {right_side}")
# 2つの結果がほぼ一致していることがわかります

▼上記コードの実行結果


--- 固有値 (λ) ---
[5. 2.]

--- 固有ベクトル (v) ---
[[ 0.89442719 -0.70710678]
 [ 0.4472136   0.70710678]]

--- 検算:Av = λv ---
左辺 (A @ v) の結果: [4.47213595 2.23606798]
右辺 (λ * v) の結果: [4.47213595 2.23606798]

まとめ:行列の「性格」を読み解く

  • 固有ベクトルは、行列による変換を受けても向きが変わらない、その行列に固有の「軸」となるベクトルです。
  • 固有値は、その軸の方向に、固有ベクトルが何倍に伸縮するかを示す値です。
  • この2つの組み合わせは、複雑な行列変換の「本質的な作用」を明らかにし、次元削減(主成分分析など)のような強力なデータ分析手法の基礎となります。

固有値と固有ベクトルを理解することは、行列という変換器の「性格」を読み解き、高次元データに潜む本質的な構造を見抜くための、非常に重要な視点を与えてくれます。

線形代数の探検はここで一段落です。次回からは、AIの「学習」そのものを司る、数学のもう一つの柱、「0.3: 微分」の世界へと進んでいきます。


参考文献

  1. Strang G. Introduction to Linear Algebra. 5th ed. Wellesley, MA: Wellesley-Cambridge Press; 2016. Chapter 6.
  2. Deisenroth MP, Faisal AA, Ong CS. Mathematics for Machine Learning. Cambridge, UK: Cambridge University Press; 2020. Chapter 5.
  3. Goodfellow I, Bengio Y, Courville A. Deep Learning. Cambridge, MA: MIT Press; 2016. Chapter 2.
  4. Jolliffe IT. Principal Component Analysis. 2nd ed. Springer; 2002.
  5. Page L, Brin S, Motwani R, Winograd T. The PageRank citation ranking: Bringing order to the web. Stanford InfoLab; 1999.

ご利用規約(免責事項)

当サイト(以下「本サイト」といいます)をご利用になる前に、本ご利用規約(以下「本規約」といいます)をよくお読みください。本サイトを利用された時点で、利用者は本規約の全ての条項に同意したものとみなします。

第1条(目的と情報の性質)

  1. 本サイトは、医療分野におけるAI技術に関する一般的な情報提供および技術的な学習機会の提供を唯一の目的とします。
  2. 本サイトで提供されるすべてのコンテンツ(文章、図表、コード、データセットの紹介等を含みますが、これらに限定されません)は、一般的な学習参考用であり、いかなる場合も医学的な助言、診断、治療、またはこれらに準ずる行為(以下「医行為等」といいます)を提供するものではありません。
  3. 本サイトのコンテンツは、特定の製品、技術、または治療法の有効性、安全性を保証、推奨、または広告・販売促進するものではありません。紹介する技術には研究開発段階のものが含まれており、その臨床応用には、さらなる研究と国内外の規制当局による正式な承認が別途必要です。
  4. 本サイトは、情報提供を目的としたものであり、特定の治療法を推奨するものではありません。健康に関するご懸念やご相談は、必ず専門の医療機関にご相談ください。

第2条(法令等の遵守)
利用者は、本サイトの利用にあたり、医師法、医薬品、医療機器等の品質、有効性及び安全性の確保等に関する法律(薬機法)、個人情報の保護に関する法律、医療法、医療広告ガイドライン、その他関連する国内外の全ての法令、条例、規則、および各省庁・学会等が定める最新のガイドライン等を、自らの責任において遵守するものとします。これらの適用判断についても、利用者が自ら関係各所に確認するものとし、本サイトは一切の責任を負いません。

第3条(医療行為における責任)

  1. 本サイトで紹介するAI技術・手法は、あくまで研究段階の技術的解説であり、実際の臨床現場での診断・治療を代替、補助、または推奨するものでは一切ありません。
  2. 医行為等に関する最終的な判断、決定、およびそれに伴う一切の責任は、必ず法律上その資格を認められた医療専門家(医師、歯科医師等)が負うものとします。AIによる出力を、資格を有する専門家による独立した検証および判断を経ずに利用することを固く禁じます。
  3. 本サイトの情報に基づくいかなる行為によって利用者または第三者に損害が生じた場合も、本サイト運営者は一切の責任を負いません。実際の臨床判断に際しては、必ず担当の医療専門家にご相談ください。本サイトの利用によって、利用者と本サイト運営者の間に、医師と患者の関係、またはその他いかなる専門的な関係も成立するものではありません。

第4条(情報の正確性・完全性・有用性)

  1. 本サイトは、掲載する情報(数値、事例、ソースコード、ライブラリのバージョン等)の正確性、完全性、網羅性、有用性、特定目的への適合性、その他一切の事項について、何ら保証するものではありません。
  2. 掲載情報は執筆時点のものであり、予告なく変更または削除されることがあります。また、技術の進展、ライブラリの更新等により、情報は古くなる可能性があります。利用者は、必ず自身で公式ドキュメント等の最新情報を確認し、自らの責任で情報を利用するものとします。

第5条(AI生成コンテンツに関する注意事項)
本サイトのコンテンツには、AIによる提案を基に作成された部分が含まれる場合がありますが、公開にあたっては人間による監修・編集を経ています。利用者が生成AI等を用いる際は、ハルシネーション(事実に基づかない情報の生成)やバイアスのリスクが内在することを十分に理解し、その出力を鵜呑みにすることなく、必ず専門家による検証を行うものとします。

第6条(知的財産権)

  1. 本サイトを構成するすべてのコンテンツに関する著作権、商標権、その他一切の知的財産権は、本サイト運営者または正当な権利を有する第三者に帰属します。
  2. 本サイトのコンテンツを引用、転載、複製、改変、その他の二次利用を行う場合は、著作権法その他関連法規を遵守し、必ず出典を明記するとともに、権利者の許諾を得るなど、適切な手続きを自らの責任で行うものとします。

第7条(プライバシー・倫理)
本サイトで紹介または言及されるデータセット等を利用する場合、利用者は当該データセットに付随するライセンス条件および研究倫理指針を厳格に遵守し、個人情報の匿名化や同意取得の確認など、適用される法規制に基づき必要とされるすべての措置を、自らの責任において講じるものとします。

第8条(利用環境)
本サイトで紹介するソースコードやライブラリは、執筆時点で特定のバージョンおよび実行環境(OS、ハードウェア、依存パッケージ等)を前提としています。利用者の環境における動作を保証するものではなく、互換性の問題等に起因するいかなる不利益・損害についても、本サイト運営者は責任を負いません。

第9条(免責事項)

  1. 本サイト運営者は、利用者が本サイトを利用したこと、または利用できなかったことによって生じる一切の損害(直接損害、間接損害、付随的損害、特別損害、懲罰的損害、逸失利益、データの消失、プログラムの毀損等を含みますが、これらに限定されません)について、その原因の如何を問わず、一切の法的責任を負わないものとします。
  2. 本サイトの利用は、学習および研究目的に限定されるものとし、それ以外の目的での利用はご遠慮ください。
  3. 本サイトの利用に関連して、利用者と第三者との間で紛争が生じた場合、利用者は自らの費用と責任においてこれを解決するものとし、本サイト運営者に一切の迷惑または損害を与えないものとします。
  4. 本サイト運営者は、いつでも予告なく本サイトの運営を中断、中止、または内容を変更できるものとし、これによって利用者に生じたいかなる損害についても責任を負いません。

第10条(規約の変更)
本サイト運営者は、必要と判断した場合、利用者の承諾を得ることなく、いつでも本規約を変更することができます。変更後の規約は、本サイト上に掲載された時点で効力を生じるものとし、利用者は変更後の規約に拘束されるものとします。

第11条(準拠法および合意管轄)
本規約の解釈にあたっては、日本法を準拠法とします。本サイトの利用および本規約に関連して生じる一切の紛争については、東京地方裁判所を第一審の専属的合意管轄裁判所とします。


For J³, may joy follow you.

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

医師・医学博士・AI研究者・連続起業家
元厚生労働省幹部・ハーバード大学理学修士・ケンブリッジ大学MBA・コロンビア大学行政修士(経済)
岡山大学医学部卒業後、内科・地域医療に従事。厚生労働省で複数室長(医療情報・救急災害・国際展開等)を歴任し、内閣官房・内閣府・文部科学省でも医療政策に携わる。
退官後は、日本大手IT企業や英国VCで新規事業開発・投資を担当し、複数の医療スタートアップを創業。現在は医療AI・デジタル医療機器の開発に取り組むとともに、東京都港区で内科クリニックを開業。
複数大学で教授として教育・研究活動に従事し、医療関係者向け医療AIラボ「Medical AI Nexus」、医療メディア「The Health Choice | 健康の選択」を主宰。
ケンブリッジ大学Associate・社会医学系指導医・専門医・The Royal Society of Medicine Fellow

目次