📜  毫升 |内核 PCA 简介

📅  最后修改于: 2022-05-13 01:58:08.828000             🧑  作者: Mango

毫升 |内核 PCA 简介

PRINCIPAL COMPONENT ANALYSIS:是一种用于降低数据维度的工具。它允许我们减少数据的维度而不会丢失太多信息。 PCA 通过找到具有最大方差的原始变量的几个正交线性组合(主成分)来降低维度。
第一个主成分捕获了数据中的大部分方差。第二个主成分与第一个主成分正交并捕获剩余的方差,这是第一个主成分的左侧,依此类推。主成分的数量与原始变量的数量一样多。
这些主成分是不相关的,并且按照前几个主成分解释原始数据的大部分方差的方式进行排序。要了解有关 PCA 的更多信息,您可以阅读文章主成分分析

内核PCA:

PCA 是一种线性方法。也就是说,它只能应用于线性可分的数据集。它对线性可分的数据集表现出色。但是,如果我们将其用于非线性数据集,我们可能会得到可能不是最佳降维的结果。 Kernel PCA 使用核函数将数据集投影到更高维的特征空间,在那里它是线性可分的。它类似于支持向量机的思想。

有各种核方法,如线性、多项式和高斯。

代码:创建一个非线性数据集,然后在数据集上应用 PCA。



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()

非线性数据

代码:让我们在这个数据集上应用 PCA

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()


如您所见,PCA 未能区分这两个类。代码:在这个数据集上应用核 PCA,RBF 核的 gamma 值为 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()


在内核空间中,这两个类是线性可分的。 Kernel PCA 使用核函数将数据集投影到高维空间,在那里它是线性可分的。
最后,我们使用 scikit-learn 将内核 PCA 应用于非线性数据集。

参考:
https://en.wikipedia.org/wiki/Kernel_principal_component_analysis
http://fourier.eng.hmc.edu/e161/lectures/kernelPCA/node4.html