度量学习方法总结

度量学习方法总结目录一.距离度量闵可夫斯基距离欧式距离(EuclideanDistance):标准化欧氏距离(StandardizedEuclideandistance)曼哈顿距离(ManhattanDistance)切比雪夫距离(Chebyshevdistance)马氏距离马氏距离代码示例:夹角余弦相关系数(Correlationcoefficient)…

大家好,又见面了,我是你们的朋友全栈君。

目录

一.距离度量

闵可夫斯基距离

欧式距离(Euclidean Distance):

标准化欧氏距离 (Standardized Euclidean distance )

曼哈顿距离(ManhattanDistance)

切比雪夫距离(Chebyshevdistance)

马氏距离

马氏距离代码示例:

夹角余弦

相关系数 ( Correlation coefficient )与相关距离(Correlation distance)

交叉熵与相对熵(kl散度)

汉明距离


 

度量学习 (Metric Learning) == 距离度量学习 (Distance Metric Learning,DML) == 相似度学习

根据不同的任务来自主学习出针对某个特定任务的度量距离函数。通过计算两张图片之间的相似度,使得输入图片被归入到相似度大的图片类别中去。

一.距离度量

闵可夫斯基距离

假设数值点 P 和 Q 坐标如下:

                                          度量学习方法总结

那么,闵可夫斯基距离定义为:

                                            度量学习方法总结

欧式距离(Euclidean Distance):

两点之间的直线距离。p 是 2的闵可夫斯基距离。

(1)二维平面上两点a(x1,y1),b(x2,y2)之间的欧式距离公式:

                                                            度量学习方法总结

(2) n维空间上两点a(x1,x2……..xn),b(y1,y2……..yn)的欧式距离公式:

                                                         度量学习方法总结

标准化欧氏距离 (Standardized Euclidean distance )

样本集的标准化过程(standardization)用公式描述就是:

                                                                         度量学习方法总结

  标准化后的值 =  ( 标准化前的值  - 分量的均值 ) /分量的标准差

  经过简单的推导就可以得到两个n维向量a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的标准化欧氏距离的公式:

                                                                           度量学习方法总结

  如果将方差的倒数看成是一个权重,这个公式可以看成是一种加权欧氏距离(Weighted Euclidean distance)

曼哈顿距离(ManhattanDistance)

p 是 1 的闵可夫斯基距离。

(1)二维平面上两点a(x1,y1),b(x2,y2)之间的曼哈顿距离公式:

                                               度量学习方法总结

(2) n维空间上两点a(x1,x2……..xn),b(y1,y2……..yn)的曼哈顿距离公式:

                                                度量学习方法总结

 

闵可夫斯基距离与数据的分布无关,具有一定的局限性,如果 x 方向的幅值远远大于 y 方向的值,这个距离公式就会过度放大 x 维度的作用。所以,在计算距离之前,我们可能还需要对数据进行 z-transform 处理,即减去均值,除以标准差:

                                                                              度量学习方法总结

度量学习方法总结 : 该维度上的均值
度量学习方法总结 : 该维度上的标准差

Z变换(Z-transform) 将离散系统的时域数学模型——差分方程转化为较简单的频域数学模型——代数方程,以简化求解过程的一种数学工具。

https://zhuanlan.zhihu.com/p/45114376

 

切比雪夫距离(Chebyshevdistance)

各对应坐标数值差的最大值。p 趋近于无穷大时的闵可夫斯基距离。

                                                         度量学习方法总结

(1)二维平面上两点a(x1,y1),b(x2,y2)之间的切比雪夫距离公式:

                                                度量学习方法总结

(2) n维空间上两点a(x1,x2……..xn),b(y1,y2……..yn)的切比雪夫距离公式:

                                               度量学习方法总结

 

如果维度相互之间数据相关(例如:身高较高的信息很有可能会带来体重较重的信息,因为两者是有关联的),这时候就要用到马氏距离(Mahalanobis distance)了。

马氏距离

马氏距离是基于样本分布的一种距离。有M个样本向量X1~Xm,协方差矩阵记为S,均值记为向量μ,则其中样本向量X到u的马氏距离表示为:

                                        度量学习方法总结

假设样本点(列向量)之间的协方差对称矩阵是 度量学习方法总结 , 通过 Cholesky Decomposition(实际上是对称矩阵 LU 分解的一种特殊形式)可以转化为下三角矩阵和上三角矩阵的乘积: 度量学习方法总结 。消除不同维度之间的相关性和尺度不同,只需要对样本点 x 做如下处理:度量学习方法总结 。处理之后的欧几里得距离就是原样本的马氏距离:为了书写方便,这里求马氏距离的平方):

                                              度量学习方法总结

       而其中向量Xi与Xj之间的马氏距离定义为:

                                               度量学习方法总结

       若协方差矩阵是单位矩阵(各个样本向量之间独立同分布),则公式就成了:

                                              度量学习方法总结

       也就是欧氏距离了。

  若协方差矩阵是对角矩阵(协方差矩阵的对角线上即为方差),公式变成了标准化欧氏距离。

       马氏距离的计算是建立在总体样本的基础上的,如果拿同样的两个样本,放入两个不同的总体中,最后计算得出的两个样本间的马氏距离通常是不相同的,除非这两个总体的协方差矩阵碰巧相同;计算马氏距离过程中,要求总体样本数大于样本的维数,否则得到的总体样本协方差矩阵逆矩阵不存在,这种情况下,用欧式距离计算即可。

马氏距离代码示例:

# -*- coding=utf-8 -*-

# code related at: http://www.cnblogs.com/daniel-D/

import numpy as np
import pylab as pl
import scipy.spatial.distance as dist


def plotSamples(x, y, z=None):

    stars = np.matrix([[3., -2., 0.], [3., 2., 0.]])
    if z is not None:
        x, y = z * np.matrix([x, y])
        stars = z * stars

    pl.scatter(x, y, s=10)    # 画 gaussian 随机点
    pl.scatter(np.array(stars[0]), np.array(stars[1]), s=200, marker='*', color='r')  # 画三个指定点
    pl.axhline(linewidth=2, color='g') # 画 x 轴
    pl.axvline(linewidth=2, color='g')  # 画 y 轴

    pl.axis('equal')
    pl.axis([-5, 5, -5, 5])
    pl.show()


# 产生高斯分布的随机点
mean = [0, 0]      # 平均值
cov = [[2, 1], [1, 2]]   # 协方差
x, y = np.random.multivariate_normal(mean, cov, 1000).T
plotSamples(x, y)

covMat = np.matrix(np.cov(x, y))    # 求 x 与 y 的协方差矩阵
Z = np.linalg.cholesky(covMat).I  # 仿射矩阵
plotSamples(x, y, Z)

# 求马氏距离 
print '\n到原点的马氏距离分别是:'
print dist.mahalanobis([0,0], [3,3], covMat.I), dist.mahalanobis([0,0], [-2,2], covMat.I)

# 求变换后的欧几里得距离
dots = (Z * np.matrix([[3, -2, 0], [3, 2, 0]])).T
print '\n变换后到原点的欧几里得距离分别是:'
print dist.minkowski([0, 0], np.array(dots[0]), 2), dist.minkowski([0, 0], np.array(dots[1]), 2)

夹角余弦

机器学习中可以把两点看成是空间中的两个向量,通过衡量两向量之间的相似性来衡量样本之间的相似性。

(1)二维平面上两向量a(x1,y1),b(x2,y2)之间的夹角余弦公式:

                                                          度量学习方法总结

也可直接通过向量运算:

                                              度量学习方法总结

(2) n维空间上两点a(x1,x2……..xn),b(y1,y2……..yn)的夹角余弦公式:

                                          度量学习方法总结

余弦相似度(Cosine similarity):

                                                       度量学习方法总结

余弦相似度与向量的幅值无关,只与向量的方向相关,夹角余弦越大表示两个向量的夹角越小,夹角余弦越小表示两向量的夹角越大。当两个向量的方向重合时夹角余弦取最大值1,当两个向量的方向完全相反夹角余弦取最小值-1。

相关系数 ( Correlation coefficient )与相关距离(Correlation distance)

(1) 相关系数的定义

                                           度量学习方法总结

相关系数是衡量随机变量X与Y相关程度的一种方法,相关系数的取值范围是[-1,1]。相关系数的绝对值越大,则表明X与Y相关度越高。当X与Y线性相关时,相关系数取值为1(正线性相关)或-1(负线性相关)。

(2)相关距离的定义

                                               度量学习方法总结

交叉熵与相对熵(kl散度)

参考之前的博客 https://blog.csdn.net/qq_28266311/article/details/83994605

汉明距离

两个等长字符串之间的汉明距离是两个字符串对应位置的不同字符的个数。

  例如:

1011101与 1001001 之间的汉明距离是2    

  2143896与 2233796 之间的汉明距离是3   

  irie与 rise之间的汉明距离是 3

杰卡德距离(Jaccard Distance)

杰卡德相似系数(Jaccard similarity coefficient):两个集合A和B的交集元素在A,B的并集中所占的比例,称为两个集合的杰卡德相似系数,用符号J(A,B)表示:

                                            杰卡德相似系数

  • 杰卡德距离(Jaccard Distance):与杰卡德相似系数相反,用两个集合中不同元素占所有元素的比例来衡量两个集合的区分度:

                                           杰卡德距离

参考

https://blog.csdn.net/wangpei1949/article/details/52926651  
https://www.cnblogs.com/daniel-D/p/3244718.html

https://www.cnblogs.com/heaad/archive/2011/03/08/1977733.html

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/150063.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • LoadRunner11激活成功教程方法

    LoadRunner11激活成功教程方法LoadRunner11激活成功教程方法一、覆盖激活成功教程文件首先请下载LoadRunner激活成功教程文件,解压后将lm70.dll,mlr5lprg.dll覆盖LoadRunner11安装目录bin目录下的相应文件,我的目录是C:ProgramFiles\HPLoadRunner\bin,具体目录地址请根据自己安装路径来定。二、使用LoadRunner11序列号1.打开LoadRunner,点击co…

  • 看透木马_看透别说透

    看透木马_看透别说透一、必备基础知识在介绍木马的原理之前有一些木马构成的基础知识我们要事先加以说明,因为下面有很多地方会提到这些内容。一个完整的木马系统由硬件部分、软件部分和具体连接部分组成。小知识:  “木马”全称是“特洛伊木马(TrojanHorse)”,原指古希腊士兵藏在木马内进入敌方城

    2022年10月14日
  • 实现微信机器人开发

    实现微信机器人开发首先微信聊天机器人,是一种通过自然语言模拟人类进行对话的程序。通常运行在特定的软件平台上,如PC平台或者移动终端设备平台。测试问文档:https://www.wkteam.cn/文档测试过程中实现多项功能进行管理登录模块◆登录微控平台member/login◆获取微信二维码user/login◆执行微信登录getIPadLoginInfo◆获取联系人列表(群、好友)getAllContact◆二次登录(退出微信号需要再次登录调用此接口即可)secondLogin◆退出微信l

  • hp中国区总裁孙振耀职场圣经

    hp中国区总裁孙振耀职场圣经

  • Centos7中通过docker安装mysql

    Centos7中通过docker安装mysql

  • 超链接样式设置「建议收藏」

    超链接样式设置「建议收藏」顺序不能颠倒,按如下设置:a:link{ color:red;}a:visited{ color:green;}a:hover{ color:black;}a:active{ color:blue;}

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号