代码之家  ›  专栏  ›  技术社区  ›  mikera

从物流配送中生成样本

  •  3
  • mikera  · 技术社区  · 14 年前

    我正在研究一些统计代码,并探索从随机分布中创建样本的不同方法——从生成0到1的统一浮点值的随机数生成器开始。

    我知道有可能从 normal distribution 通过将大量独立的、相同分布的均匀随机变量(通过 central limit theorem )

    是否可以执行类似的操作从 logistic distribution ?我假设要添加的样本需要以某种方式加权或关联,以避免以一个正常值结束。

    另外,我也知道有更有效的方法来产生随机样本,我问这个问题是因为我更感兴趣的是理解这样一个发生器如何工作,而不是效率……

    3 回复  |  直到 8 年前
        1
  •  10
  •   ars    14 年前

    物流分布的倒数不难找到,所以你可以使用 Inverse transform sampling . 基本算法是:

    for each random variate x ~ logistic
      generate a random variate y ~ Uniform(0, 1)
      x := F^-1 (y)
    

    其中f^-1是逻辑或所需分布的逆CDF。大多数编程语言都允许您通过某种rand函数在0和1之间生成一个统一的变量。

    下面是一些通过逻辑分布生成1000个随机变量的python代码:

    from random import random
    import math
    import pylab
    
    loc, scale = 0, 1
    
    randvars = []
    for i in range(1000):
        x = random()
        y = loc + scale * math.log(x / (1-x))
        randvars.append(y)
    
    pylab.hist(randvars)
    
        2
  •  6
  •   hobbs    14 年前

    有一种非常常见的方法可以为大多数兴趣分布创建随机数,这就是逆CDF方法。

    首先,生成一个反转 Cumulative distribution function 对于所讨论的分布——由于CDF是一个函数,它获取分布域中的值并将其映射到[0,1],因此逆CDF是一个函数,它获取[0,1]中的值并以适当的概率将其映射到分布域中的值。许多常见的分布都有逆向CDF,它们是通过分析推导出来的,但是如果分布是不可计算的或近似的,则可以创建一个近似的数值逆向CDF。

    其次,取任意一个好的随机数生成器,生成均匀分布在[0,1]上的数,并通过逆CDF运行其输出。现在输出遵循您开始使用的分布。

    可以找到物流分布的逆CDF。 here .

        3
  •  1
  •   Neil G    8 年前

    逻辑分布是指两个Gumbel分布的差异,其变量为指数变量的负对数或相等。 log(u/(1.0 - u)) 在哪里? u 是一个统一变量。