许多机器学习算法都有一个假设:输入数据要是线性可分的。感知机算法必须针对完全线性可分数据才能收敛。考虑到噪音,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进行非线性映射的更多相关文章

  1. Python机器学习中文版

    Python机器学习简介 第一章 让计算机从数据中学习 将数据转化为知识 三类机器学习算法 第二章 训练机器学习分类算法 透过人工神经元一窥早期机器学习历史 使用Python实现感知机算法 基于Iri ...

  2. Python机器学习中文版目录

    建议Ctrl+D保存到收藏夹,方便随时查看 人工智能(AI)学习资料库 Python机器学习简介 第一章 让计算机从数据中学习 将数据转化为知识 三类机器学习算法 第二章 训练机器学习分类算法 透过人 ...

  3. Python机器学习笔记:奇异值分解(SVD)算法

    完整代码及其数据,请移步小编的GitHub 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/MachineLearningNote 奇异值分解(Singu ...

  4. 只需十四步:从零开始掌握 Python 机器学习(附资源)

    分享一篇来自机器之心的文章.关于机器学习的起步,讲的还是很清楚的.原文链接在:只需十四步:从零开始掌握Python机器学习(附资源) Python 可以说是现在最流行的机器学习语言,而且你也能在网上找 ...

  5. Python机器学习笔记:sklearn库的学习

    网上有很多关于sklearn的学习教程,大部分都是简单的讲清楚某一方面,其实最好的教程就是官方文档. 官方文档地址:https://scikit-learn.org/stable/ (可是官方文档非常 ...

  6. Python机器学习笔记:不得不了解的机器学习面试知识点(1)

    机器学习岗位的面试中通常会对一些常见的机器学习算法和思想进行提问,在平时的学习过程中可能对算法的理论,注意点,区别会有一定的认识,但是这些知识可能不系统,在回答的时候未必能在短时间内答出自己的认识,因 ...

  7. 只需十四步:从零开始掌握Python机器学习(附资源)

    转载:只需十四步:从零开始掌握Python机器学习(附资源) Python 可以说是现在最流行的机器学习语言,而且你也能在网上找到大量的资源.你现在也在考虑从 Python 入门机器学习吗?本教程或许 ...

  8. [Python] 机器学习库资料汇总

    声明:以下内容转载自平行宇宙. Python在科学计算领域,有两个重要的扩展模块:Numpy和Scipy.其中Numpy是一个用python实现的科学计算包.包括: 一个强大的N维数组对象Array: ...

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

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

随机推荐

  1. Java中excel与对象的互相转换的通用工具类编写与使用(基于apache-poi-ooxml)

    通用excel与对象相互转换的工具类 前言:最近开发需要一个Excel批量导入或者导出的功能,之前用过poi-ooxml开发过一个导入的工具类,正好蹭着这次机会,把工具类的功能进行完善. 使用说明: ...

  2. PHP输出打印方法

    PHP这门语言灵活而充满众多的API和用法,然而在这个技术领域里却缺乏一些系统的总结归纳.或许这与PHP语言的诞生方式有关,衍生,快速变化,原始限制等等,诸多因素决定这门语言变得smarty,却没有人 ...

  3. 织梦使用if判断某个字段是否为空

    织梦如何使用if判断某个字段是否为空呢?我们以文章页调用文章摘要为例: 使用if语句判断摘要是否为空,如果有摘要就显示摘要模块,如果没有就不显示 {dede:field.description run ...

  4. [Codeforces]817F. MEX Queries 离散化+线段树维护

    [Codeforces]817F. MEX Queries You are given a set of integer numbers, initially it is empty. You sho ...

  5. 解析JavaScript函数的多种写法

    本文主要分析了JavaScript中函数的几种写法,具体如下: 1.函数的声明和表达式(旧方法,也是最常见的方法) 2.通过Function构造器 这也是一种从一开始就存在方法,但是因为书写麻烦等原因 ...

  6. Java经典编程题50道之三十九

    写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度. public class Example39 {    public static void main(String[] a ...

  7. spring 组件自动装载示例(@ComponentScan,@Component,@Scope)

    今天学习spring的bean组件装载功能,个人不太喜欢xml文件一个个配置bean的方式,所以主要学习测试注解式的自动装载方式.下面将简单说明下@Component的用法,简单入门示例献给大家.   ...

  8. Java语言的特性

    一.跨平台 借助虚拟机,程序不经修改即可在不同硬件或者软件平台上运行.源代码级(C,C++源码会重新编译),目标代码级(Java). 二.面向对象 以对象为基本单位,使得程序开发变得简单易用,拓展更方 ...

  9. hdu 2045 递推

    从n>=4开始考虑,只考虑n-1和1的颜色是否相等情况.推出公式F(n)=F(n-1)+2*F(n-2) AC代码: #include<cstdio> const int maxn= ...

  10. uva211 回溯

    大致题意:每个多米诺骨牌可能横着,也可能竖着,请你判断有哪些合法的摆放方式. 这题的dfs需要注意一下,不能以某个点直接开始延伸,如果这样延伸可能会无法到达终点(也就是遍历全图).我的dfs方法就是枚 ...