距离度量学习

为什么学习距离度量?

在机器学习中,对高维数据进行降维的主要目的是希望找到一个合适的低维空间,在此空间中进行学习能比原始空间性能更好.事实上,每个空间对应了在样本属性上定义的一个距离度量,而寻找合适的空间,实质上就是在寻找一个合适的距离度量.那么,为何不直接尝试“ 学习” 出一个合适的距离度量呢?这就是度量学习(metric learning)的基本动机.

扩展

度量学习的目的是在样本上学习距离度量函数. 距离度量函数必须服从4个公理非负性,对称性,次可加性及不可分与同一性.在实践中,度量学习算法一般忽略了不可分与同一性并学习伪度量.

首先,了解伪度量空间.伪度量空间是度量空间的推广,一个伪度量空间\((X,d)\)是有非负实值函数组成的集合\(X\),若\(d:X \times X\mathbb{\rightarrow R \geq}0\),对于\(\forall x,y,z \in X\)满足条件则可称为伪度量.

\[{d(x,x) = 0
}{d(x,y) = d(y,x)
}\]

与度量空间不同,伪度量空间中的点可能不满足不可分与同一性,也就是说如果\(d(x,y) = 0\)可能\(x \neq y\).

假设有集合\(\mathcal{S} = \left( x_{i}|x_{i} \subseteq \mathbb{R}^{n} \right)\),给出了成对相似矩阵的定义,它是两两相似点的集合

\(S:\quad\left( x_{i},x_{j} \right) \in \mathcal{S}\quad\ (x_{i}\ 与\ x_{j}相似)\)

同理给出成对不相似矩阵\(D\)的定义,它是两两不相似点的集合

\(D:\left( x_{i},x_{j} \right) \in S\quad\ (x_{i}\ 与\ x_{j}不相似)\)

我们通过学习距离度量矩阵来解决相似点之间的距离度量\(d(x,y)\)

\(d(x,y) = d_{A}(x,y) = \| x - y\|_{A} = \sqrt{(x - y)^{T}A(x - y)}\)

为了确保公式满足度量距离函数的非负性和次可加性,我们要求\(A\)是正半正定的矩阵,即\(A \succcurlyeq 0\).如果\(A = I_{0}\),那么就是采用欧氏距离度量.

提出优化问题

定义成对相似点\(\left( x_{i},x_{j} \right)\)之间的最小平方距离\(\ {\min{}_{A}}\sum_{\left( x_{i},x_{j} \right) \in \mathcal{S}}^{}\left\| x_{i} - x_{j} \right\|_{A}^{2}\).如果对\(A\)不加以限制,那么当\(A = 0\)时,虽然可以让相似点\(d_{A}(x_{i},x_{j}),(x_{i},x_{j} \in S)\)等于零,但是这样做不相似的成对点\(d_{A}(x_{i},x_{j}),(x_{i},x_{j} \in D)\)也将变为0,所以我们应该添加约束条件防止该问题发生.因此得出优化问题如下

\[\begin{array} { c l } { \min _ { A } } & { \sum _ { \left( x _ { i } , x _ { j } \right) \in \mathcal { S } } \left\| x _ { i } - x _ { j } \right\| _ { A } ^ { 2 } } \\ { \text { s.t. } } & { \sum _ { \left( x _ { i } , x _ { j } \right) \in \mathcal { D } } \left\| x _ { i } - x _ { j } \right\| _ { A } \geq 1} \\ { } & { A \succeq 0 } \end{array}\]

公式\(\sum_{\left( x_{i},x_{j} \right) \in \mathcal{D}}^{}\left\| x_{i} - x_{j} \right\|_{A} \geq 1\)中,右边的常数1的更改成任意常数\(c\),若将1改为常数\(c\)只会让学习的度量矩阵从\(A\)线性变换到\(c^{2}A\).此外,该优化问题是求解半正定矩阵\(A\),两个约束为凸约束.因此,对于此类凸优化问题,我们能够使用局部最小来求解它.

计算\(A\)的对角元素

我们可以使用Newton-Raphson(牛顿拉夫森)来推导学习半定阵\(A\)对角线的算法.定义

\(g(A) = g\left( A_{11},\ldots,A_{{nn}} \right) = \sum_{\left( x_{i},x_{j} \right) \in \mathcal{S}}^{}\left\| x_{i} - x_{j} \right\|_{A}^{2} - \log\left( \sum_{\left( x_{i},x_{j} \right) \in \mathcal{D}}^{}\left\| x_{i} - x_{j} \right\|_{A} \right)\)

易证\(\min g(A)\)与\(A \succcurlyeq 0\)目标优化等效,解为线性相关.因此可以使用\(Newton-Raphson\)能够有效地优化问题.

\(g(A) = g\left( A_{11},\ldots,A_{\text{nn}} \right) = \sum_{S}^{}\left\| x_{i} - x_{j} \right\|_{A}^{2} - \ln\left( \sum_{D}^{}\left\| x_{i} - x_{j} \right\|_{A} \right)\)

\(\begin{matrix} x_{\text{ij}} = \left. \ \left( x_{i1} - x_{j1} \right)^{2},\ldots,\left( x_{\text{id}} - x_{\text{jd}} \right)^{2} \right)\rbrack^{T} \\ A = \left\lbrack A_{11},\ldots,A_{\text{dd}} \right\rbrack \\ \end{matrix}\)

然后

\(\begin{matrix} \left\| x_{i} - x_{j} \right\|_{A}^{2} = \left( x_{i} - x_{j} \right)^{T}A\left( x_{i} - x_{j} \right) = x_{\text{ij}}^{T}A \\ g(A) = \sum_{S}^{}x_{\text{ij}}^{T}A - \ln\left( \sum_{D}^{}\left( x_{\text{ij}}^{T}A \right)^{\frac{1}{2}} \right) \\ \end{matrix}\)

得出

\(\begin{matrix} g^{'}(A) = \left( \sum_{S}^{}x_{\text{ij}}^{T}A - \ln\left( \sum_{D}^{}\left( x_{\text{ij}}^{T}A \right)^{\frac{1}{2}} \right) \right)^{'} \\ = \sum_{S}^{}x_{\text{ij}} - \frac{1}{\sum_{D}^{}\left( x_{\text{ij}}^{T}A \right)^{\frac{1}{2}}}\sum_{D}^{}\frac{1}{2}\left( x_{\text{ij}}^{T}A \right)^{- \frac{1}{2}}x_{\text{ij}} \\ \end{matrix}\)

\(g^{'}(A)\)是一个与\(A\)大小相同的矩阵. 在这种情况下,我们想使用NewtonRaphson方法得到\(A\),所以我们需要推导出更新中使用的Hessian矩阵\(g^{''}(A)\)规则.推导过程

\(\begin{matrix} g^{''}(A) = \partial g^{'}(A)^{T}/\partial A \\ = \partial\left\lbrack - \left\lbrack \sum_{D}^{}\left( x_{\text{ij}}^{T}A \right)^{\frac{1}{2}} \right\rbrack^{- 1}\sum_{D}^{}\frac{1}{2}\left( x_{\text{ij}}^{T}A \right)^{- \frac{1}{2}}x_{\text{ij}}^{T} \right\rbrack/\partial A \\ = \left\lbrack \sum_{D}^{}\left( x_{\text{ij}}^{T}A \right)^{\frac{1}{2}} \right\rbrack\rbrack^{- 2}\sum_{D}^{}\frac{1}{2}\left( x_{\text{ij}}^{T}A \right)^{\frac{1}{2}}x_{\text{ij}}\sum_{D}^{}\frac{1}{2}\left( x_{\text{ij}}^{T}A \right)^{- \frac{1}{2}}x_{\text{ij}}^{T} - \\ \left\lbrack \sum_{D}^{}\left( x_{\text{ij}}^{T}A \right)^{\frac{1}{2}} \right\rbrack^{- 1}\sum_{D}^{} - \frac{1}{4}\left( x_{\text{ij}}^{T}A \right)^{- \frac{3}{2}}x_{\text{ij}}x_{\text{ij}}^{T} \\ \end{matrix}\)

计算半正定阵\(A\)

在计算\(A\)的时候,约束\(A \succcurlyeq 0\)用牛顿拉弗森进行迭代反转Hessian时间复杂度过大.

所以提出对偶问题

\[\begin{array} { l l } { \max _ { A } } & { g ( A ) = \sum _ { \left( x , x _ { j } \right) \in \mathcal { D } } \left\| x _ { i } , x _ { j } \right\| _ { A } } \\ { \text { s.t. } } & { f ( A ) = \sum _ { \left( x _ { i } , x _ { j } \right) \in \mathcal { S } } \left\| x _ { i } , x _ { j } \right\| _ { A } ^ { 2 } \leq 1 } \\ { } & { A \succeq 0 } \end{array}\]

使用梯度上升和迭代投影来优化求解. 为了确保 \(A \succeq 0\),如果对角元素 \(A_{ii}\) 是非负的,那么用 \(H ^ { - 1 } \nabla g\) 替换牛顿更新 \(\alpha H ^ { - 1 } \nabla g\),其中 \(\alpha\) 是通过优化的步长参数。

求解\(A\)优化算法如下

Iterate
Iterate
\(\begin{array} { l } { A : = \arg \min _ { A ^ { \prime } } \left\{ \left\| A ^ { \prime } - A \right\| _ { F } : A ^ { \prime } \in C _ { 1 } \right\} } \\ { A : = \arg \min _ { A ^ { \prime } } \left\{ \left. \left| A ^ { \prime } - A \right| \right| _ { F } : A ^ { \prime } \in C _ { 2 } \right\} } \end{array}\)
until(条件:半定阵 \(A\) 收敛)
\(A : = A + \alpha \left( \nabla _ { A } g ( A ) \right) _ { \perp } \nabla _ { A } f\)
until (迭代收敛)

原文: Xing EP,Ng AY,Jordan MI, et al.Distance Metric Learning,with Application to Clustering with Side-information[C]//International Conference on Neural Information Processing Systems, 2002.
扩展阅读: https://metric-learn.github.io/metric-learn
周志华 - 机器学习

GitHub : python版本 https://github.com/JasonYee/Distance-metric-learning
Matlab版本 https://github.com/arlenlee/Metric-Learning
补充:
Python版本简介见 https://github.com/JasonYee/Distance-metric-learning

matlab调用简介
X:数据
S:相似性约束(以成对相似性矩阵的形式)
D:相异性约束(以成对相异矩阵的形式)
A:初始距离度量矩阵
w:来自类似数据的权重向量(见论文)
t:约束C1的上限(成对距离的总和)
maxiter:最大迭代次数
iter_projection_new2(X, S, D, A, w, t, maxiter)

敬请大家批评指正

原文地址:https://www.cnblogs.com/algori/p/11122850.html

时间: 2024-10-07 11:30:37

距离度量学习的相关文章

概率分布之间的距离度量以及python实现

1. 欧氏距离(Euclidean Distance)       欧氏距离是最易于理解的一种距离计算方法,源自欧氏空间中两点间的距离公式.(1)二维平面上两点a(x1,y1)与b(x2,y2)间的欧氏距离:(2)三维空间两点a(x1,y1,z1)与b(x2,y2,z2)间的欧氏距离:(3)两个n维向量a(x11,x12,-,x1n)与 b(x21,x22,-,x2n)间的欧氏距离:(4)也可以用表示成向量运算的形式: python中的实现: 方法一: import numpy as np x=

从K近邻算法、距离度量谈到KD树、SIFT+BBF算法

从K近邻算法.距离度量谈到KD树.SIFT+BBF算法 从K近邻算法.距离度量谈到KD树.SIFT+BBF算法 前言 前两日,在微博上说:“到今天为止,我至少亏欠了3篇文章待写:1.KD树:2.神经网络:3.编程艺术第28章.你看到,blog内的文章与你于别处所见的任何都不同.于是,等啊等,等一台电脑,只好等待..”.得益于田,借了我一台电脑(借他电脑的时候,我连表示感谢,他说“能找到工作全靠你的博客,这点儿小忙还说,不地道”,有的时候,稍许感受到受人信任也是一种压力,愿我不辜负大家对我的信任)

深度度量学习在视觉分析中的应用

视觉模式的相似性度量是视觉计算中的一个基础问题,设计一个有效的相似性度量准则对于提高视觉分析系统的性能极为关键.度量学习旨在利用训练数据学习出有效的距离度量,进而有效地描述样本之间的相似度.传统的度量学习算法大多数都是学习出一个线性的马氏距离,因而不能有效地描述样本的非线性结构.本报告介绍本研究组近年所提出一种新的深度度量学习方法及其在视觉分析中的应用.通过构造一个深度神经网络,在网络的顶层设计任务相关的目标函数优化网络的参数,从而更好地学习出鉴别度量空间.所提出的方法在包含人脸识别.行人识别.

【Matlab开发】matlab中bar绘图设置与各种距离度量

[Matlab开发]matlab中bar绘图设置与各种距离度量 标签(空格分隔): [Matlab开发] [机器学习] 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ Matlab Bar图如何为每个bar设置不同颜色 data = [3, 7, 5, 2;4, 3, 2, 9;6, 6, 1, 4]; b = bar(data); 使用bar绘制非常直观简单,但有时需要突出显示某一个bar,比如该bar是一个标杆,用来衡量其bar的高度,所以可以用醒目

机器学习中的距离度量

在做分类时常常需要估算不同样本之间的相似性度量(Similarity Measurement),这时通常采用的方法就是计算样本间的“距离”(Distance).采用什么样的方法计算距离是很讲究,甚至关系到分类的正确与否. 本文的目的就是对常用的相似性度量作一个总结. 本文目录: 1. 欧氏距离 2. 曼哈顿距离 3. 切比雪夫距离 4. 闵可夫斯基距离 5. 标准化欧氏距离 6. 马氏距离 7. 夹角余弦 8. 汉明距离 9. 杰卡德距离 & 杰卡德相似系数 10. 相关系数 & 相关距离

ML 07、机器学习中的距离度量

机器学习算法 原理.实现与实践 —— 距离的度量 声明:本篇文章内容大部分转载于July于CSDN的文章:从K近邻算法.距离度量谈到KD树.SIFT+BBF算法,对内容格式与公式进行了重新整理.同时,文章中会有一些对知识点的个人理解和归纳补充,不代表原文章作者的意图. 1. 欧氏距离 欧氏距离是最常见的两点之间或多点之间的距离表示法,又称之为欧几里得度量,它定义于欧几里得空间中,如点 $x = (x_1,\cdots,x_n)$ 和$y = (y_2,\cdots,y_n)$之间的距离为: $$

基于结构的距离度量

基于结构的距离度量是找出序列的在较高尺度上的结构,并在全局尺度上进行比较.基于结构的距离度量又可以进一步分成两种:基于模型(model-based)的距离度量和基于压缩(compression-based)的距离度量.基于模型的距离度量是先对每个待比较的时间序列分别构建各自的全局模型,建好各自的模型后,基于某个序列的模型来尝试生成另一条序列,结果只有两个:能生成和不能生成,把这种可能生成的概率值作为序列之间相似性的度量.典型的代表方法为基于隐Markov模型HMM(Hidden MarkovMo

降维与度量学习

? 降维与度量学习 原文地址:https://www.cnblogs.com/xmd-home/p/11172126.html

距离度量以及python实现(一)

转自: https://www.cnblogs.com/denny402/p/7027954.html 1. 欧氏距离(Euclidean Distance)       欧氏距离是最易于理解的一种距离计算方法,源自欧氏空间中两点间的距离公式.(1)二维平面上两点a(x1,y1)与b(x2,y2)间的欧氏距离:(2)三维空间两点a(x1,y1,z1)与b(x2,y2,z2)间的欧氏距离:(3)两个n维向量a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的欧氏距离:(4)也可