実務で使えるカーネル密度推定(KDE)入門から応用まで—帯域幅選択と高速化の実践ガイド
カーネル推定とは
カーネル推定(kernel estimation、特にカーネル密度推定: Kernel Density Estimation, KDE)は、確率密度関数や回帰関数を非パラメトリックに推定するための代表的な手法です。母集団の分布形状について特定の母数モデルを仮定せず、観測データの局所的な寄与を重み付けして滑らかな推定量を構築します。統計学・機械学習・信号処理・IT分野の実務では、分布可視化、異常検知、クラスタリング前処理、平均シフトクラスタリング、カーネル回帰など多くの用途で用いられます。
基本的な定義と式
1次元のカーネル密度推定量は、観測値 x1,...,xn に対して以下で定義されます。
f̂(x) = (1 / (n h)) Σ_{i=1}^n K((x - xi) / h)
ここで K はカーネル関数(積分が1になる非負関数)、h > 0 は帯域幅(バンド幅、bandwidth)と呼ばれる平滑化パラメータです。多次元の場合は h^d の係数や帯域幅行列 H を用いて一般化され、一般形は
f̂(x) = (1 / n) Σ_{i=1}^n |H|^{-1/2} K(H^{-1/2}(x - xi))
のようになります。
カーネル関数の種類
- ガウス(Gaussian): K(u) = (1/√(2π)) e^{-u^2/2}(滑らかで無限支持)
- エパネチニコフ(Epanechnikov): K(u) = 3/4 (1 - u^2) for |u| ≤ 1(最適二乗誤差の観点で効率的)
- 一様(Uniform / Rectangular): K(u) = 1/2 for |u| ≤ 1
- 三角形(Triangular)、ビウェイト(Biweight)、トライウィ配(Triweight)など
実務上はカーネル関数の形状は推定精度に対する影響は小さく、最も重要なのは帯域幅 h の選択です。
帯域幅(h)の重要性とバイアス・分散のトレードオフ
帯域幅 h は推定の平滑さを決める主要パラメータです。h が小さい(狭い)と推定量は観測データに敏感になり分散が大きくなります(過学習的、ノイズが多い)。逆に h が大きいと過度に平滑化されバイアスが増え、局所構造を見落とします(アンダーフィッティング)。これがバイアス・分散トレードオフです。
大標本極限(asymptotics)では、1次元の場合、最適な h のオーダーは n^{-1/5} であり、平均二乗誤差(MSE)や平均積分二乗誤差(MISE)を最小化する h は定量的に導かれます。例えばガウスカーネルに対する簡易的な経験則として、Silverman のルールは以下のように与えられます:
h = 1.06 * σ * n^{-1/5}
ここで σ はデータの標準偏差。これは正規分布的な場合に良い初期推定を与えますが、分布の形状や外れ値に対して頑健とは限りません。
帯域幅選択の実務的手法
- 交差検証(Least Squares Cross-Validation, LSCV): MISE に近い尺度をデータから推定して h を選択。
- プラグイン法(plug-in / Sheather-Jones): 密度の高階導関数に基づく最適帯域幅を推定して代入する方法で実務的に良好な性能を示す。
- Silverman のルール、Scott のルール(多次元拡張): 経験則として簡便。
- ローカルバンド幅(variable bandwidth / adaptive KDE): データ密度に応じて帯域幅を変化させる。希薄領域では大きく、密な領域では小さくする。
バウンダリーバイアス(端点問題)と対策
0 やその他の領域端での推定はバイアスが増すことがあります。これはカーネルが領域外のデータに寄与できないためで、代表的な対策は次のとおりです。
- 反射法(reflection): データを境界に対して反転し、境界近傍の寄与を補う。
- 局所線形推定(local linear regression): バイアスを1次で補正することで端点性質が改善される。
- サポートに合わせたカーネルや境界補正を用いる。
カーネル回帰(Nadaraya–Watson 推定)
カーネル法は密度推定だけでなく回帰にも使われます。説明変数と目的変数の関係を非パラメトリックに推定する Nadaraya–Watson 推定量は次の形です:
m̂(x) = Σ K((x - xi)/h) yi / Σ K((x - xi)/h)
ここでも帯域幅の選択が結果を大きく左右します。局所線形回帰は Nadaraya–Watson の改善版としてバイアス低減に有効です。
計算上の課題と高速化
Naive 実装では全点ペアの距離計算が必要で、計算量は O(n^2) になり大規模データには不便です。実務で使われる高速化手法には以下があります。
- グリッド上での畳み込みと高速フーリエ変換(FFT)による近似(主に1次元・低次元)。
- KD-tree / Ball tree に基づく近似近傍探索(高次元でも効率化)。scikit-learn の実装等で利用。
- 高速ガウス変換(Fast Gauss Transform)や近似法(ランダムサンプリング、サブサンプリング)。
- 多次元では次元の呪いに注意(高次元で密度推定はサンプル数が爆発的に必要)。
多次元カーネル推定の注意点
- 次元が増えると必要なサンプルサイズは急増。帯域幅の最適オーダーは h ∝ n^{-1/(d+4)}。
- 帯域幅はスカラーでなく帯域幅行列(対角行列やフル共分散を持つ H)で柔軟に指定可能。
- 可視化のためには主成分や t-SNE 等で次元削減してから 2 次元 KDE を行うことが多い。
IT分野での応用例
- 異常検知: 正常動作時のデータ密度を学習し、低密度領域を異常として検出。
- トラフィック解析: ネットワークパケットサイズやレイテンシの分布把握、季節性・ピーク検出。
- 可視化と前処理: ヒストグラムの平滑代替、クラスタリング(Mean-Shift クラスタリングは KDE に基づく)。
- 画像処理・フィルタ: 統計的カーネル(KDE)と畳み込みカーネルは理論的に関連するが、用途や正規化が異なる(注意が必要)。
- 推薦や密度推定に基づく確率的特徴量の生成。
実装・ライブラリ
- Python: scikit-learn の sklearn.neighbors.KernelDensity、scipy.stats.gaussian_kde、statsmodels.nonparametric。
- R: density()(stats パッケージ)、KernSmooth、ks、np、sm など豊富なパッケージ。
- 大規模データ: 専用の近似アルゴリズムや分散処理フレームワークの活用が必要。
理論的背景と歴史
カーネル密度推定は Rosenblatt(1956)と Parzen(1962)により確立され、その後 Silverman(1986)、Scott(1992)、Wand & Jones(1995)などの著作で理論と実務手法が体系化されました。解析的にはバイアス・分散の導出、最適帯域幅の漸近解析、MISE の最小化などが主要なテーマです。
まとめと実務上の提案
カーネル推定は非パラメトリックで柔軟性が高く、分布の形を仮定できない場面で有効です。ただし「帯域幅の選択」と「次元の呪い」に注意し、データサイズや応用に応じて適切な近似・高速化手法を採ることが重要です。まずは Silverman のルール等で初期値を得て、交差検証やプラグイン法で微調整するワークフローが実務的に有用です。
参考文献
- Kernel density estimation — Wikipedia
- Rosenblatt, M. (1956). Remarks on some nonparametric estimates of a density function. Biometrika
- Parzen, E. (1962). On Estimation of a Probability Density Function and Mode. Annals of Mathematical Statistics
- Silverman, B. W. (1986). Density Estimation for Statistics and Data Analysis
- Wand, M. P., & Jones, M. C. (1995). Kernel Smoothing
- scikit-learn: Kernel density estimation
- SciPy: scipy.stats.gaussian_kde


