ML算法:内核PCA简介

2021年5月6日16:56:25 发表评论 1,130 次浏览

主要成分分析:

是用于减少数据量的工具。它使我们能够在不损失大量信息的情况下减小数据量。 PCA通过找到方差最大的原始变量的一些正交线性组合(主要成分)来减小尺寸。

第一个主成分捕获数据中的大部分差异。第二个主成分与第一个主成分正交, 并捕获剩余的方差, 它是第一个主成分留下的, 依此类推。主成分与原始变量的数量一样多。

这些主要成分是不相关的, 并且按以下方式排序:前几个主要成分解释了原始数据的大部分差异。要了解有关PCA的更多信息, 请阅读文章

主成分分析

内核PCA

PCA是一种线性方法。也就是说, 它只能应用于线性可分离的数据集。对于线性可分离的数据集, 它表现出色。但是, 如果将其用于非线性数据集, 则可能得到的结果可能不是最佳降维。内核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()
ML算法:内核PCA简介1

如你所见, PCA无法区分这两个类别。

代码如下:

在具有RBF内核且伽玛值为15的数据集上应用内核PCA。

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()
ML算法:内核PCA简介2

在内核空间中, 这两类是线性可分离的。内核PCA使用内核函数将数据集投影到可线性分离的高维空间中。

最后, 我们使用scikit-learn将内核PCA应用于非线性数据集。

参考文献:

https://en.wikipedia.org/wiki/Kernel_principal_component_analysis

http://fourier.eng.hmc.edu/e161/lectures/kernelPCA/node4.html


木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: