詹森-香农散度

2023-12-29

我还有一个问题希望有人能帮助我。

我使用詹森香农散度来测量两个概率分布之间的相似性。考虑到使用以 2 为底的对数,相似性得分落在 1 和 0 之间,从某种意义上说,相似性得分似乎是正确的,0 表示分布相等。

然而,我不确定某个地方实际上是否存在错误,并且想知道是否有人可以说“是的,这是正确的”或“不,你做错了什么”。

这是代码:

from numpy import zeros, array
from math import sqrt, log


class JSD(object):
    def __init__(self):
        self.log2 = log(2)


    def KL_divergence(self, p, q):
        """ Compute KL divergence of two vectors, K(p || q)."""
        return sum(p[x] * log((p[x]) / (q[x])) for x in range(len(p)) if p[x] != 0.0 or p[x] != 0)

    def Jensen_Shannon_divergence(self, p, q):
        """ Returns the Jensen-Shannon divergence. """
        self.JSD = 0.0
        weight = 0.5
        average = zeros(len(p)) #Average
        for x in range(len(p)):
            average[x] = weight * p[x] + (1 - weight) * q[x]
            self.JSD = (weight * self.KL_divergence(array(p), average)) + ((1 - weight) * self.KL_divergence(array(q), average))
        return 1-(self.JSD/sqrt(2 * self.log2))

if __name__ == '__main__':
    J = JSD()
    p = [1.0/10, 9.0/10, 0]
    q = [0, 1.0/10, 9.0/10]
    print J.Jensen_Shannon_divergence(p, q)

问题是,例如,在比较两个文本文档时,我觉得分数不够高。然而,这纯粹是一种主观感受。

一如既往,我们非常感谢任何帮助。


请注意,下面的 scipy 熵调用是 Kullback-Leibler 散度。

See: http://en.wikipedia.org/wiki/Jensen%E2%80%93Shannon_divergence http://en.wikipedia.org/wiki/Jensen%E2%80%93Shannon_divergence

#!/usr/bin/env python
from scipy.stats import entropy
from numpy.linalg import norm
import numpy as np

def JSD(P, Q):
    _P = P / norm(P, ord=1)
    _Q = Q / norm(Q, ord=1)
    _M = 0.5 * (_P + _Q)
    return 0.5 * (entropy(_P, _M) + entropy(_Q, _M))

另请注意,问题中的测试用例看起来有错误? p 分布的总和不会等于 1.0。

See: http://www.itl.nist.gov/div898/handbook/eda/section3/eda361.htm http://www.itl.nist.gov/div898/handbook/eda/section3/eda361.htm

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

詹森-香农散度 的相关文章

随机推荐

  • ANSI C 中的动态列表?

    我是否正确地认为创建在 C 中运行时增长的列表的唯一方法是使用链表 您可以结合使用 malloc 和 realloc 首先初始化一个 C 数组 malloc 并增长它 realloc 但是 如果您进行大量插入 您不会希望一次将其增加 1 个
  • 提交签名如何工作?

    我目前想知道 git commit 签名到底是如何工作的 试图找出这一点 但找不到任何确切的技术文档 我知道如何进行 git 提交签名 但我想知道 git 到底做了什么来签署提交 签署的具体内容是什么 它是给定提交时存储库内的完整数据 即提
  • 找出内存泄漏吗?

    我是 iphone 应用程序的新手 现在这是我的第一个应用程序 应用程序已安装但未运行 我写的这段代码显示内存泄漏 请找出来 提前致谢 ABRecordRef ref CFArrayGetValueAtIndex all i CFStrin
  • 如何在 HTA 文件上播放声音

    我已经在互联网上搜索了一段时间 但没有教程解释如何播放声音
  • 当重新创建布局包含视图的活动时,视图的“标签”是否会恢复?

    The docs http developer android com training basics activity lifecycle recreating html关于Activity休闲状态 默认情况下 系统使用Bundle实例状
  • Node js 中连接 ECONNREFUSED 127.0.0.1:21 错误

    我正在用 Node js 编写一个简单的应用程序 但遇到了这个问题 Error connect ECONNREFUSED 127 0 0 1 21 at Object exports errnoException util js 1034
  • 在Python2上运行jupyter笔记本时遇到困难

    我有Python 2 2 7 14 和 Python 3 3 6 4 安装在我的电脑上 Linux rajarshi x550cc 4 15 10 300 fc27 x86 64 1 SMP Thu Mar 15 17 13 04 UTC
  • 使用 libgdx 缩放 scene2d 按钮

    I don t know if it is just me but drawables http libgdx badlogicgames com nightlies docs api com badlogic gdx scenes sce
  • 如何关闭 MKMapView 中 MKAnnotation 的标注

    我有一个带有许多注释的 MKMapView 选择引脚会显示标注 按下附件会将新的视图控制器弹出到堆栈上 然而 当我从新的 VC 中按回时 标注仍然打开 我该如何关闭它 我努力了 if myMapView selectedAnnotation
  • 如何在java中使用enumMap

    java中如何使用enumMap 我想使用 enumMap 来获取从 0 到 n 的常量命名值 其中 n 是大小 但我不明白oracle网站上的描述 gt EnumMap http docs oracle com javase 8 docs
  • 字符串转换器获取标准值集合

    我正在尝试使用属性网格来显示数据 我必须为预定义的字符串常量编写 StringConverters 以便它们可以显示在组合框中 考虑一个颜色列表和另一个角度 0 90 180 270 列表 我想在网格上显示很多这样的列表 我正在编写从 St
  • d3.js 中的可折叠/分层和力导向图

    有很多强制导向图 即节点和链接 和可折叠树 即父子节点 的示例 但我找不到这些组合的示例 除了像这样的一些 1 级集群网络 http static cybercommons org js d3 examples force force cl
  • 在 SwiftUI 中向按钮添加文本和图像

    我正在尝试添加两者Text and Image on Button like Button action Image gift Text Send padding horizontal padding foregroundColor whi
  • 如何以编程方式向解决方案添加/删除现有项目?

    此处发布了类似 不重复 的问题 如何以编程方式列出解决方案中的所有项目 https stackoverflow com questions 3802027 reading the list of all csproj projects of
  • 在选择 Ticker 时,time.After 不起作用

    我在尝试时遇到了这个问题time Ticker 如下面的代码 case lt time After time Millisecond 5500 从不执行 程序会重复打印 ticker 和 chan 谁能解释一下吗 package main
  • 在 C++ 中对于非常大的数字使用哪种数据类型?

    我必须存储号码600851475143在我的程序中 我尝试将其存储在long long int变量和long double也一样 但是编译时显示错误 integer constant is too large for long type 我
  • Symfony 4 - 如何在不构建表单的情况下添加 csrf 令牌?

    我正在这里阅读教程 https symfony com doc current form csrf protection html https symfony com doc current form csrf protection htm
  • 将对象数组插入 MongoDB

    我想知道如何使用自己预定义的 id 值将对象数组插入到 Mongodb 集合 根级文档 中 我努力了db MyCollection insert array 但它会在 MongoDB 中的一个生成的 id 下创建嵌套文档 var array
  • 调整使用底层 HBase 表的 Hive 查询

    我在 Hbase 中有一个表 比如说 tbl 我想使用它来查询它 蜂巢 因此我将一个表映射到 hive 如下所示 CREATE EXTERNAL TABLE tbl id string data map
  • 詹森-香农散度

    我还有一个问题希望有人能帮助我 我使用詹森香农散度来测量两个概率分布之间的相似性 考虑到使用以 2 为底的对数 相似性得分落在 1 和 0 之间 从某种意义上说 相似性得分似乎是正确的 0 表示分布相等 然而 我不确定某个地方实际上是否存在