Rによるデータ分析

Rによる内積とカーネル

内積の分布とカーネルの分布 の実施例です。

分析例

内積との比較

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

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

setwd("C:/Rtest") # 作業用ディレクトリを変更
library(ggplot2)
# ライブラリを読み込み
library(kernlab)
# ライブラリを読み込み
library(tidyr)

Data <- read.csv("Data.csv", header=T)
# データを読み込み
n <- ncol(Data)
for (i in 1:n) {
Data[,i] <- (Data[,i]-mean(Data[,i]))/(sd(Data[,i]))
# 標準化
}
c1Distance <- t(matrix(as.matrix(dist(Data)),1))
c2Linear <- t(matrix(kernelMatrix(vanilladot(), as.matrix(Data)),1))
c4RBF_0.01<-t(matrix(kernelMatrix(rbfdot(sigma = 0.01), as.matrix(Data)),1))
c4RBF_1<-t(matrix(kernelMatrix(rbfdot(sigma = 1), as.matrix(Data)),1))
c3Poly <- t(matrix(kernelMatrix(polydot(degree = 2, scale = 1, offset = 0), as.matrix(Data)),1))
c8Tanh <- t(matrix(kernelMatrix(tanhdot(scale = 1, offset = 1), as.matrix(Data)),1))
c5Laplace <- t(matrix(kernelMatrix(laplacedot(sigma=1), as.matrix(Data)),1))
c7Bessel <- t(matrix(kernelMatrix(besseldot(sigma=1), as.matrix(Data)),1))
c6ANOVA <- t(matrix(kernelMatrix(anovadot(sigma=1, degree = 1), as.matrix(Data)),1))
c9Spline <- t(matrix(kernelMatrix(splinedot(), as.matrix(Data)),1))
Diff_kernel <-cbind(as.data.frame(c1Distance),c1Distance,c2Linear,c3Poly,c4RBF_0.01,c4RBF_1,c5Laplace,c6ANOVA,c7Bessel,c8Tanh,c9Spline)
Diff_kernel[,1] <-NULL

No <- rownames(Diff_kernel)
Diff_kernel2 <- cbind(Diff_kernel,No)
Data_long2 <- tidyr::gather(Diff_kernel2, key="X", value = Xs, -No)
ggplot(Data_long2, aes(x=Xs)) + geom_histogram() + facet_wrap(X~.,scales="free")
kernel PCA

Data_long <- tidyr::gather(Diff_kernel, key="X", value = Xs, -c1Distance)
ggplot(Data_long, aes(x=Xs,y=c1Distance)) + geom_point() + facet_wrap(~X,scales="free")
kernel PCA

Data_long <- tidyr::gather(Diff_kernel, key="X", value = Xs, -c2Linear)
ggplot(Data_long, aes(x=Xs,y=c2Linear)) + geom_point() + facet_wrap(~X,scales="free")

kernel PCA



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


参考文献

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




Rによるデータ分析

Tweet データサイエンス教室