Kernel PCA (次元圧縮)【Pythonとscikit-learnで機械学習:第22回】

Kernel-PCA(主成分分析)によるデータの非線形次元圧縮を実装します。

PCAは固有値分解であり、線形変換です。

そのためデータ構造が非線形な場合には、うまくいかない場合があります。

そのような場合に、Kernel PCAが使用されます。

Kernel PCAはカーネルトリックを用いて、データを非線形変換した後にPCAを実施する方法です。

Kernel PCAは、scikit-learnのアルゴリズムチートマップの以下の黒矢印に対応します。

[scikit-learnのマップ]

次元圧縮→PCA機能せず→サンプル数1万以上→[Kernel PCA]

です。

Kernel-PCAの実装

本記事ではムーンのサンプルデータを使用して、次元圧縮を行います。

実装コードは以下の通りです。

結果は次の通りになります。

結果のグラフ(上)が、元データです。

線形には判別できない非線形なデータ構造をしています。

このムーンデータにPCAを実施したのがグラフ(中)です。

元データとそれほど結果が変わっておらず、機能していないことが分かります。

最後にKernel PCAを実施したのが、一番下のグラフです。

データ構造がより分かりやすいように、新たな軸が作られていることが分かります。

コードを解説します。

# 解説5:カーネル主成分分析を実施——————————-
kpca = decomposition.KernelPCA(n_components=2,  kernel=’rbf’, gamma=20.0)
X_kpca = kpca.fit_transform(X)

取り出す次元の数を2に指定し、カーネルをrbfカーネル(ガウスカーネル)にしています。

gammaはガウスカーネルの形(分散)を決めています。

それでは「結局、Kernel PCAって何をやっていたの?」を説明します。

Kernel PCAの心

正確な情報は以下をご覧ください。

scikit-learnのdecompositonの解説ページ

scikit-learnのKernel PCAの解説ページ

Kernel PCAはカーネルトリックを用いて、データを非線形変換した後にPCAを実施する方法です。

カーネル近似(クラス分類)【Pythonとscikit-learnで機械学習:第2回】
本シリーズでは、Pythonを使用して機械学習を実装する方法を解説します。また各アルゴリズムの数式だ...

今回の実装例は、2次元から2次元への変換なので次元縮約にはなっていませんが、よりデータの特徴を捉えやすい構造に変換されていることがわかります。

以上、Pythonとscikit-learnで学ぶ機械学習入門|第22回:Kernel PCAでの次元圧縮でした。

次回はSpectral Embeddingによる次元圧縮について説明します。

【目次】Python scikit-learnの機械学習アルゴリズムチートシートを全実装・解説
scikit-learnのアルゴリズムチートマップで紹介されている手法を、全て実装・解説してみました。 ...