邻域保留投影算法(NPE)(Neighborhood Preserving Embedding)算法详解

上一篇降维算法的相关论文为LPP算法,也是何小飞老师的论文https://blog.csdn.net/qq_39187538/article/details/90402961

1.问题导入

2.算法出处

3.算法详解

4.算法步骤

1.问题导入:

降维的目的是为了缓解维数灾难,比如原始空间X=[x1,x2,...xn],每一个xi有m个维度,要将其降维到Y=[y1,y2,...,yn],每一个yi成为了m'维度(m'<<m),需要一个矩阵P,使得yi=P'X(注:这里P'表示P的转置),当m足够大的时候,对其进行内积运算就会产生内存不足的情况,特别是在处理人脸数据集,一个人脸数据集假如是100X100的(这还是一个比较小的人脸数据),reshape操作之后就会成为10000X1的,对其直接进行knn分类或者svm分类就有可能产生内存不足,而且人脸数据集中有很多冗余的信息,降维的目的就是剔除这些冗余的信息,构建一个新的坐标轴,使原始数据点能够投影到新的坐标轴上(关于投影最直接的一个例子就是pca将二维x,y轴二维数据集降维到一维的数据集,可以参考西瓜书上的说明),找到这个最优的坐标轴也就是成了降维优劣的衡量标准了(具体的衡量是降维后的数据集进行分类,比较精度,kappa系数等等)。

2.算法出处:

算法全称《Neighborhood Preserving Embedding》源自何小飞教授的会议论文X.He,D.cai,S.Yan,H.Zhang,Neighborhood Preserving Embedding,in:Proceedings in International Conference on Computer Vision(ICCV),2005的定会上。算法改编自LLE算法,LLE是S.Roweis,L.Saul,Nonlinear dimensionality reduction by locally linear embedding,Science 290(5500)(2000)2323-2326,发表在science上的论文。

3.算法详解:

算法的步骤其实跟LPP差不多,都是通过样本是通过邻域近似线性表示得到的,但是构造函数不相同,LPP的可以看我的另外一篇文章https://blog.csdn.net/qq_39187538/article/details/90402961,如果不懂降维相关的,推荐先从pca开始看,可以看南京大学周志华教授的著作《机器学习》俗称西瓜书。这里npe的算法原理就是最小化重构误差来达到降维效果的最优,而lpp是对某一数据集,计算他与所有点的欧式距离,这是lpp与npe的不同之处。并且重构是通过k近邻的形式进行的线性重构。关于lle的图解图下:

npe的损失函数如下:

(1)

(2)

3.1此函数的物理意义:

(1)是论文里面的,但是不便于理解,我就根据1中的问题导入,将公式改为(2)的形式,便于理解一般损失函数都是min的形式。这里xi表示的是降维后空间中的任意数据点,xj表示的是xi的k近邻,可以表示成xj属于k(xi),注意这里的j是表示的个数,函数的物理意义就是,后面的一部分表示的就是由xi的k近邻的所有数据点的一个线性表示来重构xi(所以要使用j=1到k的求和的形式),然后最前面的i=1到n(表示的是所有的数据集)求和。当损失函数最小的时候(理想是0,就表示,这个时候xi=后面的一部分,但是实际情况中不可能满足所有的,因此使用min来达到最优)。这里也是通过欧式距离来衡量两点之间的距离的。计算降维后的损失函数就可以将x替换为y。

3.2.公式推导:

这里的公式推导,可以先将其转化为向量的形式进行。M=(I-W)'(I-W)(注:这里‘表示的是转置)。

4.算法步骤:

4.1:构建近邻图:

这里跟LPP一样由两种形式:

一种是计算距离,然后排序,并按照从小到大进行取前k个,那么这前k个就是其k近邻。不过这里构建的是有向边,而lpp构建的是无向边。

第二种是kesai球的形式,也是一样一般不怎么使用,因为这个kesai处理的问题不一样,那么kesai的取值就不稳定。

4.2计算权重:

计算权重的形式可以参考LLE的相关论文也就是上面提及到的Science论文。Sam Roweis, and Lawrence K. Saul, “Nonlinear Dimensionality Reduction by Locally Linear Embedding,” Science, vol 290, 22 December 2000.

4.3:计算投影矩阵

根据上面的形式,这里有两个固定的思路,就是如果采用重建的形式,一般的约束都是a'XIX'a这种形式。如果是采用LPP那种,将每两两数据点之间的距离进行度量,那么就是使用D的形式构造,关于LPP的可以参考我的关于LPP的讲解https://blog.csdn.net/qq_39187538/article/details/90402961,所以这里就使用这种形式。

转化为特征值问题就是:

然后可以使用matlab自带的函数进行处理[eigvector, eigvalue] = eig(XMX',XX')(注:这里的‘表示的是转置的意思’);

 

 

 

 

  • 9
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值