ANÁLISIS DE COMPONENTES PRINCIPALES: es una herramienta que se utiliza para reducir la dimensión de los datos. Nos permite reducir la dimensión de los datos sin mucha pérdida de información. PCA reduce la dimensión al encontrar algunas combinaciones lineales ortogonales (componentes principales) de las variables originales con la varianza más grande.
El primer componente principal captura la mayor parte de la varianza en los datos. El segundo componente principal es ortogonal al primer componente principal y captura la varianza restante, que queda del primer componente principal y así sucesivamente. Hay tantos componentes principales como el número de variables originales.
Estos componentes principales no están correlacionados y están ordenados de tal manera que los primeros componentes principales explican la mayor parte de la varianza de los datos originales. Para obtener más información sobre PCA, puede leer el artículo Análisis de componentes principales
NÚCLEO PCA:
PCA es un método lineal. Es decir, solo se puede aplicar a conjuntos de datos que son linealmente separables. Hace un trabajo excelente para conjuntos de datos, que son linealmente separables. Pero, si lo usamos para conjuntos de datos no lineales, podríamos obtener un resultado que puede no ser la reducción de dimensionalidad óptima. Kernel PCA utiliza una función de kernel para proyectar un conjunto de datos en un espacio de características de mayor dimensión, donde es linealmente separable. Es similar a la idea de Support Vector Machines.
Hay varios métodos kernel como lineal, polinomial y gaussiano.
Código: Cree un conjunto de datos que no sea lineal y luego aplique PCA en el conjunto de datos.
import matplotlib.pyplot as plt from sklearn.datasets import make_moons X, y = make_moons(n_samples = 500, noise = 0.02, random_state = 417) plt.scatter(X[:, 0], X[:, 1], c = y) plt.show()
Código: apliquemos PCA en este conjunto de datos
from sklearn.decomposition import PCA pca = PCA(n_components = 2) X_pca = pca.fit_transform(X) plt.title("PCA") plt.scatter(X_pca[:, 0], X_pca[:, 1], c = y) plt.xlabel("Component 1") plt.ylabel("Component 2") plt.show()
As you can see PCA failed to distinguish the two classes.
Code: Applying kernel PCA on this dataset with RBF kernel with a gamma value of 15.
from sklearn.decomposition import KernelPCA kpca = KernelPCA(kernel ='rbf', gamma = 15) X_kpca = kpca.fit_transform(X) plt.title("Kernel PCA") plt.scatter(X_kpca[:, 0], X_kpca[:, 1], c = y) plt.show()
In the kernel space the two classes are linearly separable. Kernel PCA uses a kernel function to project the dataset into a higher-dimensional space, where it is linearly separable.
Finally, we applied the kernel PCA to a non-linear dataset using scikit-learn.
Referencias:
https://en.wikipedia.org/wiki/Kernel_principal_component_analysis
http://fourier.eng.hmc.edu/e161/lectures/kernelPCA/node4.html