当前位置: 首页 > news >正文

核方法总结(三)———核主成分(kernel PCA)学习笔记

一、核主成分

    1.1 和PCA的区别

         PCA (主成分分析)对应一个线性高斯模型(参考书的第二章),其基本假设是数据由一个符合正态分布的隐变量通过一个线性映射得到,因此可很好描述符合高斯分布的数据。然而在很多实际应用中数据的正态性不能保证,这时用PCA建模通常会产生较大偏差。这时可以设计一个合理的非线性映射,将原始数据映射到特征空间,使数据在该空间的映射具有高斯性,在这个基础可进行有效的PCA建模。即通过核函数间接映射到特征空间再间接进行建模,所以称为核主成分分析;

       1.2 推导过程

         定义原始数据空间样本为\left \{ x_{n} \right \},非线性映射为\phi \left ( x \right ),且在原始空间和特征空间满足如下归一化条件。

           \sum _{n}{x_{n}} = 0 \sum _{n}{\phi (x_{n})} = 0   1------(1)

      在映射空间的协方差矩阵可写作:

  1----(2)

上式中,假设\phi \left ( x_{n} \right )有m维,则\phi \left ( x_{n} \right )\phi \left ( x_{n} \right )^{T}有m*m维。其中,在特征空间中求主成分v等价于求S^{\phi }的特征向量:

S^{\phi }v = \lambda v   1----(3)

整理以上两式可得:

1-----(4)

其中:\alpha = \frac{1}{N\mu }\Phi ^{T}\nu , 是一个N维向量,其中每一维对应一个数据点与特征向量v的内积,同时,上式说明在特征空间的特征向量v由所有数据样本的向量加权平均得到,权重为\alpha,转化为对偶问题。将 v = \Phi \alpha 代回式 1 ----(4)  :

                                1----(5)、1-----(6)、1----(7)

其中 K为gram阵, 上式1—(7)右项左移,可以看出K选择合适的核函数,会使K不等于空矩阵,因而可以推出:

K\alpha = \lambda N\alpha   1——(8) 为1——(7)式的必要条件

考虑特征向量v应满足v^{T}v =1 ,而 v=\Phi \alpha,有:

1-----(9)

将1---(8)式左乘\alpha ^{T}并代入上式,有:

\lambda N\alpha ^{T}\alpha =1   1----(10)

    \alpha可以通过下式求解:

   1------(11)

    上式求解特征向量的方法是,求解左式的特征向量,再取\alpha =  \alpha \sqrt{\frac{1}{\lambda N}} 就可以求得满足约束的特征向量。解出\alpha后,即可基于1—(4)式得到在特征空间的主成分向量。和标准PCA类似,我们可以求得多个主成分,组成主成分向量集{v_{i}}。

    基于{v_{i}}可对任意测试样本x降维,且等价于在特征空间中计算\phi \left ( x_{} \right )在各个主成分v_{i}上的投影,计算如下:

   1———(12)

上式 \alpha _{i,n} 表示特征向量v_{i}对应的权重的第n维(n=1.....N)。

        虽然我们的目的是在特征空间进行主成分提取并给予得到的主成分对数据进行降维,但不需要在特征空间进行操作,所有计算都在原始空间中以核函数方式进行,计算得到的结果等价于在特征空间中进行。这使得可以在非常复杂的特征空间中对数据进行PCA建模,从而解决了原始数据的非高斯化问题,使PCA具有灵活性和可扩展性。

二、总结

      本文是学习《机器学习导论》(清华大学出版社,中文版,王东,2021年)的摘录总结或笔记。

相关文章:

  • 【Python】字典练习
  • 深入了解 Redis 五种类型命令与如何在 Java 中操作 Redis
  • 冒泡排序写法
  • javaEE——Servlet
  • 探索哈希函数:数据完整性的守护者
  • 线性代数笔记
  • 软考系统架构师高效备考方法论
  • Python从零学习笔记(1)
  • 接口测试流程及测试点!
  • JS数据处理(冒泡寻找对象里面有个Key相同的值并处理相关数据)
  • slot插槽详解及动态插槽的使用
  • 全网最详细,零基础学会AI绘画Stable Diffusion,学不会来打我!
  • 【第二套】华为 2024 年校招-硬件电源岗
  • Pandas_DataFrame读写详解:案例解析(第24天)
  • 基于Datax开发支持瀚高数据库的插件_插件开发_以及部署---国产瀚高数据库工作笔记006
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • axios 和 cookie 的那些事
  • Javascript Math对象和Date对象常用方法详解
  • Javascript弹出层-初探
  • js正则,这点儿就够用了
  • k8s如何管理Pod
  • MYSQL 的 IF 函数
  • oschina
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Python3爬取英雄联盟英雄皮肤大图
  • python大佬养成计划----difflib模块
  • sublime配置文件
  • 前端性能优化——回流与重绘
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 说说动画卡顿的解决方案
  • 温故知新之javascript面向对象
  • puppet连载22:define用法
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​ubuntu下安装kvm虚拟机
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • #14vue3生成表单并跳转到外部地址的方式
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (1)常见O(n^2)排序算法解析
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (3)(3.5) 遥测无线电区域条例
  • (七)Knockout 创建自定义绑定
  • (三) diretfbrc详解
  • (四)linux文件内容查看
  • (一)u-boot-nand.bin的下载
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • .NET Core 版本不支持的问题
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .NET 常见的偏门问题
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • @KafkaListener注解详解(一)| 常用参数详解
  • @开发者,一文搞懂什么是 C# 计时器!