毫升 |内核 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