カーネル法とは?仕組み・カーネル関数の種類・応用をわかりやすく解説
カーネル法とは、データを高次元の特徴空間へ写したうえで線形の手法を適用し、もとの空間では線形分離できない非線形なデータを扱えるようにする機械学習の枠組みです。中心となるのが「カーネルトリック」で、高次元への写像を実際には計算せず、カーネル関数で内積だけを求めることで計算量を抑えます。サポートベクターマシン(SVM)の非線形分類などで広く使われ、カーネル関数にはガウス(RBF)・多項式・シグモイド・線形といった種類があります。本記事ではカーネルトリックの仕組みと関数の使い分けを整理し、正定値性の条件、SVMやカーネル回帰への応用、scikit-learnでの実装までを解説します。
まとめ:カーネルトリックとカーネル関数の種類
先に要点を示します。カーネル法は「高次元へ写してから線形に分ける」発想で、写像を直接計算しない代わりにカーネル関数で内積を求めます。どの関数を選ぶかでモデルの性質が変わります。代表的な4種類を下表にまとめます。
| 種類 | 関数の形 | 向くケース |
|---|---|---|
| 線形カーネル | x⋅x' | 高次元・疎データ(テキスト等) |
| 多項式カーネル | (γx⋅x'+c)^d | 次数dで非線形度を調整 |
| ガウス(RBF) | exp(-γ‖x-x'‖²) | 最も汎用・非線形全般 |
| シグモイド | tanh(γx⋅x'+c) | NN類似・採用は限定的 |
実務でまず試すのはガウス(RBF)カーネルです。データの形を選ばず非線形に対応でき、パラメータγで境界のなめらかさを調整できます。線形分離できる見込みがあるなら線形カーネル、特徴どうしの積を明示したいなら多項式カーネルが向きます。シグモイドカーネルは条件によって正定値性を満たさず、実務での採用は限定的です。以降で、カーネルトリックの仕組みと各関数の使い分け、実装までを詳しく見ていきます。
カーネル法とは:非線形データを線形手法で扱う枠組み
カーネル法は、入力データを写像φによって高次元の特徴空間へ移し、そこで内積を使う線形の手法を適用する考え方です。もとの空間では直線や平面で分けられないデータでも、次元を上げると超平面(線形の境界)で分離できることが多いという性質を利用します。たとえば原点を中心に円状に分布した2クラスのデータは、平面上の直線1本では分けられません。しかし各点の原点からの距離を新しい軸として加えて3次元へ写すと、内側のクラスと外側のクラスは1枚の平面で分けられるようになります。
ここで押さえておきたいのは、カーネル法そのものは単体の予測モデルではなく、既存の線形手法を非線形化するための部品だという点です。分類のサポートベクターマシン(SVM)、回帰のカーネルリッジ回帰、次元削減のカーネルPCA、確率的予測のガウス過程まで、計算が内積の形で書ける手法であれば同じ仕組みで非線形へ拡張できます。機械学習の中でも、少数から中規模のデータで高い精度を狙う場面で長く使われてきた基礎技術です。
カーネルトリックの仕組み:写像を計算せず内積だけを求める
カーネルトリックは、高次元の特徴空間への写像φを陽に計算せず、カーネル関数 k(x, x') = φ(x)とφ(x')の内積 だけを直接求める手法です。SVMの双対形式やリッジ回帰といった多くの線形手法は、入力データを内積⟨x, x'⟩の形でしか使いません。したがって、写像後の高次元ベクトルを実際に作らなくても、対応する内積さえ計算できれば手法を回せます。
具体例で見ます。2次元の点(x₁, x₂)を(x₁², √2·x₁x₂, x₂²)という3次元へ写す多項式写像を考えると、2点の写像後の内積は展開すると(x⋅x')²にきれいに一致します。つまり3次元のベクトルを組み立てなくても、もとの2次元の内積を2乗するだけで同じ値が得られます。この「写像を作らず内積を計算する」近道がカーネルトリックです。
この仕組みには2つの利点があります。1つは、計算量が特徴空間の次元ではなく、データ件数nに依存する点です。全データ対の内積を並べたn×nの行列(グラム行列)さえ作れば計算が進みます。もう1つは、RBFカーネルのように写像先が無限次元になる場合でも、内積は有限の式で求められる点です。次元を直接扱えない特徴空間でも、カーネル関数を通じてなら計算できます。
主要なカーネル関数の種類と使い分け
カーネル関数は、2点がどれだけ似ているかを内積として返す関数です。どれを選ぶかがモデルの表現力と過学習のしやすさを直接左右します。代表的な4種類を、形と向き不向きで整理します。
RBFカーネル(ガウスカーネル):まず試す汎用カーネル
RBFカーネル(ガウスカーネル、radial basis function)は、2点間の距離が近いほど大きな値を返す k(x, x') = exp(-γ‖x-x'‖²) という関数です。写像先は無限次元に相当し、事前知識がなくてもほとんどのデータに対応できるため、SVMで最初に選ばれる標準のカーネルです。パラメータγは各データ点の影響が届く範囲を決めます。γを大きくすると影響範囲が狭まり境界が複雑になって過学習へ傾き、γを小さくすると境界はなめらかになり、極端だと未学習になります。距離ベースで働くため、後述する特徴量の標準化とγの調整が精度を大きく左右します。
多項式カーネル:次数で非線形度を調整
多項式カーネルは k(x, x') = (γx⋅x'+c)^d の形で、次数dを上げるほど高次の特徴の組み合わせ(交互作用)を捉えます。d=1なら線形カーネルと同じ、d=2なら特徴どうしの2次の積まで扱えます。向いているのは、特徴間の積そのものに意味があるとわかっている問題です。ただし次数を大きくすると値が急激に増減して数値的に不安定になりやすく、過学習も招きやすいので、実務ではd=2〜3程度にとどめるのが無難でしょう。定数cは低次項の効き方を調整します。なお、ここでのγはスケール係数で、影響範囲を決めるRBFカーネルのγとは役割が異なります(scikit-learnではどちらもgamma引数ですが意味は別です)。
線形カーネル:高次元・疎データ向き
線形カーネルは k(x, x') = x⋅x' で、写像を行わずもとの内積をそのまま使います。特徴量が数千〜数万次元あり、その時点で線形分離しやすいデータに向きます。代表例が、単語の出現をベクトル化したテキスト分類(BoWやTF-IDF)です。こうした高次元・疎なデータではRBFに切り替えても精度が伸びにくく、線形カーネルのほうが学習が速く過学習も起こしにくいため、まず線形から試すのが定石です。
シグモイドカーネル:採用が限定的な理由
シグモイドカーネルは k(x, x') = tanh(γx⋅x'+c) で、2層のニューラルネットワークに似た振る舞いをします。ただしパラメータγ・cの値によっては後述の正定値性を満たさず、カーネルが有効である条件(Mercer条件)を破ることがあります。この場合は最適化の理論的な保証が崩れ、学習が安定しません。特別な理由がない限りは、まずRBFカーネルを選び、シグモイドカーネルは避けるのが実務的な判断です。
カーネル関数が満たす条件:正定値性とMercerの定理
2変数の関数なら何でもカーネルとして使えるわけではありません。k(x, x')が「ある写像φの内積 φ(x)⋅φ(x') として書ける」ことが、有効なカーネルであるための条件です。これを保証するのがMercerの定理で、関数が対称であり、かつ正定値(任意の有限個のデータ点に対してグラム行列が半正定値、つまり固有値がすべて0以上)であれば、対応する特徴写像が必ず存在するとされます。
実務上の含意は2つあります。1つは、自作のカーネルや独自の類似度関数を使いたいときは、グラム行列の固有値が負にならないかを確認する必要がある点です。RBF・線形・多項式(c≥0)はこの条件を満たしますが、シグモイドは満たさない場合があります。もう1つは、正定値カーネルどうしの和・積・正の定数倍は再びカーネルになるという性質(閉性)です。この性質を使うと、既存のカーネルを組み合わせて問題に合わせた新しいカーネルを設計できます。
カーネル法の主な応用:SVM・カーネル回帰・ガウス過程・カーネルPCA
カーネル法は、内積で書ける線形手法を横断的に非線形化します。代表的な応用を4つ挙げます。
もっとも代表的なのがSVMです。クラス間のマージンを最大化する問題は、双対形式にすると入力が内積の形だけで現れるため、そこをカーネルに置き換えるだけで非線形分類へ拡張できます。マージン最大化は制約付きの二次計画問題であり、数理最適化の枠組みで大域的な最適解が求まる点が、カーネル法の理論的な強みです。
回帰では、リッジ回帰をカーネル化したカーネルリッジ回帰(カーネル回帰)が使われ、非線形な関係を滑らかに当てはめられます。さらにガウス過程回帰は、共分散関数としてカーネルを用いることで、予測値だけでなく予測の不確実性(分散)まで出力できるのが特徴です。次元削減では、主成分分析をカーネル化したカーネルPCAが、直線的でない構造を持つデータの非線形な次元削減に用いられます。いずれも、線形手法の内積部分をカーネルに差し替えるという同じ発想で成り立っています。
scikit-learnでのカーネルSVM実装とγ・Cの調整
カーネル法を実際に動かすなら、Scikit-learnのSVCが手軽です。既定ではRBFカーネルが選ばれ、正則化パラメータC=1.0、gamma='scale'(= 1 / (n_features × X.var()) )で動きます。まずは既定値で当たりを付け、そのうえでCとγをグリッドサーチで調整するのが基本の流れです。
from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import GridSearchCV
from sklearn.pipeline import make_pipeline
# RBFカーネルSVM。特徴の標準化とセットで組む
model = make_pipeline(StandardScaler(), SVC(kernel='rbf', C=1.0, gamma='scale'))
model.fit(X_train, y_train)
# C と gamma を対数グリッドで探索
param_grid = {'svc__C': [0.1, 1, 10, 100],
'svc__gamma': [0.001, 0.01, 0.1, 1]}
grid = GridSearchCV(model, param_grid, cv=5)
grid.fit(X_train, y_train)
print(grid.best_params_)
調整のポイントは2つです。1つはC。Cは誤分類の許容度とマージンの広さのトレードオフを決め、大きくするほど訓練データの誤分類を強く罰して過学習寄りになります。もう1つはγで、前述のとおり境界の複雑さを左右します。この2つを対数スケール(おおむね10⁻³〜10³)のグリッドで同時に探索するのが定石です。加えて、RBFは距離ベースで働くため、特徴量の標準化(StandardScaler)は必須です。スケールを揃えないと、値の大きい特徴だけが距離を支配してしまいます。なお、SVCの学習量はデータ件数nに対しておおむねO(n²)〜O(n³)で増えるため、数万件を超える規模ではLinearSVCや確率的勾配降下法など別の実装を検討します。
カーネル法のメリットと限界:採用が向かない場面
カーネル法のメリットは、複雑な特徴量エンジニアリングを自分で組まなくても、カーネルを選ぶだけで非線形な境界を扱える点です。SVMのように凸最適化として解ける手法では大域的な最適解が得られ、少数から中規模のデータでも安定して高い精度を出しやすいという強みもあります。
一方で限界もはっきりしています。グラム行列はn×nなので、計算量とメモリがデータ件数の2乗で膨らみ、大規模データでは頭打ちになります。さらに、カーネルの選択とC・γといったハイパーパラメータの調整が性能を大きく左右し、その探索にコストがかかります。モデルの解釈性が低い点も、線形モデルや決定木系に比べた弱点です。
これらを踏まえると、次のような場面ではカーネル法(特にRBF-SVM)を第一候補にすべきではありません。第一に、数十万件を超える大規模データでは、学習が現実的な時間で終わらないため、線形モデルや勾配ブースティングが向きます。第二に、テキストのように特徴が既に高次元で線形分離しやすいデータは、線形カーネルやロジスティック回帰で十分なことが多いです。第三に、画像や音声のような大規模で非構造なデータは、畳み込みニューラルネットワークなどの深層学習のほうが適します。なお「カーネル法は線形か非線形か」という問いには、カーネル法自体は線形手法を非線形化する枠組みであり、線形カーネルを使えば線形、RBFなどを使えば非線形になる、と整理できます。
よくある質問
機械学習の「カーネル」は、OSや線形代数のカーネルと同じですか?
同じ言葉ですが意味は別物です。本記事のカーネルは機械学習のカーネル法で使う「カーネル関数」を指します。OS分野の「カーネル」はオペレーティングシステムの中核プログラム、線形代数の「カーネル(核)」は線形写像で0に写る入力の集合(Ax=0の解空間=零空間)を意味します。検索では混同されやすいので、機械学習やSVMの文脈で出てくるカーネルは、ここで説明するカーネル関数のことだと整理してください。
カーネル法は線形ですか、非線形ですか?
カーネル法は、線形の手法をそのまま非線形へ拡張するための枠組みです。したがって使うカーネル関数で性質が変わります。線形カーネルを選べば結果は線形モデルと同じになり、RBFカーネルや多項式カーネルを選べば非線形な境界を表現できます。「非線形なデータを、高次元では線形に扱う」のがカーネル法の考え方なので、線形と非線形のどちらか一方に固定されるものではありません。
カーネル関数はどれを選べばよいですか?
事前知識がなければ、まずRBF(ガウス)カーネルを試すのが定石です。データの形を選ばず非線形に対応でき、多くの問題で無難な精度が出ます。特徴が数千〜数万次元あって既に線形分離しやすいテキスト分類などは線形カーネルが速く適しています。特徴どうしの積に意味があるとわかっている場合は多項式カーネルが候補です。最終的にはCやγを含めてグリッドサーチで比較し、交差検証の精度で選ぶのが確実です。
カーネル密度推定はカーネル法と同じものですか?
名前は似ていますが別の手法です。本記事のカーネル法は、高次元の特徴空間で内積を求めて非線形なパターンを扱う枠組みで、SVMなどの分類・回帰に使います。一方のカーネル密度推定(KDE)は、各データ点に山型の関数(カーネル)を重ねて確率密度分布を推定するノンパラメトリックな統計手法です。どちらも「カーネル」という語を使いますが、目的も計算も異なるため混同しないよう注意してください。
量子カーネル法とは何ですか?
量子カーネル法は、特徴空間への写像と内積の計算を量子回路で行うアプローチです。古典コンピュータでは扱いにくい高次元の特徴写像を量子状態として表現し、量子カーネル推定で内積に相当する値を求めます。古典的なカーネル法と同じく、得られたカーネルをSVMなどに渡して分類します。一部のデータでは古典手法より有利になる可能性が研究されていますが、実用は発展途上の段階です。基本の発想は通常のカーネル法と共通しています。