度量学习方法总结

度量学习方法总结目录一.距离度量闵可夫斯基距离欧式距离(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

 

 

 

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • atitit.软件开发GUI 布局管理优缺点总结java swing wpf web html c++ qt php asp.net winform「建议收藏」

    atitit.软件开发GUI 布局管理优缺点总结java swing wpf web html c++ qt php asp.net winform

    2022年2月6日
    38
  • Yarn 安装与使用详细介绍「建议收藏」

    Yarn 安装与使用详细介绍「建议收藏」背景什么是Yarn速度快离线模式可靠可确定性网络优化扁平化模式版本控制其他关于Yarn的介绍Yarn安装windowsmac方式一方式二Yarn换源背景在Node生态系统中,依赖通常安装在项目的node_modules文件夹中。然而,这个文件的结构和实际依赖树可能有所区别,因为重复的依赖可以合并到一起。npm客户端把依…

    2022年5月26日
    61
  • java集合系列——List集合之ArrayList介绍(二)

    List是 java.util包下面的类,从 java集合系列——java集合概述(一) 中可以知道,List继承了Collection 接口! List本身也是一个接口,它的实现有ArrayList 、LinkedList、Vector和CopyOnWriteArrayList等!

    2022年2月26日
    41
  • python画图[通俗易懂]

    python画图[通俗易懂]Matplotlibpython图形可以分为两部分。一个是外部的整体设置,比如坐标轴的设置,注释,透明度等;一个是内部具体图形,不同图形可能大同小异。外部设置,是我们需要掌握的内容。内部具体图形的操作,用的时候搜索下就好。

    2022年6月14日
    33
  • Android蓝牙开发(二)之蓝牙配对和蓝牙连接

    Android蓝牙开发(二)之蓝牙配对和蓝牙连接上篇文章:https://blog.csdn.net/huangliniqng/article/details/82185983讲解了打开蓝牙设备和搜索蓝牙设备,这篇文章来讲解蓝牙配对和蓝牙连接1.蓝牙配对搜索到蓝牙设备后,将设备信息填充到listview中,点击listiew则请求配对蓝牙配对有点击配对和自动配对,点击配对就是我们选择设备两个手机弹出配对确认框,点击确认…

    2022年6月29日
    114
  • 2021最新Java零基础自学教程,java从入门到精通

    2021最新Java零基础自学教程,java从入门到精通Java是一门用途广泛的语言,不但可以用来开发网站后台、PC客户端和AndroidAPP,还在数据分析、网络爬虫、云计算领域大显身手。从学术的角度讲,Java是一门面向对象的编程语言,初学者需要花费不少时间来熟悉面向对象的概念、语法和编程思想,有不理解的地方请一定要坚持,多花时间编写代码自然会豁然开朗。只有一步一个脚印,踏踏实实学习,才能从零基础到入门,再到精通。大家在学习的过程中也要多看几套Java教程,不要死啃一本书,这样才能才能博采众长,进步更快。今天分享的也是我在自

    2022年6月20日
    35

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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