度量学习方法总结

article/2025/11/10 21:37:55

目录

一.距离度量

闵可夫斯基距离

欧式距离(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 distdef 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 * starspl.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

 

 

 


http://chatgpt.dhexx.cn/article/4k2luYMj.shtml

相关文章

度量学习

度量学习(Metric Learning) 度量(Metric)的定义 在数学中,一个度量(或距离函数)是一个定义集合中元素之间距离的函数。一个具有度量的集合被称为度量空间。 度量学习(Metric Learni…

度量学习(Metric learning、损失函数、triplet、三元组损失、fastreid)

定义 Metric learning 是学习一个度量相似度的距离函数:相似的目标离得近,不相似的离得远. 一般来说,DML包含三个部分, 如下图.。 1)特征提取网络:map embedding 2)采样策略:将一个mini-batch里的样本组合成很多个sub…

度量学习Metric Learning

度量学习 (Metric Learning) 距离度量学习 (Distance Metric Learning,DML) 相似度学习 度量学习 是指 距离度量学习,Distance Metric Learning,简称为 DML,是人脸识别中常用传统机器学习方法,由Eric Xing在NIPS 2…

度量学习(Metric Learning)基础概念

一、什么是度量学习? 度量学习 (Metric Learning) 距离度量学习 (Distance Metric Learning,DML) 相似度学习。 在数学中,一个度量(或距离函数)是一个定义集合中元素之间距离的函数。一个具有度量的集合被称为度量空…

度量学习——总结

传统方法 User guide: contents — metric-learn 0.6.2 documentation 深度学习 基于深度学习的度量学习方法大都由两个部分组成:特征提取模块和距离度量模块。距离度量模块的任务是使同一类样本间的距离更靠近,而不同类样本间的距离更远离。这一模块…

ffmpeg命令分析-r

本系列 以 ffmpeg4.2 源码为准,下载地址:链接:百度网盘 提取码:g3k8 之前的文章分析 FFMpeg 工程的 do_video_out() 函数的时候,建议不关注 delta0,delta,nb0_frames,nb_frames 等变…

使用FFmpeg命令处理音视频

文章目录 前言一、ffprobe相关命令1.使用ffprobe查看音频文件的信息2.使用ffprobe查看视频文件的信息 二、ffplay相关命令1.基本的ffplay命令2.音视频同步命令 三、ffmpeg相关命令1.ffmpeg通用参数2.ffmpeg视频参数3.ffmpeg音频参数4.ffmpeg示例 总结 前言 FFmpeg是一套可以用…

ffmpeg-命令行详解

前言 ffmpeg是一个多媒体开发库,提供了关于音频和视频的工具。这个项目的官网是这里。 下载地址 ffmpeg提供了方便地控制台命令,可以在下载页面下载。三个平台(windows,linux,macos)都有打包好的可执行文…

ffmpeg命令分析-b:v

本系列 以 ffmpeg4.2 源码为准,下载地址:链接:百度网盘 提取码:g3k8 本系列主要分析各种 ffmpeg 命令参数 在代码里是如何实现的。a.mp4下载链接:百度网盘,提取码:nl0s 。 命令如下:…

FFmpeg命令详解

命令格式 功能 FFmpeg命令是在ffmpeg.exe可执行文件环境下执行,ffmpeg.exe用于音视频的转码,加水印,去水印,视频剪切,提取音频,提取视频,码率控制等等功能。 最简单的命令 ffmpeg -i input.a…

FFmpeg命令行转码

本文主要了解FFmpeg进行音视频编码转换。主要学习如下几个知识点: FFmpeg使用libx264进行H,264(AVC)软编码,使用libx265进行H.265(HEVC)软编码使用FFmpeg在MacOS环境下硬编码了解音频编码,MP3,AAC的参数设置编码 FFmpeg软编码H.…

ffmpeg命令行使用

查看视频信息 ffmpeg -i 视频名字视频名字这里输入前几个字符按 tab 键可以自动补全 返回结果: 红框之内的内容没什么用 编码器 :encoder : Lavf57.25.100 持续时间:Duration: 00:14:20.58, start: 0.000000, bitrate: 381 kb/s Duratio…

ffmpeg录屏命令

1.gdigrab抓屏 ffmpeg -f gdigrab -i desktop -q:v 0.01 -vcodec mpeg4 -f mp4 out.mp4-i 输入设备 -vcodec 视频编码格式 -f 视频封装格式 缺点只能录制视频,不能录制音频 2.dshow 下载安装screen capture recorder https://sourceforge.net/projects/screencap…

FFMPEG常用命令行

目录 命令格式: 1.获取视频信息 2.转视频/音频格式 视频格式转换 音频格式转换 3.音视频分离 4.图像处理 5.视频旋转 6.视频倒放&视频加速&视频减速 7.视频合并(两个10秒的视频合并为20秒): 8.视频拼接&…

FFmpeg命令介绍

FFmpeg 简介轶闻常用命令视频相关音频相关录制命令 简介 FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。使用C语言进行开发,采用LGPL或GPL许可证,可前往Github下载其源码。它提供了录制、转换以及流化音…

ffmpeg命令大全

ffmpeg命令大全 FFMPEG 目录及作用FFMPEG基本概念FFMPEG 命令基本信息查询命令主要参数视频参数音频参数录制录屏 分解与复用滤镜简单滤镜复杂滤镜 直播相关 前言 FFMPEG是特别强大的专门用于处理音视频的开源库。你既可以使用它的API对音视频进行处理,也可以使用它…

音视频ffmpeg——ffmpeg 命令大全

ffmpeg 命令参数 ffmpeg信息查询命令 ffmpeg 控制命令 主要参数: ◼ -i 设定输入流 ◼ -f 设定输出格式(format) ◼ -ss 开始时间 ◼ -t 时间长度 音频参数: ◼ -aframes 设置要输出的音频帧数 ◼ -b:a 音频码率 ◼ -ar 设定采样率 ◼ -ac 设定…

常见FFmpeg命令行全面分析

FFmpeg多媒体库支持的命令行调用分为三个模块:ffmpeg、ffprobe、ffplay。其中ffmpeg命令行常用于音视频剪切、转码、滤镜、拼接、混音、截图等;ffprobe用于检测多媒体流格式;ffplay用于播放视频。详情可查阅FFmpeg官方文档:ffmpeg…

ffmpeg 常用命令汇总

​​​​​​经常用到ffmpeg做一些视频数据的处理转换等,用来做测试,今天总结了一下,参考了网上部分朋友的经验,一起在这里汇总了一下。 1、ffmpeg使用语法 命令格式: ffmpeg -i [输入文件名] [参数选项] -f [格…

FFmpeg常用基本命令行

本文收集记录了笔者使用过的FFmpeg命令,亲测可用,并不是简单的copy别人的FFmpeg大全,下面的命令大部分都是本人测试成功过的,大家可以放心使用。 音视频技术是程序员日常生活中经常用到的,比如转码需求,同事…