【问题标题】:Finding 'a' value of zipf distribution查找 zipf 分布的“a”值
【发布时间】:2021-10-03 09:52:33
【问题描述】:

我发现这个 python 函数可以根据“a”值和“大小”值生成 zipf 分布,其中大小类似于频率表中的元素总数:https://numpy.org/doc/stable/reference/random/generated/numpy.random.zipf.html

现在,假设我为“a”= 1.6 和 size = '30' 运行此函数。我使用 python 的字典数据结构来存储我的频率表,这就是它的样子:

    dictionary = {1:16, 2:5, 3:2, 4:1, 12:1, 13:1, 16:1, 65:1, 152:1, 531:1}

键代表元素 1,2,3,4,12,13,16,65,152,531,值代表它们各自的频率。

有没有办法通过查看字典来知道“a”值?我要问的是,假设有一本像我上面写的那样的字典。它是从某个值生成的。我不知道 a 值是什么,但我知道字典包含什么。根据字典元素的频率,有没有办法计算“a”值?比如公式之类的?

[编辑]

这是我尝试过的。使用 KL 散度,我计算使用 2 个连续元素生成的值。公式是

    (frequency of ith element) * ((log2(frequency of ith element)/log2(frequency of (i+1)th element))

我将这个公式应用于任何两个连续的元素,并在最后找到总和。我将这个总和除以字典的总频率并得到一个“a”值。但是,这个 'a' 值永远不会匹配原始的 'a' 值。

谢谢!

【问题讨论】:

  • 我对此表示怀疑。毕竟,这是一个随机序列。如果您有足够的样本(30 个还不够),也许您可​​以根据落在第一个 bin 中的分数得出一个很好的猜测。
  • 第一个 bin 是什么意思?您认为什么是好的样本量?
  • 第一个 bin 是 1。你必须做一些实验。 zipf 上的 numpy 手册页采用 30,000 个样本,直方图接近但不完全类似于连续函数。
  • 你能提供一个链接吗?谢谢蒂姆!
  • 我记错了。它使用 1,000 点。 numpy.org/doc/stable/reference/random/generated/…

标签: python statistics zipf


【解决方案1】:

使用 Tim Robert 的提示:

from math import log

a = log(dictionary[1] / dictionary[2], 2)  # 1.68 for the given example

【讨论】:

  • 我很欣赏这一点,但这不起作用,因为我不具体。这个函数应该适用于任何给定的字典,而不仅仅是这个。
  • @samuel 它适用于任何给定的字典。也许唯一的例外是当没有足够的样本在第二个 bin 中获得正数时
  • numpy.random.zipf 返回非零正整数。第一个条目总是 1。如果您有另一个数据集,那么我们的意思是取最常见和第二常见的 bin。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多