カーネル関数の選び方

シェアする

機械学習の手法の中には、カーネル関数を用いた手法があります。サポートベクターマシン、サポートベクター回帰、ガウス過程回帰あたりが有名と思います。

サポートベクターマシン(Support Vector Machine, SVM)~優秀な(非線形)判別関数~
 サポートベクターマシン(Support Vector Machine, SVM)について、pdfとパワーポイントの資料を作成しました。デー...
サポートベクター回帰(Support Vector Regression, SVR)~サンプル数10000以下ならこれを使うべし!~
サポートベクター回帰(Support Vector Regression, SVR)について、pdfとパワーポイントの資料を作成しました。デ...
ガウス過程回帰(Gaussian Process Regression, GPR)~予測値だけでなく予測値のばらつきも計算できる!~
ガウス過程による回帰(Gaussian Process Regression, GPR)について、pdfとパワーポイントの資料を作成しました...

他にもリッジ回帰や主成分分析、独立成分分析など、いろいろな手法とカーネル関数を組み合わせることができます。

主成分分析(Principal Component Analysis, PCA)~データセットの見える化・可視化といったらまずはこれ!~
主成分分析(Principal Component Analysis, PCA)について、pdfとパワーポイントの資料を作成しました。データ...
独立成分分析 (Independent Component Analysis, ICA) ~PCAの無相関より強力な ”独立” な成分を抽出~
よく、主成分分析(Principal Component Analysis, PCA) と比べられることが多い、独立成分分析 (Indepe...

なおカーネル関数についてはこちらをご覧ください。

カーネル関数って結局なんなの?→サンプル間の類似度と理解するのがよいと思います!
サポートベクターマシン (Support Vector Machine, SVM) や サポートベクター回帰 (Support Vector...

カーネル関数にもいろいろあります。最もよく用いられているのは線形カーネルやガウシアンカーネル (Radial Basis Function (RBF) カーネル) でしょうか。他には、シグモイドカーネルや多項式カーネルなどもありますし、たとえば化学構造の fingerprints などのバイナリの (0 もしくは 1 のみの) 特徴量を扱うときは tanimoto カーネル、サンプルのグラフ構造を扱うときはグラフカーネル、文章などの文字列を扱うときは文字列カーネルを利用できます。

では用いるカーネル関数をどのように選べばよいでしょうか。何にでも使えるベストなカーネル関数があるというわけではなく、データセットによって適したカーネル関数は異なります。回帰分析手法やクラス分類手法において、ベストな手法があるわけではないのと一緒ですね。

カーネル関数を選ぶとき、教師あり学習においては基本的に、新しいサンプルに対する予測精度が高くなるように、カーネル関数を選びたいです。これをふまえて、カーネル関数の選び方は主に 2 つあります。

一つ目は、他のハイパーパラメータと同じように、カーネル関数をハイパーパラメータの一つと考えて、クロスバリデーションにより最適化する方法です。クロスバリデーションについてはこちらをご覧ください。

回帰モデル・クラス分類モデルを評価・比較するためのモデルの検証 (Model validation)
いろいろな回帰モデル・クラス分類モデルを構築したり、モデルの中のハイパーパラメータ (PLSの成分数など) を決めたりするとき、モデルを評価...

クロスバリデーションで最適化されたカーネル関数を用いて、テストデータで予測性能を検証しますので、カーネル関数がテストデータにオーバーフィットしないというメリットがあります。一方で、回帰分析手法・クラス分類手法ごとに一つのカーネル関数しか選択されませんので、手法としての多様性 (結果的にトレーニングデータで構築されるモデルの多様性) は小さくなります。たとえば線形カーネルの SVR かガウシアンカーネルの SVR のどちらかしか選ばれないことになりますので、線形SVRと非線形SVRとの間でテストデータの予測精度の比較はできません。多様な手法の中からテストデータを予測できる手法を選ぶことが難しくなります。またハイパーパラメータが増え、その候補の組み合わせが (指数関数的に) 増えます。計算時間もかなりかかることになりますので注意が必要です。

二つ目の方法は、テストデータの予測結果を見てカーネル関数を選ぶ方法です。カーネル関数が異なると別の手法、と考えて、カーネル関数それぞれで、必要に応じてクロスバリデーションでハイパーパラメータを最適化したあとに、トレーニングデータでモデルを構築し、テストデータを予測します。こうすることで、多種多様な手法の中から、テストデータにおける予測精度を見ながらベストなモデルを検討できる、というメリットがあります。また計算時間に関しても、クロスバリデーションで最適化する方法と比べると短いです。しかし色々なカーネル関数からモデルを一つ選ぶことになりますので、結果的にテストデータにオーバーフィットしてしまう危険が出てきます。

以上のように、カーネル関数を選ぶそれぞれの手法で一長一短がありますので、それらの特徴を考慮して、データ解析の背景や目的に応じて使い分けるとよいと思います。

また教師なし学習において、たとえばカーネルPCAやカーネルICAなどのデータの可視化手法に関しては、こちらの k3n-error を用いて選ぶとよいでしょう。

データの見える化・可視化をした結果を評価する指標を開発しました、ハイパーパラメータの設定もこれでOK (Python・MATLABプログラムあり)
DCEKit (Data Chemical Engineering toolKit) を PyPI にリリース!
これまで化学データ・化学工学データのデータ解析に役立つツールや金子研で開発された手法に関する Python コードを Github にて公開...

以上です。

質問やコメントなどありましたら、twitter, facebook, メールなどでご連絡いただけるとうれしいです。

シェアする

フォローする