Rによるデータ分析

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

カーネル主成分分析の種類 の実施例です。

分析例

カーネルの比較

kernlabに入っている8種類のカーネル関数を比べられるようにしています。

最大でも、9つの主成分を求めるようにしています。

パラメタは、デフォルトが多いですが、RBF(ガウシアンカーネル)、ラプラシアン、多項式(Polynominal)は、異なるパターンを入れています。

setwd("C:/Rtest") # 作業用ディレクトリを変更
library(ggplot2)
# ライブラリを読み込み
library(kernlab)
# ライブラリを読み込み
Data <- read.csv("Data.csv", header=T)
# データを読み込み
#library(fastDummies)
#Data <- dummy_cols(Data,remove_first_dummy = FALSE,remove_selected_columns = TRUE)
# ダミー変換
n <- ncol(Data)
for (i in 1:n) {
Data[,i] <- (Data[,i]-mean(Data[,i]))/(sd(Data[,i]))
# 標準化
}
model <- kpca(as.matrix(Data),kernel="rbfdot",kpar=list(sigma=0.01),features=9)
Data_eig <-eig(model)
RBF_k <- round(Data_eig/sum(Data_eig),3)
COMPs <- round(Data_eig/sum(Data_eig),3)
COMPs<- as.data.frame(COMPs)
COMPs[,2]<-"3RBF_0.01"
rownames(COMPs)<-NULL
COMPs[,3]<-rownames(COMPs)
class(COMPs[,3])<- "integer"
COMPs2<- COMPs

model <- kpca(as.matrix(Data),kernel="rbfdot",kpar=list(sigma=1),features=9)
Data_eig <-eig(model)
RBF_k <- round(Data_eig/sum(Data_eig),3)
COMPs <- round(Data_eig/sum(Data_eig),3)
COMPs<- as.data.frame(COMPs)
COMPs[,2]<-"3RBF_1"
rownames(COMPs)<-NULL
COMPs[,3]<-rownames(COMPs)
class(COMPs[,3])<- "integer"
COMPs2<- rbind(COMPs2,COMPs)

model <- kpca(as.matrix(Data),kernel="polydot",kpar=list(degree = 1, scale = 1, offset = 0),features=9)
Data_eig <-eig(model)
Polynomial_k <- round(Data_eig/sum(Data_eig),3)
COMPs <- round(Data_eig/sum(Data_eig),3)
COMPs<- as.data.frame(COMPs)
COMPs[,2]<-"2Poly_1"
rownames(COMPs)<-NULL
COMPs[,3]<-rownames(COMPs)
class(COMPs[,3])<- "integer"
COMPs2<- rbind(COMPs2,COMPs)

model <- kpca(as.matrix(Data),kernel="polydot",kpar=list(degree = 2, scale = 1, offset = 1),features=9)
Data_eig <-eig(model)
Polynomial_k <- round(Data_eig/sum(Data_eig),3)
COMPs <- round(Data_eig/sum(Data_eig),3)
COMPs<- as.data.frame(COMPs)
COMPs[,2]<-"3Poly_2"
rownames(COMPs)<-NULL
COMPs[,3]<-rownames(COMPs)
class(COMPs[,3])<- "integer"
COMPs2<- rbind(COMPs2,COMPs)

model <- kpca(as.matrix(Data),kernel="tanhdot",kpar=list(scale = 1, offset = 1),features=9)
Data_eig <-eig(model)
Tangent_k <- round(Data_eig/sum(Data_eig),3)
COMPs <- round(Data_eig/sum(Data_eig),3)
COMPs<- as.data.frame(COMPs)
COMPs[,2]<-"8Tangent"
rownames(COMPs)<-NULL
COMPs[,3]<-rownames(COMPs)
class(COMPs[,3])<- "integer"
COMPs2<- rbind(COMPs2,COMPs)

model <- kpca(as.matrix(Data),kernel="laplacedot",kpar=list(sigma=0.01),features=9)
Data_eig <-eig(model)
Laplacian_k <- round(Data_eig/sum(Data_eig),3)
COMPs <- round(Data_eig/sum(Data_eig),3)
COMPs<- as.data.frame(COMPs)
COMPs[,2]<-"4Lapla_0.01"
rownames(COMPs)<-NULL
COMPs[,3]<-rownames(COMPs)
class(COMPs[,3])<- "integer"
COMPs2<- rbind(COMPs2,COMPs)

model <- kpca(as.matrix(Data),kernel="laplacedot",kpar=list(sigma=1),features=9)
Data_eig <-eig(model)
Laplacian_k <- round(Data_eig/sum(Data_eig),3)
COMPs <- round(Data_eig/sum(Data_eig),3)
COMPs<- as.data.frame(COMPs)
COMPs[,2]<-"5Lapla_1"
rownames(COMPs)<-NULL
COMPs[,3]<-rownames(COMPs)
class(COMPs[,3])<- "integer"
COMPs2<- rbind(COMPs2,COMPs)

model <- kpca(as.matrix(Data),kernel="besseldot",kpar=list(sigma=1),features=9)
Data_eig <-eig(model)
Bessel_k <- round(Data_eig/sum(Data_eig),3)
COMPs <- round(Data_eig/sum(Data_eig),3)
COMPs<- as.data.frame(COMPs)
COMPs[,2]<-"7Bessel"
rownames(COMPs)<-NULL
COMPs[,3]<-rownames(COMPs)
class(COMPs[,3])<- "integer"
COMPs2<- rbind(COMPs2,COMPs)

model <- kpca(as.matrix(Data),kernel="anovadot",kpar=list(sigma=1, degree = 1),features=9)
Data_eig <-eig(model)
ANOVA_k <- round(Data_eig/sum(Data_eig),3)
COMPs <- round(Data_eig/sum(Data_eig),3)
COMPs<- as.data.frame(COMPs)
COMPs[,2]<-"6ANOVA"
rownames(COMPs)<-NULL
COMPs[,3]<-rownames(COMPs)
class(COMPs[,3])<- "integer"
COMPs2<- rbind(COMPs2,COMPs)

model <- kpca(as.matrix(Data),kernel="vanilladot",kpar=list(),features=9)
Data_eig <-eig(model)
Linear_k <- round(Data_eig/sum(Data_eig),3)
COMPs <- round(Data_eig/sum(Data_eig),3)
COMPs<- as.data.frame(COMPs)
COMPs[,2]<-"1Linear"
rownames(COMPs)<-NULL
COMPs[,3]<-rownames(COMPs)
class(COMPs[,3])<- "integer"
COMPs2<- rbind(COMPs2,COMPs)

model <- kpca(as.matrix(Data),kernel="splinedot",kpar=list(),features=9)
Data_eig <-eig(model)
Spline_k <- round(Data_eig/sum(Data_eig),3)
COMPs <- round(Data_eig/sum(Data_eig),3)
COMPs<- as.data.frame(COMPs)
COMPs[,2]<-"9Spline"
rownames(COMPs)<-NULL
COMPs[,3]<-rownames(COMPs)
class(COMPs[,3])<- "integer"
COMPs2<- rbind(COMPs2,COMPs)

class(COMPs2[,3])<- "character"
ggplot(COMPs2, aes(x=V3, y=COMPs)) + geom_bar(stat="identity", aes(fill=V3)) + facet_grid(. ~ V2)
kernel PCA



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


参考文献

Package ‘kernlab’」  2023
kernlabというRのパッケージのマニュアルです。
https://cran.r-project.org/web/packages/kernlab/kernlab.pdf



Rによるデータ分析

Tweet データサイエンス教室