riem.kpca: Kernel Principal Component Analysis

View source: R/visualization_kpca.R

riem.kpcaR Documentation

Kernel Principal Component Analysis

Description

Although the method of Kernel Principal Component Analysis (KPCA) was originally developed to visualize non-linearly distributed data in Euclidean space, we graft this to the case for manifolds where extrinsic geometry is explicitly available. The algorithm uses Gaussian kernel with

K(X_i, X_j) = \exp≤ft( - \frac{d^2 (X_i, X_j)}{2 σ^2} \right )

where σ is a bandwidth parameter and d(\cdot, \cdot) is an extrinsic distance defined on a specific manifold.

Usage

riem.kpca(riemobj, ndim = 2, sigma = 1)

Arguments

riemobj

a S3 "riemdata" class for N manifold-valued data.

ndim

an integer-valued target dimension (default: 2).

sigma

the bandwidth parameter (default: 1).

Value

a named list containing

embed

an (N\times ndim) matrix whose rows are embedded observations.

vars

a length-N vector of eigenvalues from kernelized covariance matrix.

References

\insertRef

scholkopf_kernel_1997Riemann

Examples

#-------------------------------------------------------------------
#          Example for Gorilla Skull Data : 'gorilla'
#-------------------------------------------------------------------
## PREPARE THE DATA
#  Aggregate two classes into one set
data(gorilla)

mygorilla = array(0,c(8,2,59))
for (i in 1:29){
  mygorilla[,,i] = gorilla$male[,,i]
}
for (i in 30:59){
  mygorilla[,,i] = gorilla$female[,,i-29]
}

gor.riem = wrap.landmark(mygorilla)
gor.labs = c(rep("red",29), rep("blue",30))

## APPLY KPCA WITH DIFFERENT KERNEL BANDWIDTHS
kpca1 = riem.kpca(gor.riem, sigma=0.01)
kpca2 = riem.kpca(gor.riem, sigma=1)
kpca3 = riem.kpca(gor.riem, sigma=100)
## VISUALIZE
opar <- par(no.readonly=TRUE)
par(mfrow=c(1,3), pty="s")
plot(kpca1$embed, pch=19, col=gor.labs, main="sigma=1/100")
plot(kpca2$embed, pch=19, col=gor.labs, main="sigma=1")
plot(kpca3$embed, pch=19, col=gor.labs, main="sigma=100")
par(opar)


Riemann documentation built on March 18, 2022, 7:55 p.m.