【一步一步的积累】Neighbourhood Components Analysis

来源:互联网 发布:破壁机 原汁机 知乎 编辑:程序博客网 时间:2024/05/22 06:42

(NIPS 2004) Neighbourhood Components Analysis (前半部分)

这段时间在看手势估计方面的文章的时候,发现很多人在使用NCA这个东西,一查才知道这是Hinton他们弄的,难怪呢。。。。文章比较老,但是思路还是很有参考意义。

首先作者以KNN来引入。KNN的功效大家都知道,这样野蛮的算法在一些应用里面却有着神奇的功效。但是要用KNN,一定要做的是:定义一种距离,然后计算距离,并且是和每一个样本集合里面的样本都算一遍距离。那么问题就来了:什么样的距离是好距离?如今动辄百千万的数据样本撸一遍还谈何实时?

所以作者提出了两个美好愿望:

  1. 自动学习出一个计算距离方式,就想深度网络来自动提取feature那样的美好。(想想还真不愧是Hinton的学生)
  2. 把计算距离的计算变简单:降低维度。这样的计算速度就可以达到哗哗的了。
一个好的算法就是简单,清晰,实用。首先假设变换A,能把样本x变换到低维空间y=Ax, 接下来设定一个目标函数:就是如果寻找到K个NN,希望能找到的正确的label的期望越高越好,于是有了从距离到possibility的转换:

关于上述公式的定义请参照论文。定义了这样的概率,既可以设定目标函数了:

这个目标函数可以理解为最大化被正确分类的点数的期望(expected number of points correctly classified)。这也等同于最小化了类间的L1 norm。

A是参数,f是目标函数,接下来就是如何去优化的问题了。。


本文的思想很有启发性。
作者也提供了详细讲解的视频:http://videolectures.net/mlss06tw_roweis_nca/
代码地址:https://github.com/vomjom/nca

0 0