【问题标题】:Zipf Distribution based number generation基于 Zipf 分布的数字生成
【发布时间】:2017-05-17 06:44:21
【问题描述】:

我想为一个小数据集生成一个流行度分布,它应该遵循Zipf 法则。

可用的参数有:
观众总数:100万
视频总数:36

我想根据Zipf 法律将观看者总数与每个视频相关联。例如,有多少观众会观看 video1、video2 .. 等等。
谁能告诉我公式或方法?

【问题讨论】:

  • 你的参数看起来很奇怪。请更好地解释它们。另外,解释一下 Zipf 定律是什么意思。在en.wikipedia.org/wiki/Zipf's_law,有很多公式,为什么不适合你?你不明白他们吗?你不明白什么?
  • @addons_zz 我想生成一个合成工作负载,我有 36 个视频和大约 100 万观众。现在根据 zipf 法则每个视频被观看多少次是我想要找到的。因此,如果 N = 100 万(意味着有 100 万观众)k= 1..30,意味着 K1 是视频 V1 的排名,依此类推.. 那么 s 是什么???如维基百科中所述 N 是元素的数量; k 是他们的等级; s 是表征分布的指数值。 在这种情况下如何计算或选择“s”??
  • 您能否编辑提供这些新信息的问题,而不是立即将它们添加为评论?

标签: random statistics distribution zipf


【解决方案1】:

关于 Zipf 定律的 Wikipedia 文章包括对分布的一些描述,包括一些计算方法:

https://en.wikipedia.org/wiki/Zipf%27s_law

理论回顾部分下的第一个方程可能会有所帮助。使用它,我们可以编写一个简短的 Python 脚本来关联 36 个视频中每个视频的观看者总数:

N_elements = 1000000
video_exponent = 1

distribution_sum = 0
total_viewers = 0


# First, add up the relative number of viewers across all 36 movie ranks
for k_rank in range(1,36):

    sum = 0
    for n in range(1, N_elements):
        sum = sum + 1/(n**video_exponent)

    distribution_sum = distribution_sum + (1/(k_rank**video_exponent))/sum


# Next, distribute the number of viewers so that the total comes to 1,000,000
print("Movie Rank | # of Viewers")
for k_rank in range(1,36):

    sum = 0
    for n in range(1, N_elements):
        sum = sum + 1/(n**video_exponent)

    viewers_at_k_rank = round((N_elements/(k_rank**video_exponent))/(sum * distribution_sum))

    print(k_rank, end="|")
    print(viewers_at_k_rank)

    total_viewers = total_viewers + viewers_at_k_rank


print("\nSum of all viewers accounted for so far, to make sure we're at 1,000,000")
print(total_viewers)

结果总计有 1,000,002 名观众,但这没什么大不了的。你问,为什么这不是什么大不了的事?似乎虽然许多不同的 事物 遵循一般的 Zipfian 分布,但它们往往会根据它是什么类型的 事物 略有不同。 video_exponent 变量可以调整,以便上面模拟的 Zipfian 分布可以更接近地匹配实际 video 统计数据。差异通常远大于 1,000,000 分之 2。

您可以通过查找一些真实排名的视频并调整 video_exponentN_elements 直到该代码与实数匹配。然后,将 N_elements 重置为 1,000,000,您将拥有一个真实的视频观看数据集。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    • 2015-02-26
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    相关资源
    最近更新 更多