Kernel Principal Components Analysis

>>> from mlpack import kernel_pca

This program performs Kernel Principal Components Analysis (KPCA) on the specified dataset with the specified kernel. This will transform the data onto the kernel principal components, and optionally reduce the dimensionality by ignoring the kernel principal components with the smallest eigenvalues.

For the case where a linear kernel is used, this reduces to regular PCA.

For example, the following command will perform KPCA on the dataset 'input' using the Gaussian kernel, and saving the transformed data to 'transformed':

>>> kernel_pca(input=input, kernel='gaussian')
>>> transformed = output['output']

The kernels that are supported are listed below:

* 'linear': the standard linear dot product (same as normal PCA):

K(x, y) = x^T y

* 'gaussian': a Gaussian kernel; requires bandwidth:

K(x, y) = exp(-(|| x - y || ^ 2) / (2 * (bandwidth ^ 2)))

* 'polynomial': polynomial kernel; requires offset and degree:

K(x, y) = (x^T y + offset) ^ degree

* 'hyptan': hyperbolic tangent kernel; requires scale and offset:

K(x, y) = tanh(scale * (x^T y) + offset)

* 'laplacian': Laplacian kernel; requires bandwidth:

K(x, y) = exp(-(|| x - y ||) / bandwidth)

* 'epanechnikov': Epanechnikov kernel; requires bandwidth:

K(x, y) = max(0, 1 - || x - y ||^2 / bandwidth^2)

* 'cosine': cosine distance:

K(x, y) = 1 - (x^T y) / (|| x || * || y ||)

The parameters for each of the kernels should be specified with the options 'bandwidth', 'kernel_scale', 'offset', or 'degree' (or a combination of those parameters).

Optionally, the Nyström method ("Using the Nystroem method to speed up kernel machines", 2001) can be used to calculate the kernel matrix by specifying the 'nystroem_method' parameter. This approach works by using a subset of the data as basis to reconstruct the kernel matrix; to specify the sampling scheme, the 'sampling' parameter is used. The sampling scheme for the Nyström method can be chosen from the following list: 'kmeans', 'random', 'ordered'.

input options

output options

The return value from the binding is a dict containing the following elements: