增量熵计算

2024-02-28

Let std::vector<int> counts是一个正整数向量,让N:=counts[0]+...+counts[counts.length()-1]是向量分量的总和。环境pi:=counts[i]/N,我使用经典公式计算熵H=p0*log2(p0)+...+pn*log2(pn).

The counts向量正在变化 --- 计数增加 --- 每 200 次变化我都会重新计算熵。经过快速谷歌和 stackoverflow 搜索后,我找不到任何增量熵计算的方法。那么问题来了:有没有一种增量方法,就像方差一样 http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Online_algorithm,用于熵计算?

编辑:这个问题的动机是使用此类公式进行增量信息增益估计VFDT http://homes.cs.washington.edu/~pedrod/papers/kdd00.pdf-像学习者一样。

解决: See 这个数学溢出帖子 https://mathoverflow.net/questions/133977/incremental-entropy-computation/134376#134376.


我导出了熵和基尼指数的更新公式和算法并做了笔记可以在 arXiv 上找到 http://arxiv.org/abs/1403.6348。 (注释的工作版本可用here http://blazsovdat.com/publications/incremental.pdf.) 另请参阅这个数学溢出 https://mathoverflow.net/questions/133977/incremental-entropy-computation/134376#134376 answer.

为了方便起见,我添加了简单的 Python 代码,演示了导出的公式:

from math import log
from random import randint
      
# maps x to -x*log2(x) for x>0, and to 0 otherwise 
h = lambda p: -p*log(p, 2) if p > 0 else 0

# update entropy if new example x comes in 
def update(H, S, x):
  new_S = S+x
  return 1.0*H*S/new_S+h(1.0*x/new_S)+h(1.0*S/new_S)

# entropy of union of two samples with entropies H1 and H2
def update(H1, S1, H2, S2):
  S = S1+S2
  return 1.0*H1*S1/S+h(1.0*S1/S)+1.0*H2*S2/S+h(1.0*S2/S)

# compute entropy(L) using only `update' function 
def test(L):
  S = 0.0 # sum of the sample elements
  H = 0.0 # sample entropy 
  for x in L:
    H = update(H, S, x)
    S = S+x
  return H

# compute entropy using the classic equation 
def entropy(L):
  n = 1.0*sum(L)
  return sum([h(x/n) for x in L])

# entry point 
if __name__ == "__main__":
  L = [randint(1,100) for k in range(100)]
  M = [randint(100,1000) for k in range(100)]
  
  L_ent = entropy(L)
  L_sum = sum(L)
  
  M_ent = entropy(M)
  M_sum = sum(M)
  
  T = L+M
  
  print("Full = ", entropy(T))
  print("Update = ", update(L_ent, L_sum, M_ent, M_sum))

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

增量熵计算 的相关文章

随机推荐

  • 如何在 git 上恢复旧提交中的特定文件

    我想我的问题很接近这个one https stackoverflow com questions 20971306 hg how do i revert a single file several commits back 但我正在使用 g
  • 使用 SQL Developer 或 Toad 等 IDE 工具的 Oracle 并行查询行为

    一段时间以来 我一直在努力抽出时间来写这个问题并尽可能地解释这个问题 所以请提前原谅我的长文 我的环境 Oracle Database 12 2 在 Red Hat 7 R A C 2 个节点 上运行 每个节点 16CPU 和 64GB R
  • 在一个 SELECT 语句中设置两个标量变量?

    我想做这个 Declare a int Declare b int SET a b SELECT StartNum EndNum FROM Users Where UserId 1223 PRINT a PRINT b 但这是无效的语法 如
  • 如何在 Gatsby URL 中添加发布日期?

    All the Gatsby 入门演示 https github com gatsbyjs gatsby gatsby starters有一条像这样的路径 gatsby starter blog hi folks 我该如何设置 2015 0
  • Cron 作业 + Twitter

    从 12 30 开始 一直到 1 30 2 30 等 我的应用程序每小时都会发布一条静态推文 我目前正在使用 themattharris 的 twitter API 我也有一个 cron 工作 30 php q home1 USER NAM
  • PyQt5 和 datetime.datetime.strptime 之间的冲突

    所以我正在编写一个工具 可以使用基于 python 3 52 和 Qt5 的图形用户界面从文件中读取时间 最少的操作 datetime datetime strptime Tue a 在隔离环境中工作 输出 1900 01 01 00 00
  • 在 php 5.5 中使用什么来代替 apc 用户数据缓存?

    PHP 5 5 默认包含 zend opcache 这基本上意味着几乎没有人会使用 APC 但是用什么来代替 APC 的用户数据缓存部分 apc store apc fetch 类似 呢 我真正喜欢使用 APC 用户数据缓存的一个用例是静态
  • 如何在vba中另存为.txt

    我希望让我的宏将我创建的新工作表保存为 txt 文件 这是我到目前为止的代码 Sub Move Move Macro Keyboard Shortcut Ctrl m Sheets Sheet1 Select Range A1 Select
  • 绘制完成后清除CGPath路径

    我已经在 iOS 中编写了一个在 TouchMoved 方法中绘图的程序 CGContextAddPath UIGraphicsGetCurrentContext path CGPathMoveToPoint path NULL lastP
  • OpenCV - Java:inRange 函数

    我有我的形象mRgba当我这样做时 Core inRange mRgba B1 B2 mRgba 我得到了我期望的结果 我的所有 RGBA 图像的阈值都在 B1 和 B2 之间 现在我想这样做 Mat roi mRgba submat re
  • Pytorch:获取最终层的正确尺寸

    Pytorch 新手来了 我正在尝试微调 VGG16 模型来预测 3 个不同的类别 我的部分工作涉及将 FC 层转换为 CONV 层 但是 我的预测值不会落在 0 到 2 3 个类别 之间 有人可以向我指出有关如何计算最后一层的正确尺寸的好
  • pyder 中的 Python 调试器在第 2 行停止

    当我尝试调试代码时 调试器在第 2 行停止并且不响应任何命令 例如转到下一行 我正在使用 python 3 9 7 This is what the console looks like If I try to stop the debug
  • 无法加载共享库“libgdiplus” - Docker [带有 Aspose API 的 .NET 应用程序]

    当我创建用于部署的 docker 文件时 应用程序通常在开发环境中工作 但它失败了libgdiplus issue Docker文件 FROM mcr microsoft com dotnet core aspnet 3 0 AS base
  • 具有并排输入字段的 HTML 表单

    我有一个基本上是垂直的 html 表单 但我真的不知道如何在同一行上创建两个文本字段 例如 下面的表格我希望名字和姓氏在同一行 而不是一个在另一个下面
  • 将 UIButton 锚定到 UITableViewController 视图的底部

    我有以下要求 当一个UITableViewController显示的视图中 行数是可变的 在行下方 应显示一个按钮 当行数较小时 按钮应固定在视图的底部 当行数较多时 删除按钮应紧接在最后一行之后放置 换句话说 And not 到目前为止
  • CSS,位置:绝对,滚动条

    假设有一个页面 div div LEFT div div RIGHT div div 为什么水平滚动条只考虑右溢出 换句话说 为什么 LEFT 不触发滚动条 而 RIGHT 却触发呢 除了body gt overflow hidden 对于
  • 获得平均系数和 adj。使用 lapply 来自多个合并回归的 R^2

    我使用循环函数执行了多个池回归 并将回归输出存储在列表中 myregression 我现在想做的是对我的所有回归 即 myregression 列表 有效地执行 lmtest 包中的 coeftest 函数 以调整标准误差和 t 统计量 最
  • Python 中的梯形波

    如何用Python生成梯形波 我研究了 SciPy 和 NumPy 等模块 但没有成功 是否有像 scipy signal gaussian 这样的模块返回代表高斯函数波的值数组 我使用梯形内核生成了这个Astropy https en w
  • 加载图像时 WPF 抛出“无法定位资源”异常

    我有一个 WPF 窗口 其中包含本地系统中一个文件的背景图像 所以 XAML 文件看起来像这样
  • 增量熵计算

    Let std vector