UMPCA: UMPCA: Uncorrelated Multilinear Principle Component Analysis

View source: R/UMPCA.R

UMPCAR Documentation

UMPCA: Uncorrelated Multilinear Principle Component Analysis

Description

This function implements the uncorrelated multilinear principal component analysis for tensors of dimension 2, 3 or 4. The code is basically the same as in the MATLAB toolbox UMPCA by Haiping Lu (Link: https://www.mathworks.com/matlabcentral/fileexchange/35432-uncorrelated-multilinear-principal-component-analysis-umpca, see also references).

Usage

UMPCA(TX, numP)

Arguments

TX

The input training data in tensorial representation, the last mode is the sample mode. For Nth-order tensor data, TX is of (N+1)th-order with the (N+1)-mode to be the sample mode. E.g., 30x20x10x100 for 100 samples of size 30x20x10.

numP

The dimension of the projected vector, denoted as P in the paper. It is the number of elementary multilinear projections (EMPs) in tensor-to-vector projection.

Value

Us

The multilinear projection, consisting of numP (P in the paper) elementary multilinear projections (EMPs), each EMP is consisted of N vectors, one in each mode.

TXmean

The mean of the input training samples TX.

odrIdx

The ordering index of projected features in decreasing variance.

Warning

As this algorithm aims more at uncorrelated features than at an optimal reconstruction of the data, hence it might give poor results when used for the univariate decomposition of images in MFPCA.

References

Haiping Lu, K.N. Plataniotis, and A.N. Venetsanopoulos, "Uncorrelated Multilinear Principal Component Analysis for Unsupervised Multilinear Subspace Learning", IEEE Transactions on Neural Networks, Vol. 20, No. 11, Page: 1820-1836, Nov. 2009.

Examples

set.seed(12345)

 # define "true" components
 a <- sin(seq(-pi, pi, length.out = 100))
 b <- exp(seq(-0.5, 1, length.out = 150))

 # simulate tensor data
 X <- a %o% b %o% rnorm(80, sd = 0.5)

 # estimate one component
 UMPCAres <- UMPCA(X, numP = 1)

 # plot the results and compare to true values
 plot(UMPCAres$Us[[1]][,1])
 points(a/sqrt(sum(a^2)), pch = 20) # eigenvectors are defined only up to a sign change!
 legend("topright", legend = c("True", "Estimated"), pch = c(20, 1))

 plot(UMPCAres$Us[[2]][,1])
 points(b/sqrt(sum(b^2)), pch = 20)
 legend("topleft", legend = c("True", "Estimated"), pch = c(20, 1))

MFPCA documentation built on Sept. 15, 2022, 9:07 a.m.