7.4.6 核PCA

经典 PCA 是线性变换,重构数据矩阵是原矩阵的投影变换,当数据点云分布呈现明显的非线性时,线性PCA不能很好压缩维度,达不到提取主成分的效果。例如三维空间中,点云是一条曲线分布,曲线不位于任意平面内,则对点云进行投影变换只能变换到三维空间,所以线性PCA的主成分还是3个。但曲线可以看作只有一维,“沿曲线切线方向”的维度,这就需要通过非线性变换,获得该主成分。

假设数据矩阵为 AAA ,每列为一个样本点 ai\mathbf{a}_{i}ai​ ,对每个样本进行非线性变换,变换函数为 Φ\PhiΦ ,注意不是线性变换,即变换函数 Φ\PhiΦ 不是矩阵。令变换后的样本为 bi=Φ(ai)\mathbf{b}_{i} = \Phi(\mathbf{a}_{i})bi​=Φ(ai​) ,数据矩阵为 BBB ,则 B=Φ(A)B = \Phi(A)B=Φ(A) 。我们对数据矩阵 BBB 进行线性 PCA,希望获得对数据矩阵 AAA 非线性变换能力。

数据矩阵 BBB 线性PCA变换为: BBTu=λuBB^T\mathbf{u} = \lambda \mathbf{u}BBTu=λu ,其中 λ≥0\lambda \ge 0λ≥0 是对称半正定矩阵 BBTBB^TBBT 特征值,u\mathbf{u}u 是对应特征向量,最大前 kkk 个特征值对应的特征向量即为主方向。如果我们知道非线性变换函数 Φ\PhiΦ 的具体函数形式,则可以得到特征向量,就完美解决了非线性PCA。很可惜,对于具体问题,很难或者几乎不可能得到 Φ\PhiΦ 的具体函数形式,所以需要另辟蹊径,这时神奇的核技巧发挥作用。具体如下:

BBTu=λuBB^T\mathbf{u} = \lambda \mathbf{u}BBTu=λu 两边左乘 BTB^TBT 得
BTBBTu=λBTuB^TBB^T\mathbf{u} = \lambda B^T\mathbf{u} BTBBTu=λBTu
令 K=BTBK=B^TBK=BTB,单位向量 p=κBTu\mathbf{p} = \kappa B^T\mathbf{u}p=κBTu,则 Kp=λpK\mathbf{p} =\lambda \mathbf{p}Kp=λp,所以 λ≥0\lambda \ge 0λ≥0 是对称半正定矩阵 KKK 特征值,p\mathbf{p}p 是对应特征向量。注意 BBT,BTBBB^T,B^TBBBT,BTB 有相同的特征值,但特征向量不同。假设我们通过核技巧,能计算出矩阵 KKK ,则我们就能得到 p、λ\mathbf{p}、\lambdap、λ 。由于 p\mathbf{p}p 是单位向量,则 1=pTp=κ2uTBBTu=κ2uTλu=κ2λ1 = \mathbf{p}^T\mathbf{p} = \kappa^2 \mathbf{u}^TBB^T\mathbf{u} = \kappa^2 \mathbf{u}^T\lambda \mathbf{u} = \kappa^2\lambda1=pTp=κ2uTBBTu=κ2uTλu=κ2λ,所以 κ=1/λ\kappa =1/ \sqrt{\lambda}κ=1/λ​ 。

现在计算任意样本 x\mathbf{x}x 的主成分即在特征向量 u\mathbf{u}u 上的投影,根据 BBTu=λuBB^T\mathbf{u} = \lambda \mathbf{u}BBTu=λu 得 u=1/λBBTu\mathbf{u} = 1/ \lambda BB^T\mathbf{u}u=1/λBBTu;因为 p=κBTu\mathbf{p} = \kappa B^T\mathbf{u}p=κBTu 得 BTu=p/κB^T\mathbf{u} = \mathbf{p}/ \kappaBTu=p/κ 。

yiu=xTu=xT1/λBBTu=1/λxTBBTu=1/λxTBp/κ=1λ(xTB)py^u_i = \mathbf{x}^T\mathbf{u} = \mathbf{x}^T 1/\lambda BB^T\mathbf{u} \\ = 1/ \lambda \mathbf{x}^TBB^T\mathbf{u} \\ = 1/ \lambda \mathbf{x}^TB \mathbf{p}/\kappa \\ = \frac{1}{\sqrt{\lambda}} (\mathbf{x}^TB) \mathbf{p} yiu​=xTu=xT1/λBBTu=1/λxTBBTu=1/λxTBp/κ=λ​1​(xTB)p

则整个样本在特征向量 u\mathbf{u}u 上的主成分为
yu=1λBTBp=1λKp=1λλp=λp\mathbf{y}^u = \frac{1}{\sqrt{\lambda}} B^TB \mathbf{p} \\ = \frac{1}{\sqrt{\lambda}} K \mathbf{p} \\ = \frac{1}{\sqrt{\lambda}} \lambda \mathbf{p} \\ = \sqrt{\lambda}\mathbf{p} yu=λ​1​BTBp=λ​1​Kp=λ​1​λp=λ​p

所以现在剩下的核心问题是如何计算矩阵 K=BTBK=B^TBK=BTB ,根据矩阵四种乘法方式,得到矩阵 KKK 任意位置的元素为

Kij=biTbj=ΦT(ai)Φ(aj)K_{ij} = \mathbf{b}^T_{i}\mathbf{b}_{j} \\ = \Phi^T(\mathbf{a}_{i})\Phi(\mathbf{a}_{j}) Kij​=biT​bj​=ΦT(ai​)Φ(aj​)

可见其为原向量变换后的内积,由于不知道变换函数 Φ\PhiΦ ,所以没有办法知道 KijK_{ij}Kij​ ,又陷入困局。借助神奇的核函数可以解决此困局,令
Kij=ΦT(ai)Φ(aj)=k(ai,aj)K_{ij} = \Phi^T(\mathbf{a}_{i})\Phi(\mathbf{a}_{j}) \\ = k(\mathbf{a}_{i},\mathbf{a}_{j}) Kij​=ΦT(ai​)Φ(aj​)=k(ai​,aj​)
k(ai,aj)k(\mathbf{a}_{i},\mathbf{a}_{j})k(ai​,aj​) 称为核函数,只要知道核函数的表达式,就可以绕过变换函数 Φ\PhiΦ ,得到 KijK_{ij}Kij​ ,终于解决了问题。

核函数应该满足什么条件呢?由于需要 Kp=λpK\mathbf{p} =\lambda \mathbf{p}Kp=λp,λ≥0\lambda \ge 0λ≥0 成立,即要求 KKK 是半正定矩阵。所以只要满足 KKK 是半正定矩阵的函数都能作为核函数,故有无穷多核函数。

最常用的核函数是高斯核,也称径向基核函数:k(ai,aj)=exp⁡(−∥ai−aj∥22σ2)k(\mathbf{a}_{i},\mathbf{a}_{j}) = \exp(-\frac{\|\mathbf{a}_{i}-\mathbf{a}_{j}\|^2}{2\sigma^2})k(ai​,aj​)=exp(−2σ2∥ai​−aj​∥2​),σ>0\sigma > 0σ>0 为高斯核的宽度,其次是多项式核:k(ai,aj)=(a+baiTaj)dk(\mathbf{a}_{i},\mathbf{a}_{j}) = (a + b\mathbf{a}^T_{i}\mathbf{a}_{j})^dk(ai​,aj​)=(a+baiT​aj​)d,d≥1,a≥0,b>0d \ge 1,a \ge 0, b > 0d≥1,a≥0,b>0 ,ddd 是多项式的次数。

总结核PCA方法为:

1、根据核函数,计算核数据矩阵 K=BTB,Kij=k(ai,aj)K=B^TB, K_{ij} = k(\mathbf{a}_{i},\mathbf{a}_{j})K=BTB,Kij​=k(ai​,aj​),注意 KKK 必须是半正定矩阵;

2、矩阵 KKK 进行特征值分解 Kp=λpK\mathbf{p} = \lambda \mathbf{p}Kp=λp ,得到一系列大于零的特征值(从大到小顺序排列) λ1,⋯,λr\lambda_1,\cdots,\lambda_rλ1​,⋯,λr​ 及对应特征向量 p1,⋯,pr\mathbf{p}_1,\cdots,\mathbf{p}_rp1​,⋯,pr​ ,根据能量法则选择前 kkk 个最大主方向 pi\mathbf{p}_ipi​;

3、所有样本在对应主方向 pi\mathbf{p}_ipi​ 上的分量:yi=λipi\mathbf{y}_i = \sqrt{\lambda}_i\mathbf{p}_iyi​=λ​i​pi​ 。

细心的读者可能会发现,对矩阵 KKK 进行特征值分解需要矩阵 BBB 是中心化的,即每个变换后向量 bi\mathbf{b}_{i}bi​ 要减去平均向量 bˉi\mathbf{\bar b}_{i}bˉi​ 。即使原始向量 ai\mathbf{a}_{i}ai​ 是中心化的,但由于非线性变换,也不能保证 bi\mathbf{b}_{i}bi​ 是中心化的。对其中心化,读者可自行推导得到:Kˉ=K−1nK−K1n+1nK1n\bar K = K - \mathbf{1}_n K - K \mathbf{1}_n + \mathbf{1}_n K \mathbf{1}_nKˉ=K−1n​K−K1n​+1n​K1n​ ,其中矩阵 1n\mathbf{1}_n1n​ 尺寸为 n×nn \times nn×n ,元素值均为 1/n1/n1/n ,nnn 是样本数量。核PCA方法相应需要修改的地方是第二步,矩阵 KKK 进行特征值分解变为矩阵 Kˉ\bar KKˉ 进行特征值分解,其它不变。

核PCA方法优点是,如同线性PCA,越大特征值对应的主成分越重要,能对非线性的点云进行降维。缺点是,核数据矩阵 KKK 的维度为 n×nn \times nn×n,nnn 是样本数量,所以当样本数量很多时,对其进行特征值分解比较困难,故不能适应大数据。计算样本在主方向上的分量的计算量与样本数量成正比,故样本数量很多时,计算效率比较低,特征向量 pi\mathbf{p}_ipi​ 尺寸为 nnn ,故样本数量很多时,存储量大。

要对非线性点云的主方向提取获得好效果,样本在样本空间中必须采样足够密,以致采样到的点云能近似表达点云构成的完整高维曲面形状。如果密度不够,则曲面会存在很多“大洞”,这些“大洞”处的样本性质是不可能由大洞附近样本推断出来。由于点云是曲面,“大洞”处点云性质可能与其最接近处的点云差别很大。为什么不采集足够密的样本呢,现在不是大数据时代吗?很可惜,这会遭遇“维数灾难”!假设样本空间维度为 mmm ,样本分布在单位立方体内,每维假设均匀等间隔采样,间隔为 ddd ,则总样本数是 (1d)m(\frac{1}{d})^m(d1​)m ,当 mmm 很大时,比如最常见图像,语言,语音等,其维度假设最小在 100 左右,实际上会远大于100,当 1d=1000\frac{1}{d}=1000d1​=1000 时,需要 1030010^{300}10300 样本数,宇宙基本粒子总数才 108010^{80}1080 个!实际上任何机器学习算法,只要涉及非线性,都需要密采样,都会遭遇“维数灾难”问题,只是有的算法比较聪明,能更好地根据附近点云预测大洞处点云,此时我们称算法的泛化性能更好,所谓泛化性能就是算法预测大洞处点云的能力,或者说举一反三的能力。泛化性能好的算法可以降低采样密度。目前对于图像来说,卷积网络是最好的算法,语言文字是 Transformer 网络,其它的不好说。

核PCA方法中核矩阵 KKK 仅利用了样本的核函数信息,丢失了很多其它信息,故其表达样本的能力有限,泛化性能不强,需要密采样才能获得好效果,但密采样会有巨量样本,核PCA方法不能处理巨量样本,故核PCA方法使用受限。只有点云曲面足够简单,如比较平滑接近超平面,则“大洞”处的样本性质很容易由大洞附近样本推断出来,不需要密采样,样本数据少,就能获得好效果。即使点云曲面足够简单,核PCA方法理论上还会遭遇一个最大困难,对于某个具体问题,如何选择最优核函数没有指导方法,是高斯核函数更好,还是多项式更好不清楚,或者其它核函数,每种核函数的最优参数是多少也不清楚,需要不断地试错,来得到较好的结果。但是核PCA是无监督算法,本身是无法判断降维效果好坏的,需要结合分类或回归问题来判断,这限制了核PCA应用范围。鄙人认为,目前任何机器学习算法只要涉及非线性,理论上都找不到最优参数,需要不断调参,因为非线性所对应点云的曲面形状可任意,每种曲面理论上都存在最优参数,不同曲面对应的最优参数不同,目前数学还没有很好的工具对高维点云进行非线性表达即表达不了任意曲面,所以也就在理论上找不到最优参数。所以大家不要嘲笑深度学习是调参术,不调参不行啊!试问哪个机器学习算法不需调参,只是参数多少而已,但参数过少的算法,效果差强人意。连最简单(很少非线性)的最小二乘法的正则化参数都难以找到解析最优值。

核函数

PCA的数据矩阵为 AAA ,核PCA的数据矩阵为 BBB ,但由于不知道具体的非线性变换 Φ\PhiΦ ,可以认为数据矩阵为核矩阵 KKK ,核矩阵共有 nnn 列,故每列可以看作样本非线性变换后的样本,变换后样本维度为 nnn 维。样本 ai\mathbf{a}_iai​ 变换后样本 bi\mathbf{b}_ibi​ 在第 jjj 维分量为 k(ai,aj)k(\mathbf{a}_i,\mathbf{a}_j)k(ai​,aj​) 是核函数值,所以样本属性完全由核函数决定。采用高斯核函数时,k(ai,aj)=exp⁡(−∥ai−aj∥22σ2)k(\mathbf{a}_{i},\mathbf{a}_{j}) = \exp(-\frac{\|\mathbf{a}_{i}-\mathbf{a}_{j}\|^2}{2\sigma^2})k(ai​,aj​)=exp(−2σ2∥ai​−aj​∥2​),当样本在原始空间中欧式距离近时,核值大,距离远时,核值小。根据奇异值能量守恒定律,可以认为矩阵元素越大对奇异值贡献度越大,所以欧式距离近的样本 aj\mathbf{a}_{j}aj​ 对样本 ai\mathbf{a}_{i}ai​ 影响更大,高斯核函数体现远亲不如近邻原则。参数 σ\sigmaσ 度量了样本有效作用距离,为了看清楚其影响,我们执其两端。假设 σ\sigmaσ 趋近 000 ,则只要距离 ∥ai−aj∥\|\mathbf{a}_{i}-\mathbf{a}_{j}\|∥ai​−aj​∥ 大于 0 ,则核值为 0,只有距离等于 0 时核值为 1。所以此时核矩阵为单位矩阵,每个样本为标准单位向量 ei\mathbf{e}_iei​,分散度最大,所有特征值均为 1 ,无法压缩,核PCA失败。假设 σ\sigmaσ 趋近正无穷大 ,则只要距离 ∥ai−aj∥\|\mathbf{a}_{i}-\mathbf{a}_{j}\|∥ai​−aj​∥ 是有限值,则核值为 0,每个样本为零向量,所以此时核矩阵为零矩阵,样本收缩到原点,无法区分,核PCA也失败。所以 σ\sigmaσ 不能太小,否则样本分散太开,所有成分都是同等重要,无法压缩;也不能太大,否则样本过度聚集,无法区分,存在一个合适取值区间或最优值。鄙人估计 σ\sigmaσ 较优值应该是:首先计算每个样本与其最近样本距离,然后求这些最近距离的平均值, σ\sigmaσ 较优值应该和平均值相当。高斯核函数远亲不如近邻原则,当点云曲面接近平面时是合理的,但当曲面高度非线性时是不合理的,生活中的近在眼前远在天边就是这个道理,近在眼前表示原空间两个样本距离近,远在天边表示变换空间两个样本距离远。该理论同样适用支持向量机核函数, σ\sigmaσ 太小,样本分散太开,所有样本都是支持向量,造成过拟合;也不能太大,否则正负样本过度聚集,无法正确分类。

7.4.6 核PCA相关推荐

  1. 核PCA——从理论到实现

    核PCA--从理论到实现 1. PCA方法: 设X=[x1,x2,-xN],x∈Rd,为d维样本空间的N个向量h=i. 协方差矩阵:C=1NXXT 可以做特征值分解C=UΛUT,其中U为特征矩阵,Λ是 ...

  2. 【火炉炼AI】机器学习053-数据降维绝招-PCA和核PCA

    [火炉炼AI]机器学习053-数据降维绝招-PCA和核PCA (本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplo ...

  3. Python机器学习核PCA踩坑(numpy库与math库)

    only size-1 arrays can be converted to Python scalars 今天学习用Python来实现核PCA,大概是书已经过时的原因(其实就是这个原因).在求核矩阵 ...

  4. PRML读书会第十二章 Continuous Latent Variables(PCA,PPCA,核PCA,Autoencoder,非线性流形)

    主讲人 戴玮 (新浪微博:@戴玮_CASIA) Wilbur_中博(1954123) 20:00:49 我今天讲PRML的第十二章,连续隐变量.既然有连续隐变量,一定也有离散隐变量,那么离散隐变量是什 ...

  5. 核PCA(Kernel PCA)学习笔记

    感谢大佬们的文章 1.(46条消息) Gram矩阵_wangyang20170901的博客-CSDN博客_gram矩阵 2.数据降维: 核主成分分析(Kernel PCA)原理解析 - 知乎 ---- ...

  6. 基于Matlab的故障检测的核PCA轮廓图

    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.

  7. PCA(principal component analysis)主成分分析降维和KPCA(kernel principal component analysis​​​​​​​)核

    PCA(principal component analysis)主成分分析降维和KPCA(kernel principal component analysis)核主成分分析降维方法详解及实战 PC ...

  8. ESL第十八章 高维问题 对角LDA/最近收缩重心、RDA/对偶优化/L2带核、函数型数据/Fused Lasso/字符串核/距离矩阵、有监督PCA/生存分析/偏最小二乘/预处理、多重检验/FDR

    (最后一章了,加油!) 目录 18.1 当 p p p远大于 N N N 18.2 对角线性判别分析Diagonal Linear Discriminant Analysis和最近收缩重心Neares ...

  9. 机器学习与高维信息检索 - Note 7 - 核主成分分析(Kernel Principal Component Analysis,K-PCA)

    Note 7 - 核主成分分析(Kernel Principal Component Analysis) 核主成分分析 Note 7 - 核主成分分析(Kernel Principal Compone ...

最新文章

  1. 阿里云牵手东华软件拓展智慧城市
  2. Hadoop记录-metastore jmx配置
  3. 线段树专辑——hdu 1698 Just a Hook
  4. 2给我背书_让优秀的人做你的背书人
  5. 把 14 亿中国人民都拉到一个微信群里在技术上能实现吗?
  6. 【LeetCode - 224】基本计算器(栈)
  7. 重启计算机后桌面顺序是反的,Win10系统为什么重启电脑之后桌面上的图标排列顺序被打乱该如何处理...
  8. 计算机网络(七)——无线局域网
  9. nginx ngx_http_proxy_module(反向代理)
  10. Java期末设计(十三周)
  11. 算法知识点——(5)集成算法—GBDT详解
  12. css文件更新后浏览器网页仍然显示以前的页面解决方法
  13. js html 图片 缓存问题,如何防止浏览器缓存CACHE?将CSS、JS、图片加上参数
  14. 近几年安防工程商面临的困境
  15. 移动端界面设计之尺寸篇
  16. 计算机系给未来的自己写信,给未来的自己写信
  17. 第一阶冲刺段结束后,对于其他组作品的建议
  18. 2022年全球市场易熔合金总体规模、主要生产商、主要地区、产品和应用细分研究报告
  19. linux 时间戳转换/dmesg 时间转换
  20. edu--Web程序设计基础2021秋--【结构元素】【交互元素】【页面结点元素】【文本层次语义元素】【分组元素】

热门文章

  1. 文件包含--简单的代码审计绕过
  2. git基于tag创建分支
  3. 华为android升级国内版,华为EMUI5.0系统升级成为国内安卓升级的标杆
  4. Springboot只允许进入登录注册的页面,没登录页面进行拦截。
  5. c语言电子期末考试题,山东师范大学11-12电子C语言期末试题
  6. Unity 3D网络游戏实战 pdf
  7. 【HDOJ 5384】Danganronpa
  8. 微信小程序开发之路(一)
  9. Strom的trident单词计数代码
  10. 转 Python爬虫入门一之综述