解释一下核主成分分析(Kernel Principal Component Analysis, KPCA)的公式推导过程(转载)
KPCA,中文名称”核主成分分析“,是对PCA算法的非线性扩展,言外之意,PCA是线性的,其对于非线性数据往往显得无能为力,例如,不同人之间的人脸图像,肯定存在非线性关系,自己做的基于ORL数据集的实验,PCA能够达到的识别率只有88%,而同样是无监督学习的KPCA算法,能够轻松的达到93%左右的识别率(虽然这二者的主要目的是降维,而不是分类,但也可以用于分类),这其中很大一部分原因是,KPCA能够挖掘到数据集中蕴含的非线性信息。
今天突然心血来潮,想重新推导一下KPCA的公式,期间遇到了几个小问题,上博客查阅,发现目前并没有一个专注于KPCA公式推导的文章,于是决定写一篇这样的博客(转载请注明:http://blog.csdn.NET/wsj998689aa/article/details/40398777)。
1. 理论部分
KPCA的公式推导和PCA十分相似,只是存在两点创新:
1. 为了更好地处理非线性数据,引入非线性映射函数,将原空间中的数据映射到高维空间,注意,这个
是隐性的,我们不知道,也不需要知道它的具体形式是啥。
2. 引入了一个定理:空间中的任一向量(哪怕是基向量),都可以由该空间中的所有样本线性表示,这点对KPCA很重要,我想大概当时那个大牛想出KPCA的时候,这点就是它最大的灵感吧。话说这和”稀疏“的思想比较像。
假设中心化后的样本集合X(d*N,N个样本,维数d维,样本”按列排列“),现将X映射到高维空间,得到,假设在这个高维空间中,本来在原空间中线性不可分的样本现在线性可分了,然后呢?想啥呢!果断上PCA啊!~
于是乎!假设D(D >> d)维向量为高维空间中的特征向量,
为对应的特征值,高维空间中的PCA如下:
(1)
和PCA太像了吧?这个时候,在利用刚才的定理,将特征向量利用样本集合
线性表示,如下:
(2)
然后,在把代入上上公式,得到如下的形式:
(3)
进一步,等式两边同时左乘,得到如下公式:
(4)
你可能会问,这个有啥用?
这样做的目的是,构造两个出来,进一步用核矩阵K(为对称矩阵)替代,其中:
(5)
第二个等号,是源于核函数的性质,核函数比较多,有如下几种:
于是,公式进一步变为如下形式:
(6)
两边同时去除K,得到了PCA相似度极高的求解公式:
(7)
求解公式的含义就是求K最大的几个特征值所对应的特征向量,由于K为对称矩阵,所得的解向量彼此之间肯定是正交的。
但是,请注意,这里的只是K的特征向量,但是其不是高维空间中的特征向量,回看公式(2),高维空间中的特征向量w应该是由
进一步求出。
这时有的朋友可能会问,这个时候,如果给定一个测试样本,应该如何降维,如何测试?
是这样的,既然我们可以得到高维空间的一组基,这组基可以构成高维空间的一个子空间,我们的目的就是得到测试样本
在这个子空间中的线性表示,也就是降维之后的向量。具体如下:
(8)
于是呼~就可以对降维了,然后就做你想要做的事情。。。。
2. 实验部分
做了一些仿真实验,分别比较了PCA与KPCA之间的效果,KPCA基于不同核函数的效果,二者对于原始数据的要求,以及效果随着参数变化的规律。
1)下面展示的是“无重叠的”非线性可分数据下,PCA与KPCA(基于高斯核)的区别,注意,原始数据是二维数据,投影之后也是二维数据
2)下面展示的是“部分重叠的”非线性可分数据下,PCA与KPCA的区别
3)下面展示的是“无高斯扰动的”非线性可分数据下,PCA与KPCA的区别
4)下面展示的是上述三类数据下,基于多项式核函数的KPCA效果
5)下面展示的是在“部分重叠的”非线性可分数据下,基于多项式核函数的KPCA在不同多项式参数下的效果图
3. 实验结论
4. 代码
function [eigenvalue, eigenvectors, project_invectors] = kpca(x, sigma, cls, target_dim)
% kpca进行数据提取的函数
psize=size(x);
m=psize(); % 样本数
n=psize(); % 样本维数 % 计算核矩阵k
l=ones(m,m);
for i=:m
for j=:m
k(i,j)=kernel(x(i,:),x(j,:),cls,sigma);
end
end % 计算中心化后的核矩阵
kl=k-l*k/m-k*l/m+l*k*l/(m*m); % 计算特征值与特征向量
[v,e] = eig(kl);
e = diag(e); % 筛选特征值与特征向量
[dump, index] = sort(e, 'descend');
e = e(index);
v = v(:, index);
rank = ;
for i = : size(v, )
if e(i) < 1e-
break;
else
v(:, i) = v(:, i) ./ sqrt(e(i));
end
rank = rank + ;
end
eigenvectors = v(:, : target_dim);
eigenvalue = e( : target_dim); % 投影
project_invectors = kl*eigenvectors; %计算在特征空间向量上的投影
end
function [eigenvalue, eigenvectors, project_invectors] = kpca(x, sigma, cls, target_dim)
% kpca进行数据提取的函数
psize=size(x);
m=psize(); % 样本数
n=psize(); % 样本维数 % 计算核矩阵k
l=ones(m,m);
for i=:m
for j=:m
k(i,j)=kernel(x(i,:),x(j,:),cls,sigma);
end
end % 计算中心化后的核矩阵
kl=k-l*k/m-k*l/m+l*k*l/(m*m); % 计算特征值与特征向量
[v,e] = eig(kl);
e = diag(e); % 筛选特征值与特征向量
[dump, index] = sort(e, 'descend');
e = e(index);
v = v(:, index);
rank = ;
for i = : size(v, )
if e(i) < 1e-
break;
else
v(:, i) = v(:, i) ./ sqrt(e(i));
end
rank = rank + ;
end
eigenvectors = v(:, : target_dim);
eigenvalue = e( : target_dim); % 投影
project_invectors = kl*eigenvectors; %计算在特征空间向量上的投影
end
5. 总结
KPCA的算法虽然简单,但是个人认为,它的意义更在于一种思想:将数据隐式映射到高维线性可分空间,利用核函数进行处理,无需知道映射函数的具体形式。这种思想实在是太牛了,它让降维变得更有意义。为这种思想点赞!!!
解释一下核主成分分析(Kernel Principal Component Analysis, KPCA)的公式推导过程(转载)的更多相关文章
- 核主成分分析(Kernel Principal Component Analysis, KPCA)的公式推导过程
KPCA,中文名称”核主成分分析“,是对PCA算法的非线性扩展,言外之意,PCA是线性的,其对于非线性数据往往显得无能为力,例如,不同人之间的人脸图像,肯定存在非线性关系,自己做的基于ORL数据集的实 ...
- Jordan Lecture Note-10: Kernel Principal Components Analysis (KPCA).
Kernel Principal Components Analysis PCA实际上就是对原坐标进行正交变换,使得变换后的坐标之间相互无关,并且尽可能保留多的信息.但PCA所做的是线性变换,对于某些 ...
- R: 主成分分析 ~ PCA(Principal Component Analysis)
本文摘自:http://www.cnblogs.com/longzhongren/p/4300593.html 以表感谢. 综述: 主成分分析 因子分析 典型相关分析,三种方法的共同点主要是用来对数据 ...
- PCA(Principal Component Analysis)主成分分析
PCA的数学原理(非常值得阅读)!!!! PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可 ...
- 从矩阵(matrix)角度讨论PCA(Principal Component Analysis 主成分分析)、SVD(Singular Value Decomposition 奇异值分解)相关原理
0. 引言 本文主要的目的在于讨论PAC降维和SVD特征提取原理,围绕这一主题,在文章的开头从涉及的相关矩阵原理切入,逐步深入讨论,希望能够学习这一领域问题的读者朋友有帮助. 这里推荐Mit的Gilb ...
- (4)主成分分析Principal Component Analysis——PCA
主成分分析Principal Component Analysis 降维除了便于计算,另一个作用就是便于可视化. 主成分分析-->降维--> 方差:描述样本整体分布的疏密,方差越大-> ...
- Robust Principal Component Analysis?(PCP)
目录 引 一些微弱的假设: 问题的解决 理论 去随机 Dual Certificates(对偶保证?) Golfing Scheme 数值实验 代码 Candes E J, Li X, Ma Y, e ...
- Stat2—主成分分析(Principal components analysis)
最近在猛撸<R in nutshell>这本课,统计部分涉及的第一个分析数据的方法便是PCA!因此,今天打算好好梳理一下,涉及主城分析法的理论以及R实现!come on…gogogo… 首 ...
- Simplicial principal component analysis for density functions in Bayes spaces
目录 问题 上的PCA Hron K, Menafoglio A, Templ M, et al. Simplicial principal component analysis for densit ...
随机推荐
- call和apply的作用实例
<script> var scopeTest = function(){ //考察了 this 的含义 window.a=2; function fn(b){ this.b = b; co ...
- tokudb_tmp_dir导致的tokudb加载失败
安装TOKUDB数据库,安装完成后为了使配置生效,重启完数据库后,发现: mysql> show engines; +--------------------+---------+ | Engi ...
- asp.net下配置使用Memcached 如何使用Memcached .ne使用BeITMemcached.dllt配置Memcached的方法
首先在项目中引用 BeITMemcached.dll 在Web.config中配置节点 <configSections> <section name="beitmemcac ...
- bzoj2004(矩阵快速幂,状压DP)
每个长度为p的区间都必须出现k次1,数据又很小,我们使用状压. dp[i][j]->dp[i+1][j'],dp[i][j]表示当前考虑到了第i个车站,包括第i个其后的p个的状态(有车停或没车停 ...
- Servlet组件之 jsp 技术
JSP 简称java服务器页面(java server page),jsp和servlet实现了我们的开发需求.对于jsp技术我们首先需要知道他的组成 HTML+java+jsp内置对象=jsp ...
- 最基本的CentOS 网络配置
一般CentOS 网络配置是根据自己的需求来设定的.但是,对于一些不经常用CentOS的用户来说,不知道基本的CentOS 网络配置.如果你没有特别的要考虑的设置,那么就可以考虑下我推荐的这种Cent ...
- Android viewpager + 可缩放的imageview
http://files.cnblogs.com/files/liaolandemengxiang/PhotoWallFallsDemo.rar http://files.cnblogs.com/fi ...
- hdu5016
题意:给定一个n个点的图,这个图是一棵树,然后有些点建立了集市.并且没有集市的地方去集市一定是去最近的,如果距离相同,那么则去标号最小的..现在你还能在建一个集市,问建完这个集市最多有多少个点来这里. ...
- yum-阿里源配置
原文:https://opsx.alibaba.com/mirrorCentOS 1.备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/ ...
- power designer简单教程
1.file->new model 2.根据菜单或功能模型新建physical diagram(当然也可以新建package) 选中项目,右键——>new ->physical di ...