SVMのカーネル設計:Mercerの定理・グラム行列の正定値性とRandom Fourier Featuresの理論とPython実装

SVMのカーネルトリックをMercerの定理から掘り下げ、numpy.linalg.eigvalshでグラム行列の正定値性を検証し多項式カーネルの明示的特徴写像との一致を実測。RBFカーネルが無限次元特徴空間に対応することをRandom Fourier Features(Rahimi & Recht)でnumpy実装し近似誤差の収束を確認、sklearn.svm.SVCでハイパーパラメータgammaの過学習・未学習遷移を検証します。

はじめに

https://yuhi-sa.github.io/posts/20260226_svm/1/ ではSVMの基礎理論とカーネルトリックを紹介し、線形・RBF・多項式カーネルを一覧表で示すにとどめていました。しかし「なぜ好き勝手な関数をカーネルとして使えないのか」「RBFカーネルはなぜ無限次元の特徴写像に対応すると言われるのか」という核心には踏み込んでいませんでした。本記事では、Mercerの定理によるカーネルの妥当性判定条件をグラム行列の正定値性から導出し、多項式カーネルの明示的特徴写像を構成して数値的に検証します。さらに、RBFカーネルの無限次元性をRandom Fourier Features(Rahimi & Recht, 2007)という実用的な近似手法で体感し、ハイパーパラメータ \(\gamma\) が汎化性能に与える影響を実験で確認します。

カーネルトリックの復習

https://yuhi-sa.github.io/posts/20260226_svm/1/ で導出したSVMの双対問題では、データは内積 \(\mathbf{x}_i \cdot \mathbf{x}_j\) を通じてのみ現れます。この内積をカーネル関数 \(K(\mathbf{x}_i, \mathbf{x}_j) = \phi(\mathbf{x}_i) \cdot \phi(\mathbf{x}_j)\) に置き換えることで、高次元の特徴写像 \(\phi\) を明示的に計算せずに非線形分類ができます。しかし、任意の2変数関数 \(K(\mathbf{x}, \mathbf{y})\) をこの用途に使えるわけではありません。

Mercerの定理:カーネルの妥当性条件

関数 \(K(\mathbf{x}, \mathbf{y})\) が何らかの特徴写像 \(\phi\) に対して \(K(\mathbf{x}, \mathbf{y}) = \phi(\mathbf{x}) \cdot \phi(\mathbf{y})\) と書ける(=妥当なカーネルである)ための必要十分条件は、任意の有限個のデータ点 \(\{\mathbf{x}_1, \ldots, \mathbf{x}_n\}\) に対して、グラム行列

\[ K_{ij} = K(\mathbf{x}_i, \mathbf{x}_j) \tag{1} \]

が半正定値(すべての固有値が0以上)であることです(Mercerの定理)。直感的には、グラム行列が半正定値であれば、そのグラム行列自体を「特徴ベクトルの内積行列」として解釈できる座標系(固有値分解 \(K = V \Lambda V^\top\) から \(\phi(\mathbf{x}_i) = \sqrt{\Lambda} V_i\) )が必ず存在するためです。

数値実験1:グラム行列の正定値性を直接検証

3次元の乱数データ50点に対し、RBFカーネル・多項式カーネル・そして妥当でないカーネル(\(K(\mathbf{x},\mathbf{y}) = -\|\mathbf{x}-\mathbf{y}\|\) )のグラム行列を計算し、最小固有値を確認しました。

import numpy as np

def rbf_kernel(X, gamma=0.5):
    sq = np.sum(X**2, axis=1)
    D2 = sq[:, None] + sq[None, :] - 2 * X @ X.T
    return np.exp(-gamma * D2)

def poly_kernel(X, degree=2, gamma=1.0, coef0=1.0):
    return (gamma * (X @ X.T) + coef0) ** degree

def invalid_kernel(X):
    sq = np.sum(X**2, axis=1)
    D2 = sq[:, None] + sq[None, :] - 2 * X @ X.T
    return -np.sqrt(np.maximum(D2, 0))  # 負の距離:一般には妥当なカーネルではない
カーネルグラム行列の最小固有値
RBF0.000735 (≥0、妥当)
多項式(次数2)-0.000000 (≥0、妥当)
\(-\|\mathbf{x}-\mathbf{y}\|\) (不正)-108.240144(負、不正)

RBFと多項式カーネルの最小固有値はほぼゼロ以上(浮動小数点誤差の範囲)で半正定値性が確認できました。一方、負の距離をそのままカーネルとして使うと最小固有値が大きく負になり、Mercerの条件を満たさないことが数値的に確認できます(実際、負のユークリッド距離は一般には正定値核ではないことが知られています)。

数値実験2:多項式カーネルの明示的特徴写像

次数2の多項式カーネル \(K(\mathbf{x},\mathbf{y}) = (\gamma\,\mathbf{x}\cdot\mathbf{y} + c)^2\) (\(\mathbf{x},\mathbf{y}\in\mathbb{R}^2\) )を多項定理で展開すると、明示的な6次元特徴写像

\[ \phi(\mathbf{x}) = \left(\gamma x_1^2,\ \gamma x_2^2,\ \sqrt{2}\gamma x_1 x_2,\ \sqrt{2c\gamma}x_1,\ \sqrt{2c\gamma}x_2,\ c\right) \tag{2} \]

が得られます。この写像を使って内積 \(\phi(\mathbf{x})\cdot\phi(\mathbf{y})\) を直接計算し、カーネル関数の値と比較しました。

def explicit_feature_map_deg2(x, gamma, coef0):
    x1, x2 = x
    return np.array([
        gamma * x1**2,
        gamma * x2**2,
        np.sqrt(2) * gamma * x1 * x2,
        np.sqrt(2 * coef0 * gamma) * x1,
        np.sqrt(2 * coef0 * gamma) * x2,
        coef0,
    ])
K(x,y) via kernel formula : 0.0018919198
K(x,y) via <phi(x),phi(y)>: 0.0018919198
abs diff: 3.70e-16

カーネル関数の直接計算と、明示的特徴写像の内積が機械精度で完全一致しました。これは「カーネルトリックが本当に高次元内積のショートカットになっている」ことの直接的な証拠です。

RBFカーネルは無限次元特徴写像に対応する

RBFカーネル \(K(\mathbf{x},\mathbf{y}) = \exp(-\gamma\|\mathbf{x}-\mathbf{y}\|^2)\) は、多項式カーネルのような有限次元の明示的特徴写像を持ちません。これは指数関数をテイラー展開すると

\[ \exp(2\gamma\,\mathbf{x}\cdot\mathbf{y}) = \sum_{k=0}^{\infty} \frac{(2\gamma\,\mathbf{x}\cdot\mathbf{y})^k}{k!} \tag{3} \]

という無限次数の多項式カーネルの正の重み付き和になっているためです(各項 \((\mathbf{x}\cdot\mathbf{y})^k\) はそれ自身が妥当なカーネルであり、正の係数の和もまた妥当なカーネルです)。RBFカーネル自体は \(K(\mathbf{x},\mathbf{y}) = \exp(-\gamma\|\mathbf{x}\|^2)\exp(2\gamma\,\mathbf{x}\cdot\mathbf{y})\exp(-\gamma\|\mathbf{y}\|^2)\) と分解でき、正の対角スケーリングは半正定値性を保つため、RBFカーネル全体も妥当です。

数値実験3:Random Fourier Featuresで無限次元性を体感する

無限次元の特徴写像を厳密に計算することはできませんが、Random Fourier Features(RFF、Rahimi & Recht, 2007)という手法で有限次元にランダム近似できます。Bochnerの定理により、RBFカーネルはランダムな周波数 \(\mathbf{w}\sim\mathcal{N}(0, 2\gamma I)\) とランダムな位相 \(b\sim\text{Uniform}(0,2\pi)\) を使って

\[ K(\mathbf{x},\mathbf{y}) \approx \frac{1}{D}\sum_{i=1}^{D} z_{\mathbf{w}_i,b_i}(\mathbf{x})\, z_{\mathbf{w}_i,b_i}(\mathbf{y}), \qquad z_{\mathbf{w},b}(\mathbf{x}) = \sqrt{2}\cos(\mathbf{w}^\top\mathbf{x}+b) \tag{4} \]

と近似できます(\(D\) 個のランダム特徴を使った \(D\) 次元の明示的特徴写像)。

w = rng.normal(0, np.sqrt(2 * gamma), size=(D, d))
b = rng.uniform(0, 2 * np.pi, size=D)
def rff(X):
    proj = X @ w.T + b
    return np.sqrt(2.0 / D) * np.cos(proj)

5次元データ200組のペアで真のRBFカーネル値と近似値の RMSE を \(D\) を変えて測定しました。

ランダム特徴数 \(D\)RMSE
100.30419
1000.09632
1,0000.03050
10,0000.00966

\(D\) を10倍にするごとにRMSEが約 \(1/\sqrt{10} \approx 0.32\) 倍になっており(モンテカルロ近似の標準的な収束率 \(O(1/\sqrt{D})\) 通り)、有限個のランダム特徴で無限次元カーネルに収束していく様子が定量的に確認できます。RFFはこの原理を使って、カーネルSVMを線形SVM(sklearn.svm.LinearSVCsklearn.linear_model.SGDClassifier)で近似することで、大規模データに対する計算量を \(O(n^2)\) から \(O(n)\) に削減する実用手法(sklearn.kernel_approximation.RBFSampler)としても使われています。

カーネルの構成則:カスタムカーネルの作り方

妥当なカーネルは以下の演算で閉じています(新しいカーネルを作っても妥当性が保たれます)。

  • 正のスカラー倍:\(K\) が妥当なら \(cK\) (\(c>0\) )も妥当
  • :\(K_1, K_2\) が妥当なら \(K_1 + K_2\) も妥当
  • :\(K_1, K_2\) が妥当なら \(K_1 \cdot K_2\) (要素積)も妥当

これを使い、RBFカーネルと多項式カーネルの単純な重み付き和 \(0.5K_{\text{RBF}} + 0.5K_{\text{poly}}\) のグラム行列を検証すると、最小固有値は \(0.000045\) (ほぼゼロ以上)となり、妥当なカーネルであることが確認できました。この構成則は、時系列データに「周期性を捉えるカーネル + トレンドを捉えるカーネル」を組み合わせるなど、ドメイン知識に応じたカスタムカーネル設計の理論的根拠になります(https://yuhi-sa.github.io/posts/20260502_gaussian_process/1/ のガウス過程回帰でも同じ構成則が使われます)。

ハイパーパラメータ γ の効果:未学習から過学習まで

sklearn.datasets.make_moons(ノイズ0.25)で生成した非線形データに対し、\(C=1.0\) を固定して \(\gamma\) を変化させ、sklearn.svm.SVC で訓練・テスト精度とサポートベクター数を測定しました。

\(\gamma\)訓練精度テスト精度サポートベクター数
0.010.8100.833147 / 210
0.10.8380.87895 / 210
1.00.9520.97861 / 210
10.00.9570.98994 / 210
100.00.9810.933189 / 210
1000.01.0000.556210 / 210 (全点)

\(\gamma\) が小さい(0.01)と決定境界が滑らかすぎて訓練データにすら十分適合できない未学習、\(\gamma=10\) 付近でテスト精度が最大(98.9%)となる最適点、\(\gamma=1000\) では訓練精度100%にもかかわらずテスト精度が55.6%まで崩壊する過学習(全210点がサポートベクターになり、各データ点の周りに孤立した鋭いガウス山を作って丸暗記している状態)が明確に観察できます。RBFカーネルの \(\gamma\) は「特徴空間での類似度の減衰の速さ」を制御しており、大きすぎると各点が独立した特徴になり汎化しなくなることが、この実験で定量的に裏付けられます。

関連記事

おすすめ書籍

カーネル法・サポートベクターマシンを含む機械学習の理論的背景を数式で丁寧に解説した定番書です。

※ 上記は Amazon アソシエイトのリンクです。

参考文献

  • Vapnik, V. N. (1998). Statistical Learning Theory. Wiley.
  • Schölkopf, B., & Smola, A. J. (2002). Learning with Kernels. MIT Press.
  • Rahimi, A., & Recht, B. (2007). Random features for large-scale kernel machines. Advances in Neural Information Processing Systems (NeurIPS).
  • Bishop, C. M. (2006). Pattern Recognition and Machine Learning. Springer. Chapter 6 (Kernel Methods).