Rによるカーネル主成分分析

このエントリーをはてなブックマークに追加


はじめに

下の記事では主成分分析の簡単な説明とRでの使い方について触れました 

Rによる主成分分析 - Tech Mind

 

 

今回はPRML12章をもとにカーネル主成分分析についてのお話です

パターン認識と機械学習 下 (ベイズ理論による統計的予測)

パターン認識と機械学習 下 (ベイズ理論による統計的予測)

 

 

 イメージ

主成分分析では線形な関数をもとにしていました。

非線形な関数をある種の変換したあとに主成分分析をするというのが今回の話。

 

f:id:taithon:20150215231706p:plain

 

具体的には

①特徴ベクトルと呼ばれる物で一旦データを変換する

②主成分分析を行う

ここでポイントとしては、特徴ベクトルの内積の形さえ分かれば主成分分析ができてしまうということです。特徴ベクトル自体を指定しなくていいというところがPRML6章で言われているカーネルトリックという手法です。

 

Rによるカーネル主成分分析

パッケージ・kernlabのインストール

まずは、必要となるパッケージをインストールしましょう。

install.packages("kernlab", dependencies=TRUE)

により、kernlabを適当なミラーサイトから落としましょう。

パッケージを読み込み

library(kernlab)

データの読み込みと整理

data(iris)

iris.data <- iris[, 1:4]

iris.lab <- iris[, 5]

ラベルを貼る

lab <- as.integer(iris.lab)

lev <- levels(iris.lab)

カーネル主成分分析の実行と図示

result <- kpca(~., data=iris.data, features=2, kpar=list(sigma=0.1))

plot(rotated(result), col=lab, pch=lab)

 図にレジェンドをつけて完成

legend("topright", legend=lev, pch=1:3, col=1:3

 

主成分分析との比較

主成分分析

f:id:taithon:20150215225559p:plain

 

カーネル主成分分析

f:id:taithon:20150215232744p:plain

 

 

コードまとめ

library(kernlab)

data(iris)

iris.data <- iris[, 1:4]

iris.lab <- iris[, 5]

lab <- as.integer(iris.lab)

lev <- levels(iris.lab)

result <- kpca(~., data=iris.data, features=2, kpar=list(sigma=0.1))

plot(rotated(result), col=lab, pch=lab)

legend("topright", legend=lev, pch=1:3, col=1:3)