ガウス過程回帰のカーネル関数の違いについて可視化してみた

データ分析

こんにちは、nissyです。

マテリアルズ・インフォマティクスの業界で有名な明治大学の金子弘昌先生のブログにこのような記事が掲載されていました。

ベイズ最適化のときカーネル関数に線形項を入れると外挿の方向を定めやすい
分子設計・材料設計・プロセス設計・プロセス管理において、分子記述子・実験条件・合成条件・製造条件・評価条件・プロセス条件・プロセス変数などの特徴量 x と分子・材料の物性・活性・特性や製品の品質などの目的変数 y との間で数理モデル y =

私は金子先生が執筆された著書を活用して勉強してきましたが、今の今までガウス過程回帰のカーネル関数の違いについて深く考えてきませんでした。

この機会にカーネル関数の違いによるモデルの振る舞いについてどのような違いがあるのか
興味を持ったので、私なりに検証してみたいと思います。

この記事のコードは金子先生の著書を参考にしております。

 

 

金子先生の記事の要点

まず金子先生のブログの要点についてまとめます。

  • 外挿領域の探索方法としてベイズ最適化が存在し、これはガウス過程回帰を用いる
  • ガウス過程回帰でモデル構築時、カーネル関数の選択が重要。
  • ガウシアンカーネル(RBFカーネル)等の距離に基づくカーネル関数では、x の外挿が進むと予測値の方向が不明確になる可能性がある。
  • x の外挿領域の方向性を明確にするために、カーネル関数に線形項を追加する手法がある

実際に書籍で紹介しているガウス過程回帰のカーネル関数は以下の通りです。

数式だけ見ても何がなんだが全然わからないnissy……

金子先生の作成したコードには、この10種類のカーネル関数の中からCV誤差が最小になるモデルが選択されるようにコードが書かれています。

それでは実際にpython環境でカーネル関数の違いについて確認していきましょう。

カーネル関数の違いを実装する

まずは予測させるモデルを設定し、そこから15サンプルほどデータを生成させます。

以下のようなデータが得られました。黒い線が求めるべき真のモデルで、プロットが真のモデルから生成されたサンプルになります。

この生成したサンプルデータに対して、カーネル関数の異なるガウス過程回帰でフィッティングを行ってみましょう。

フィッティングした結果が以下の通りです。

各グラフの横軸10付近に着目してください。この中でカーネル関数に線形項が入っているのが偶数番のkernel 2, 4, 6, 8, 10 です。それらはXの値が大きいサンプルの傾向を反映して、外挿を予測していることがわかります。

このことが金子先生のブログにも書かれている「外挿の方向が定めやすい」ということがわかりました。

しかしながら、それが実験値と必ずしも合致するわけではないということ、それにより線形項を含むカーネル関数を選択した際、予測性能が下がる場合も考慮する必要があるということは肝に命じておきましょう。

まとめ

今回は金子先生のブログ記事をもとに、ガウス過程回帰のカーネル関数の違いについて深掘りしてみました。カーネル関数に線形項を入れることで、外挿に近いサンプルに追従した形でモデルを予測することが可視化できました。これを金子先生は「外挿の方向が定めやすい」というように表現しているのだと思います。

しかしながら、線形項を含むカーネル関数を選択した際、予測性能が下がる場合も考慮する必要があるということに注意をしながら、モデル構築する前にしっかりと仮説を立ててモデル選択をしなければならないと考えさせられました。

データ分析
未経験の壁をぶっこわ〜す!化学系データサイエンティスト転職ブログ

コメント

タイトルとURLをコピーしました