3 votos

KernelPCA de sklearn no devuelve los datos originales

Si hago una transformación y luego una transformación_inversa utilizando PCA, por supuesto recupero los datos originales. Si hago lo mismo con KernelPCA, no. ¿Es esto una propiedad de kernelPCA o un defecto de la implementación? El código está aquí:

import numpy as np
from sklearn.decomposition import PCA, KernelPCA
pca = PCA(n_components=2, copy=True)
kpca = KernelPCA(n_components=5,
             kernel='rbf',
             gamma=1.0, # default 1/n_features
             kernel_params=None,
             fit_inverse_transform=True,
             eigen_solver='auto',
             tol=0,
             max_iter=None)
train_set = np.random.rand(5,2)
k_transformed = kpca.fit_transform(train_set)
k_orig =  kpca.inverse_transform(k_transformed)
p_transformed = pca.fit_transform(train_set)
p_orig =  pca.inverse_transform(p_transformed)
print "Original Data"
print train_set
print "PCA"
print p_orig
print "KPCA"
print k_orig

La salida está aquí:

Original Data
[[ 0.60102465  0.37562677]
 [ 0.78281304  0.20575771]
 [ 0.55120131  0.31717359]
 [ 0.48216065  0.85297703]
 [ 0.77400554  0.86559728]]
PCA
[[ 0.60102465  0.37562677]
 [ 0.78281304  0.20575771]
 [ 0.55120131  0.31717359]
 [ 0.48216065  0.85297703]
 [ 0.77400554  0.86559728]]
KPCA
[[ 0.53530411  0.3594765 ]
 [ 0.51250412  0.25227312]
 [ 0.51253417  0.32343322]
 [ 0.45231888  0.55243246]
 [ 0.49755706  0.55221213]]

1voto

user39770 Puntos 9

De wikipedia - "Dado que nunca trabajamos directamente en el espacio de características, la formulación kernel del ACP está restringida en el sentido de que no calcula los componentes principales en sí, sino las proyecciones de nuestros datos sobre dichos componentes. " . Por tanto, el kernel PCA sólo calcula el paso final, que es la proyección en el subespacio a. Nunca hay una forma única de recuperar un vector a partir de su proyección.

1voto

Rob Van Dam Puntos 5073

Lea la documentación de KernelPCA en torno a las inversas: no existe una inversa analítica que dependa del núcleo, por lo que aproximan la transformada inversa mediante el aprendizaje de una regresión de cresta entre la base PC y el espacio de características original. Puede ajustar el parámetro de regularización para esa regresión utilizando el parámetro alpha ; ajuste alpha=0 en su ejemplo produce (casi, como en np.allclose ) igual k_orig como train_set (aunque presumiblemente una inversa menos fiel para los datos que no son sus datos de entrenamiento).

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X