邻里成分分析

邻里成分分析(Neighbourhood components analysis,Nca)是一种监督式学习的方法,根据一种给定的距离度量算法对样本数据进行度量,然后对多元变量数据进行分类。在功能上其和k近邻算法的目的相同,直接利用随即近邻的概念确定与测试样本临近的有标签的训练样本。

来源:维基百科
简介

邻近成分分析是监督式学习算法中的一种。它主要是用来将多元数据进行分类。在功能上,它和K-临近(KNN)算法一致。

NCA是将马氏距离应用于KNN算法来实现降维的效果,它主要目的是通过找到一个线性变化矩阵,来最大化leave-one-out (LOO)分类精确度。算法的关键点在于可以通过可微的目标函数f(A)来找出线性变化矩阵A,比如说使用共轭梯度法。因此,NCA被普遍应用于模型的选择,降维,结构预测,异常分析,强化学习的神经网络中。

算法步骤:NCA首先将数据根据变换矩阵为Q=A'A转换,再计算出样本之间的距离(采用马氏距离);马氏距离计算如下公式所示,其中A为一个线性变化矩阵,x为label数据,y为target数据。

因为距离是离散的,采用soft方式进行转化,计算出一个点和其余点是相同target的可能性pij

该点与其余所有点相同可能性的和便是该点被正确分类的概率,pi

最终的目标函数就是最大化所有点被正确分类的和,即是一个关于A的目标函数,如下图所示

有了目标函数后,对A进行求导,便可以求出被正确分类的最大可能性;因为函数f对于A来说是服从梯度下降的规则的,所以xij = xi − xj:

经过计算,整理后的结果:

在这里,第一,马氏距离(Mahalanobis distance)来计算样本之间的距离方法中的一种。第二,算法将离散的距离softmax化。

URL:https://en.wikipedia.org/wiki/Neighbourhood_components_analysis

发展历史

对于分类算法来说,KNN( K-nearest neighbors algorithm)是一个非常经典的算法,最早之一的将KNN用于模式识别的算法的是Cover T, Hart P(1967年),计算距离的方式基本利用欧氏距离。因为欧式距离的计算很容易丢失样本中的信息,1993年Simard等人和2002年Belongie等人对KNN提出了新的计算距离的方法来对KNN进行优化。KNN简单并且适用于多目标结果的数据集。然而,KNN也是存在缺点的。

第一个计算量庞大,因为它为了分类一个点,他需要遍历训练集合的所有元素。第二个问题:距离矩阵该怎样定义才能更好体现‘近邻’这个概念。要知道,KNN分类的准确率在很大程度上是依赖于计算距离的方式上。由此distance metic learning 问题就这样被衍生出来了。所以, 2005年,Jacob Goldberger也是在KNN的基础上提出了新的计算距离的方式提出了NCA算法。NCA算法基于马氏距离的线性的变化矩阵不仅减小KNN的计算量庞大的问题,也用新的方式诠释了‘近邻’这个概念。除了Goldberger,同年,Shalev-Shwartz等人也提出了基于KNN的线性变化计算算法。这两位对于输入信息线性的变化的思想大大推动了KNN算法的发展。

然而,Domeniconi发现当训练集数目不够时,NCA会存在过拟合的问题;因此,Domeniconi基于支持向量机提出了一个局部自适应的矩阵来减少估计的偏差。随后,2007年,Salakhutdinov R等人认为NCA的这种线性变换无法对高阶原始数据各个维度的相关性进行建模。所以,提出了 Nonlinear NCA (NNCA) 非线性NCA算法来解决高阶数据问题。在2015年,Y Zheng等人认为无论是NCA 还是NNCA都无法捕捉到时序问题中数据的特性,所以,Y Zheng 等人提出的Convolutional Nonlinear Neighbourhood Components Analysis (CNNCA)卷积非线性NCA算法来解决时序问题中的分类问题。总体来说,NCA现在也被广泛用来解决降维问题,如2016年,Zhou H等人基于NCA和隐马尔科夫算法CHMM提出NCA-CHMM算法来解决故障识别的方法。

Tips: The leave-one-out (LOO)是一种交叉验证的方法。 举例,如样本数据集中有N个样本数据。将每个样本单独作为测试集(test_set),其余N-1个样本作为训练集(train_set),这样得到了N个分类器或模型,用这N个分类器或模型的分类准确率的平均数作为此分类器的性能指标。

主要事件

年份

事件

相关论文

1967

Cover T, Hart P最早提出用于最近邻算法之一

Cover, T., & Hart, P. (1967). Nearest neighbor pattern classification. IEEE transactions on information theory, 13(1), 21-27.

1993

Simard P基于KNN提出应用于模式识别的有效计算距离的计算方式

Simard, P., LeCun, Y., & Denker, J. S. (1993). Efficient pattern recognition using a new transformation distance. In Advances in neural information processing systems (pp. 50-58).

2003

Xing E P提出基于应用的距离度量学习

Bar-Hillel, A., Hertz, T., Shental, N., & Weinshall, D. (2003). Learning distance functions using equivalence relations. In Proceedings of the 20th International Conference on Machine Learning (ICML-03) (pp. 11-18).

2005

Jacob Goldberger基于KNN提出NCA算法

Goldberger, J., Hinton, G. E., Roweis, S. T., & Salakhutdinov, R. R. (2005). Neighbourhood components analysis. In Advances in neural information processing systems (pp. 513-520).

2007

Salakhutdinov R提出NNCA非线性NCA算法

Salakhutdinov, R., & Hinton, G. (2007, March). Learning a nonlinear embedding by preserving class neighbourhood structure. In Artificial Intelligence and Statistics (pp. 412-419).

2016

Zhou H等人基于NCA和隐马尔科夫算法CHMM提出NCA-CHMM算法来解决故障识别的方法

Zhou H, Chen J, Dong G, et al. Bearing fault recognition method based on neighbourhood component analysis and coupled hidden Markov model[J]. Mechanical Systems and Signal Processing, 2016, 66: 568-581.

发展分析

瓶颈

  • 无法对高阶原始数据各个维度的相关性进行建模。
  • NCA中提出的梯度算法不能保证局部极大值的收敛
  • 当训练集数目不够时,NCA会趋向于过拟合。这种情况也经常出现在高维环境中。
  • 无法捕捉到时序问题中的特性。
  • 在NCA中,很有可能收敛于局部极小值

未来发展方向

  • 在NCA中,很有可能收敛于局部极小值。在实践中,算法依赖于距离度量的初始值;所以可以对算法地初始化进行预处理。
  • 可以结合神经网络来解决高阶数据源的问题。当然除此之外,要思考其他方法来解决高阶数据的问题。
  • 可以结合隐马尔科夫算法来解决时序问题。

Contributor: Ruiying Cai

简介