Python机器学习:5.6 使用核PCA进行非线性映射
许多机器学习算法都有一个假设:输入数据要是线性可分的。感知机算法必须针对完全线性可分数据才能收敛。考虑到噪音,Adalien、逻辑斯蒂回归和SVM并不会要求数据完全线性可分。
但是现实生活中有大量的非线性数据,此时用于降维的线性转换手段比如PCA和LDA效果就不会太好。这一节我们学习PCA的核化版本,核PCA。这里的"核"与核SVM相近。 运用核PCA,我们能将非线性可分的数据转换到新的、低维度的特征子空间,然后运用线性分类器解决。

核函数和核技巧
还记得在核SVM那里,我们讲过解决非线性问题的手段是将他们映射到新的高维特征空间,此时数据在高维空间线性可分。为了将数据
映射到高维k空间,我们定义了非线性映射函数
:

我们可以把核函数的功能理解为:通过创造出原始特征的一些非线性组合,然后将原来的d维度数据集映射到k维度特征空间,d<k。举个例子,特征向量
,x是列向量包含d个特征,d=2,可以按照如下的规则将其映射到3维度特征空间:

同理核PCA的工作机制:通过核PCA的非线性映射,将数据转换到一个高维度空间,然后在这个高维度空间运用标准PCA重新将数据映射到一个比原来还低的空间,最后就可以用线性分类器解决问题了。不过,这种方法涉及到两次映射转换,计算成本非常高,由此引出了核技巧(kernel trick)。
使用核技巧,我们能在原始特征空间直接计算两个高维特征向量的相似性(不需要先特征映射,再计算相似性)。
在介绍核技巧前,我们先回顾标准PCA的做法。我们按照如下公式计算两个特征k和j的协方差:

由于我们对数据已做过标准化处理,特征平均值为0,上式等价于:

同样,我们能够得到协方差矩阵:

Bernhard Scholkopf(B. Scholkopf, A.Smola, and K.R. Muller. Kernel Principal Component Analysis. pages 583-588, 1997)得到了上式的泛化形式,用非线性特征组合
替换原始数据集两个样本之间的点乘:

为了从协方差矩阵中得到特征向量(主成分),我们必须求解下面的等式:

其中,
是协方差矩阵
的特征值和特征向量,
的求法见下面几段内容。
我们求解核矩阵:
首先,我们写出协方差矩阵的矩阵形式,
是一个n*k的矩阵:

我们将特征向量写作:

由于
,得:

等式两边左乘
:

这里的
就是相似性(核)矩阵:

回忆核SVM我们使用核技巧避免了直接计算
:

核PCA同样不需要像标准PCA那样构建转换矩阵,我们使用核函数代替计算
。所以,你可以把核函数(简称,核)理解为计算两个向量点乘的函数,结果可看做两个向量的相似度。
常用的核函数有:
- 多项式核:
,
是阈值,
是由用户设定的指数。
- 双曲正切(sigmoid)核:

- 径向基函数核(高斯核):

现在总结一下核PCA的步骤,以RBF核为例:
1 计算核(相似)矩阵k,也就是计算任意两个训练样本:

得到K:

举个例子,如训练集有100个样本,则对称核矩阵K的维度是100*100。
2 对核矩阵K进行中心化处理:

其中,
是n*n的矩阵,n=训练集样本数,
中每个元素都等于
.
3 计算
的特征值,取最大的k个特征值对应的特征向量。不同于标准PCA,这里的特征向量并不是主成分轴。
第2步为什么要计算
? 因为在PCA我们总是处理标准化的数据,也就是特征的平均值为0。当我们用非线性特征组合
替代点乘时,我们并没有显示计算新的特征空间也就没有在新特征空间做标准化处理,我们不能保证新特征空间下的特征平均值为0,所以要对K做中心化。
Python机器学习中文版目录(http://www.aibbt.com/a/20787.html)
转载请注明出处,Python机器学习(http://www.aibbt.com/a/pythonmachinelearning/)
Python机器学习:5.6 使用核PCA进行非线性映射的更多相关文章
- Python机器学习中文版
Python机器学习简介 第一章 让计算机从数据中学习 将数据转化为知识 三类机器学习算法 第二章 训练机器学习分类算法 透过人工神经元一窥早期机器学习历史 使用Python实现感知机算法 基于Iri ...
- Python机器学习中文版目录
建议Ctrl+D保存到收藏夹,方便随时查看 人工智能(AI)学习资料库 Python机器学习简介 第一章 让计算机从数据中学习 将数据转化为知识 三类机器学习算法 第二章 训练机器学习分类算法 透过人 ...
- Python机器学习笔记:奇异值分解(SVD)算法
完整代码及其数据,请移步小编的GitHub 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/MachineLearningNote 奇异值分解(Singu ...
- 只需十四步:从零开始掌握 Python 机器学习(附资源)
分享一篇来自机器之心的文章.关于机器学习的起步,讲的还是很清楚的.原文链接在:只需十四步:从零开始掌握Python机器学习(附资源) Python 可以说是现在最流行的机器学习语言,而且你也能在网上找 ...
- Python机器学习笔记:sklearn库的学习
网上有很多关于sklearn的学习教程,大部分都是简单的讲清楚某一方面,其实最好的教程就是官方文档. 官方文档地址:https://scikit-learn.org/stable/ (可是官方文档非常 ...
- Python机器学习笔记:不得不了解的机器学习面试知识点(1)
机器学习岗位的面试中通常会对一些常见的机器学习算法和思想进行提问,在平时的学习过程中可能对算法的理论,注意点,区别会有一定的认识,但是这些知识可能不系统,在回答的时候未必能在短时间内答出自己的认识,因 ...
- 只需十四步:从零开始掌握Python机器学习(附资源)
转载:只需十四步:从零开始掌握Python机器学习(附资源) Python 可以说是现在最流行的机器学习语言,而且你也能在网上找到大量的资源.你现在也在考虑从 Python 入门机器学习吗?本教程或许 ...
- [Python] 机器学习库资料汇总
声明:以下内容转载自平行宇宙. Python在科学计算领域,有两个重要的扩展模块:Numpy和Scipy.其中Numpy是一个用python实现的科学计算包.包括: 一个强大的N维数组对象Array: ...
- PRML读书会第十二章 Continuous Latent Variables(PCA,Principal Component Analysis,PPCA,核PCA,Autoencoder,非线性流形)
主讲人 戴玮 (新浪微博: @戴玮_CASIA) Wilbur_中博(1954123) 20:00:49 我今天讲PRML的第十二章,连续隐变量.既然有连续隐变量,一定也有离散隐变量,那么离散隐变量是 ...
随机推荐
- SqlSugar ORM 入门到精通【一】入门篇
背景 SqlSugar是一款国产ORM,除了拥有媲美原生的性能 另外还有满足各种需求的功能,简单好用一分钟就能够轻松上手. 2.x版本正式在自已公司内部项目使用 3.x版本得到了更多公司的喜欢不过也会 ...
- LNMP搭建01 -- 编译安装MySQL 5.6.14 和 LNMP相关的区别
[编译安装MySQL 5.6.14] [http://www.cnblogs.com/xiongpq/p/3384681.html ] [mysql-5.6.14.tar.gz 下载] http:/ ...
- HTML/CSS 知识点
整个前端开发的工作流程 产品经理提出项目需求 UI出设计稿 前端人员负责开发静态页面(跟前端同步的后台人员在准备数据) 前后台的交互 测试 产品上线(后期项目维护) 互联网原理 当用户在浏览器输入网址 ...
- Pycharm常用的使用方法
PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试.语法高亮.Project管理.代码跳转.智能提示.自动完成.单元测试.版本控制. ...
- 写好Java代码的30条经验总结(转)
成为一个优秀的Java程序员,有着良好的代码编写习惯是必不可少的.下面就让我们来看看代码编写的30条建议吧. (1) 类名首字母应该大写.字段.方法以及对象(句柄)的首字母应小写.对于所有标识符,其中 ...
- Java注释用处
1.Java注释: import cn.lonecloud.Doc; /** * Created by lonecloud on 2017/8/17. * 测试注释类型 {@link Doc#test ...
- Mac下使用SSH(密钥)访问Github
1,终端中输入:cd ~/.ssh 如果出现 -bash: cd: /Users/glamor/.ssh: No such file or directory,说明你之前没有用过.直接执行第二步. 如 ...
- Vue.directive 自定义指令的问题
1.今天复习一下Vue自定义指令的代码,结果出现一个很无语的结果,先贴代码. 2. <div id="example" v-change-by="myColor&q ...
- php-fpm问题
这个问题怎么说呢?之前遇到这个问题内心是奔溃的.因为我压根不知道是哪里出问题啦.不过,在我努力探索下,最终还是解决了问题. so请记住,坚持不一定成功,但放弃一定失败. 简单描述一下问题: 1.本地的 ...
- Kotlin——基础的函数/方法详解
对于Kotlin中的函数来说,和JavaScript或者Lua这些语言很像,它有着这些语言的特性.但是也与这些语言就着许多不同之处.或许你更了解Java语言,然而对于Java语言来说,它不是不是闭包这 ...