我发现这个 python 函数可以根据“a”值和“大小”值生成 zipf 分布,其中大小类似于频率表中的元素总数:https ://numpy.org/doc/stable/参考/随机/生成/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”值匹配。
谢谢!