解释一下核主成分分析(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. 实验结论

1. 从2.1中我们可以看出,PCA与KPCA对于非线性数据各自的处理能力,仔细观察PCA其实只对原始数据进行了旋转操作,这是由于其寻找的是数据的“主要分布方向”。KPCA可以将原始数据投影至线性可分情况,其原因就是第一部分所说的内容。

2. 至于为何将数据分为“无重叠”,“部分重叠”,“无高斯扰动”,是自己在试验中发现,对于部分重叠的数据,KPCA不能将数据投影至完全线性可分的程度(2.3第三幅图中,不同类别数据仍旧存在重叠现象),这说明KPCA只是个无监督的降维算法,它不管样本的类别属性,只是降维而已。

3. 这里提供了高斯核与多项式核的效果,我们很容易发现,二者的效果有很大不同,这直观地说明不同核函数具有不同的特质。并且,针对于无高斯扰动数据,始终没有找到参数p,有可能针对这类数据,多项式核函数无能为力。

4. 2.5中展示了多项式核的参数影响,我们可以发现,往往p值是偶数时,数据可以做到近似线性可分,p是奇数时,数据分布的形态也属于另外一种固定模式,但是不再是线性可分。

4. 代码

前面给出了自己对KPCA的理论解释,以及做的一些基础实验,不给出实现代码,就不厚道了,代码如下所示,一部分是KPCA算法代码,另一部分是实验代码。

 1 function [eigenvalue, eigenvectors, project_invectors] = kpca(x, sigma, cls, target_dim)
 2     % kpca进行数据提取的函数
 3     psize=size(x);
 4     m=psize(1);     % 样本数
 5     n=psize(2);     % 样本维数
 6
 7
 8     % 计算核矩阵k
 9     l=ones(m,m);
10     for i=1:m
11         for j=1:m
12            k(i,j)=kernel(x(i,:),x(j,:),cls,sigma);
13         end
14     end
15
16
17     % 计算中心化后的核矩阵
18     kl=k-l*k/m-k*l/m+l*k*l/(m*m);
19
20
21     % 计算特征值与特征向量
22     [v,e] = eig(kl);
23     e = diag(e);
24
25
26     % 筛选特征值与特征向量
27     [dump, index] = sort(e, ‘descend‘);
28     e = e(index);
29     v = v(:, index);
30     rank = 0;
31     for i = 1 : size(v, 2)
32         if e(i) < 1e-6
33             break;
34         else
35             v(:, i) = v(:, i) ./ sqrt(e(i));
36         end
37         rank = rank + 1;
38     end
39     eigenvectors = v(:, 1 : target_dim);
40     eigenvalue = e(1 : target_dim);
41
42
43     % 投影
44     project_invectors = kl*eigenvectors;   %计算在特征空间向量上的投影
45 end  
function [eigenvalue, eigenvectors, project_invectors] = kpca(x, sigma, cls, target_dim)
    % kpca进行数据提取的函数
    psize=size(x);
    m=psize(1);     % 样本数
    n=psize(2);     % 样本维数  

    % 计算核矩阵k
    l=ones(m,m);
    for i=1:m
        for j=1: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 = 0;
    for i = 1 : size(v, 2)
        if e(i) < 1e-6
            break;
        else
            v(:, i) = v(:, i) ./ sqrt(e(i));
        end
        rank = rank + 1;
    end
    eigenvectors = v(:, 1 : target_dim);
    eigenvalue = e(1 : target_dim);  

    % 投影
    project_invectors = kl*eigenvectors;   %计算在特征空间向量上的投影
end  

5. 总结

KPCA的算法虽然简单,但是个人认为,它的意义更在于一种思想:将数据隐式映射到高维线性可分空间,利用核函数进行处理,无需知道映射函数的具体形式。这种思想实在是太牛了,它让降维变得更有意义。为这种思想点赞!!!

转自: http://blog.csdn.net/wsj998689aa/article/details/40398777                      作者:迷雾forest

时间: 2024-07-30 10:07:06

解释一下核主成分分析(Kernel Principal Component Analysis, KPCA)的公式推导过程(转载)的相关文章

核主成分分析(Kernel Principal Component Analysis, KPCA)的公式推导过程

KPCA,中文名称"核主成分分析",是对PCA算法的非线性扩展,言外之意,PCA是线性的,其对于非线性数据往往显得无能为力,例如,不同人之间的人脸图像,肯定存在非线性关系,自己做的基于ORL数据集的实验,PCA能够达到的识别率只有88%,而同样是无监督学习的KPCA算法,能够轻松的达到93%左右的识别率(虽然这二者的主要目的是降维,而不是分类,但也可以用于分类),这其中很大一部分原因是,KPCA能够挖掘到数据集中蕴含的非线性信息. 1. 理论部分 KPCA的公式推导和PCA十分相似,只

主成分分析(Principal Component Analysis,PCA

主成分分析(Principal Component Analysis,PCA)是将多个变量通过线性变换以选出较少几个重要变量的多元统计分析方法. 原理:在用统计分析方法研究多变量的课题时,变量个数太多就会增加课题的复杂性.人们自然希望变量个数较少而得到的信息较多.在很多情形,变量之间是有一定的相关关系的,当两个变量之间有一定相关关系时,可以解释为这两个变量反映此课题的信息有一定的重叠.主成分分析是对于原先提出的所有变量,将重复的变量(关系紧密的变量)删去多余,建立尽可能少的新变量,使得这些新变量

【转载】主成分分析(Principal components analysis)-最小平方误差解释

主成分分析(Principal components analysis)-最小平方误差解释 接上篇 3.2 最小平方误差理论 假设有这样的二维样本点(红色点),回顾我们前面探讨的是求一条直线,使得样本点投影到直线上的点的方差最大.本质是求直线,那么度量直线求的好不好,不仅仅只有方差最大化的方法.再回想我们最开始学习的线性回归等,目的也是求一个线性函数使得直线能够最佳拟合样本点,那么我们能不能认为最佳的直线就是回归后的直线呢?回归时我们的最小二乘法度量的是样本点到直线的坐标轴距离.比如这个问题中,

Stat2&mdash;主成分分析(Principal components analysis)

最近在猛撸<R in nutshell>这本课,统计部分涉及的第一个分析数据的方法便是PCA!因此,今天打算好好梳理一下,涉及主城分析法的理论以及R实现!come on-gogogo- 首先说一个题外话,记得TED上有一期,一个叫Simon Sinek的年轻人提出了一个全新的Why-How-What黄金圈理论(三个同心圆,最里面的一个是Why,中间一层是How,最外面一层是What:一般人的思维习惯是从里面的圆逐渐推到外面,而创造了伟大作品.引领了伟大运动的人们,其思维习惯则恰恰相反,逆向思维

PCA(principal component analysis)主成分分析法

<Aggregating local descriptors into a compact image representation>论文笔记 在论文中,提取到VLAD特征后,要对特征向量进行PCA降维,就是用一个大小为D' * D的矩阵M,对VLAD特征向量x做变换,降维后的vector是x' = Mx,x'的大小是D'维.矩阵M是由原样本的协方差矩阵的D'个特征向量构成. 为什么M要是特征向量的矩阵呢? 根据PRML中的内容,理解如下: 1,Maxinum Variance Formula

主成分分析(principal components analysis, PCA)

原理 计算方法 主要性质 有关统计量 主成分个数的选取 ------------------------------------------------------------------------------------------------------------------------ http://my.oschina.net/gujianhan/blog/225241 ---------------------------------------------------------

主成分分析(Principal components analysis)-最大方差解释

转载地址:http://www.cnblogs.com/jerrylead/archive/2011/04/18/2020209.html 1. 问题 真实的训练数据总是存在各种各样的问题: 1. 比如拿到一个汽车的样本,里面既有以“千米/每小时”度量的最大速度特征,也有“英里/小时”的最大速度特征,显然这两个特征有一个多余. 2. 拿到一个数学系的本科生期末考试成绩单,里面有三列,一列是对数学的兴趣程度,一列是复习时间,还有一列是考试成绩.我们知道要学好数学,需要有浓厚的兴趣,所以第二项与第一

用PCA降维 (Principal Component Analysis,主成分分析)

参考资料:Mastering Machine Learning With scikit-learn 降维致力于解决三类问题.第一,降维可以缓解维度灾难问题.第二,降维可以在压缩数据的同时让信息损失最 小化.第三,理解几百个维度的数据结构很困难,两三个维度的数据通过可视化更容易理解 PCA简介 主成分分析也称为卡尔胡宁-勒夫变换(Karhunen-Loeve Transform),是一种用于探索高维数据结 构的技术.PCA通常用于高维数据集的探索与可视化.还可以用于数据压缩,数据预处理等.PCA可

【统计学习】主成分分析PCA(Princple Component Analysis)从原理到实现

[引言]--PCA降维的作用 面对海量的.多维(可能有成百上千维)的数据,我们应该如何高效去除某些维度间相关的信息,保留对我们"有用"的信息,这是个问题. PCA给出了我们一种解决方案和思路. PCA给我的第一印象就是去相关,这和数据(图像.语音)压缩的想法是一致的.当然,PCA像是一种有损的压缩算法.但是不要紧,去除掉的信息也许是噪声呢,而且损失的信息不是"主要成分". PCA 降维的概念不是简单的去除原特征空间的某些维度,而是找出原特征空间的新的正交基,并且这个