从PCA到Kernel PCA(Python)

PCA作为数据预处理手段,将数据映射到最大化方差的低维空间。Kernel PCA通过核函数处理非线性可分数据,实现线性可分。RBF核函数是最常见的选择,通过计算核矩阵并进行特征值分解得到降维后的数据。在非线性数据集上,KPCA展示了优于PCA的效果。
摘要由CSDN通过智能技术生成

PCA不进行分类的动作,而只做做数据预处理,将样本变换到一个容易分类(向最大化方差的方向,principal component axes,投影)的更低维的新的特征空间中。Kernel PCA比PCA多了一步,也即先升维(RBF包括多项式核均是升高到无穷维)再进行投影的动作,因为有些非线性可分的数据集只有在升维的视角下才线性可分。

##PCA

  • 均值化的数据:
    ∑ i x i = 0 \sum_i\mathrm{x}_i=0 ixi=0
# python 
>>> X-np.mean(X, 0)
				# 一个二维矩阵减去一维向量?对,
				# 这里用到的技术是numpy中broadcasting(广播机制)
  • 样本协方差矩阵(sample-covariance matrix C C C
    C = 1 N ∑ i x i x i T = 1 N X X T C=\frac1N\sum_i\mathrm{x}_i\mathrm{x}_i^T=\frac1NXX^T C=N1ixixiT=N1XXT
    其中, X X X 的每一列表示一个样本(特征向量)

  • 特征分解
    C = U Λ U T = ∑ α λ α u α u α T C=U\Lambda U^T=\sum_\alpha \lambda_\alpha\mathbf{u}_\alpha\mathbf{u}_\alpha^T C=UΛUT=αλαuαuαT

  • projection or transform

y i = U k T x i \mathrm{y}_i=U_k^T\mathrm{x}_i yi=UkTxi

1 N ∑ i y i y i T = 1 N ∑ i U k T x i x i T U k = U k T ( 1 N ∑ i x i x i T ) U k = U k T C U k = U k T U Λ U U k T = Λ k \frac1N\sum_i\mathrm{y}_i\mathrm{y}_i^T=\frac1N\sum_iU_k^T\mathrm{x}_i\mathrm{x}_i^TU_k=U_k^T(\frac1N\sum_i\mathrm{x}_i\mathrm{x}_i^T)U_k=U_k^TCU_k=U_k^TU\Lambda UU_k^T=\Lambda_k N1iyiyiT=N1iU

  • 7
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
PCAKernel Principal Component Analysis)是一种非线性的主成分分析方法,用于降维和数据可视化。它通过将数据映射到高维空间中,并在高维空间中找到主成分,来实现降维。与传统的线性PCA不同,核PCA使用核函数来进行非线性映射,从而更好地捕捉数据中的非线性结构。 在Python中,我们可以使用Scikit-learn库中的KernelPCA类来实现核PCA。首先,需要导入相应的模块和数据集,然后创建一个KernelPCA对象,设置核函数的类型和参数,接着使用fit_transform方法对数据进行降维,最后可以使用matplotlib库来可视化降维后的数据。 以下是一个使用Scikit-learn库实现核PCA的示例代码: ```python from sklearn.decomposition import KernelPCA from sklearn.datasets import make_moons import matplotlib.pyplot as plt # 创建一个半月形状的数据集 X, y = make_moons(n_samples=100, random_state=123) # 初始化一个核主成分分析对象 kpca = KernelPCA(kernel='rbf', gamma=15, n_components=2) # 使用KPCA对数据进行降维 X_kpca = kpca.fit_transform(X) # 绘制降维后的数据 plt.scatter(X_kpca[y==0, 0], X_kpca[y==0, 1], color='red', marker='^', alpha=0.5) plt.scatter(X_kpca[y==1, 0], X_kpca[y==1, 1], color='blue', marker='o', alpha=0.5) plt.xlabel('PC1') plt.ylabel('PC2') plt.show() ``` 以上代码中,我们使用了高斯核函数(rbf)作为核函数,并设置了gamma参数为15。通过fit_transform方法对数据进行降维得到X_kpca,然后使用scatter函数将降维后的数据可视化到平面上。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五道口纳什

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值