首页 > 其他分享 >计算两个概率分布之间的距离(Hellinger距离)

计算两个概率分布之间的距离(Hellinger距离)

时间:2023-04-07 13:45:00浏览次数:37  
标签:distance Hellinger 概率分布 sqrt 距离 np

Hellinger距离

介绍

Hellinger距离是一种用于度量概率分布之间相似度的指标。

在统计学和信息论领域中,它被广泛应用于分类、聚类、图像识别、文本分类等方面。

Hellinger距离又称为Bhattacharyya距离的平方根,它是两个概率分布之间的欧几里德距离的一半,其取值范围在0到1之间。

和欧几里德距离不同的是,Hellinger距离比欧几里德距离更加鲁棒,因为它考虑了概率分布的重叠部分。若两个分布之间没有重叠部分,则Hellinger距离等于1。若两个分布完全一致,则Hellinger距离等于0。

假设有两个概率分布 \(P\) 和 \(Q\),则它们之间的Hellinger距离为:

\[H(P,Q) = \sqrt{\frac{1}{2}\sum_{i}( {\sqrt{p_i}} - {\sqrt{q_i}} )^2} \]

其中,\(p_i\) 和 \(q_i\) 分别表示分布 \(P\) 和 \(Q\) 在第 \(i\) 个样本上的概率。

API

可以使用NumPy库来计算两个概率分布之间的Hellinger距离。以下是一个示例代码:

import numpy as np

def hellinger_distance(p, q):
    # 计算概率分布的平方根
    sqrt_p = np.sqrt(p)
    sqrt_q = np.sqrt(q)
    
    # 计算两个概率分布之间的距离
    distance = np.sqrt(np.sum((sqrt_p - sqrt_q) ** 2)) / np.sqrt(2)
    
    return distance

p = np.array([0.4, 0.3, 0.2, 0.1])
q = np.array([0.3, 0.3, 0.2, 0.2])

print(hellinger_distance(p, q))  # 输出:0.1103108437503541

可以使用NumPy库来计算两个概率分布之间的Hellinger距离。以下是一个示例代码:

import numpy as np

def hellinger_distance(p, q):
    # 计算概率分布的平方根
    sqrt_p = np.sqrt(p)
    sqrt_q = np.sqrt(q)
    
    # 计算两个概率分布之间的距离
    distance = np.sqrt(np.sum((sqrt_p - sqrt_q) ** 2)) / np.sqrt(2)
    
    return distance

使用示例如下:

p = np.array([0.4, 0.3, 0.2, 0.1])
q = np.array([0.3, 0.3, 0.2, 0.2])

print(hellinger_distance(p, q))  # 输出:0.1521458182994425

这是两个简单的概率分布之间的Hellinger距离的示例。您可以更换分布 \(p\) 和 \(q\) 来计算其他分布之间的Hellinger距离。

标签:distance,Hellinger,概率分布,sqrt,距离,np
From: https://www.cnblogs.com/itelephant/p/17295881.html

相关文章

  • 力扣612(MySQL)-平面上的最近距离(中等)
    题目:表point_2d保存了所有点(多于2个点)的坐标(x,y),这些点在平面上两两不重合。写一个查询语句找到两点之间的最近距离,保留2位小数。 最近距离在点(-1,-1)和(-1,2)之间,距离为1.00。所以输出应该为: 解题思路:建表语句:1createtableifnotexistspoint_2d(x......
  • AllJoyn:高通推出的近距离P2P通讯技术
    以NFC为代表的近距离无线通讯技术已经不是什么新鲜玩意了,而近场通讯的实用性和便利性,也使其成为业界一大热点,众多顶级公司都对这项技术寄予厚望,连全球最大的手机芯片制造商高通也推出了近距离P2P通讯技术AllJoyn,两台同样使用AllJoyn技术的设备可以快速实现......
  • #Python 利用python计算百度导航骑行距离(第二篇)批量计算
    https://www.cnblogs.com/simone331/p/17218019.html在上一篇中,我们计算了两点的距离(链接为上篇文章),但是具体业务中,往往会存在一次性计算多组,上百甚至上千的距离。所以......
  • Python小练习:向量之间的距离度量
    Python小练习:向量之间的距离度量作者:凯鲁嘎吉-博客园 http://www.cnblogs.com/kailugaji/本文主要用Python实现三种常见的向量之间的距离度量方式:1)曼哈顿距离(Manhat......
  • CAD动态块操作实例:距离乘数
    作为一名“成熟”的设计师,相信大家对于CAD动态块都不陌生,以下图为例,对部件左端进行拉伸,且拉伸后【键】仍处于部件左端的中心位置。今天,我们要用CAD动态块动作的【距离乘数......
  • Vue+Openlayers实现绘制线段并测量距离显示
    场景在上面已经实现交互式绘制线段基础上,怎样实现测量距离。注:关注公众号霸道的程序猿获取编程相关电子书、教程推送与免费下载。实现1、页面上添加按钮与map<template>......
  • 已知一点经纬度,方向角和距离,计算另一点的经纬度
    已知一点经纬度,方向角和距离,计算另一点的经纬度最近因为项目需要在地图上绘制小车的方向线,需要根据当前坐标和方向角计算当前方向上的另一个坐标点,下面是一个在Javascript......
  • android开发之gallery 实现滚动一张且短距离滑动实现滚动
    首先gallery的特点就不用多说了吧,惯性滚动、半屏翻页,但是很多时候我们不需要它的这些特性。我今天就介绍一下去掉惯性滚动以及短距离翻页的实现:......
  • 编辑距离
    72.编辑距离编辑距离算法被数据科学家广泛应用,是用作机器翻译和语音识别评价标准的基本算法给你两个单词 word1和 word2,请返回将 word1 转换成 word2所使用的最......
  • python应用题 两点间距离
    提示代码:#请在______处使用一行代码或表达式替换##注意:请不要修改其他已给出代码ntxt=input("")______x1=eval(nls[0])y1=eval(nls[1])x2=eval(nls[2])y2=eval(nls[......