找到最适合值列表的随机方法

时间:2011-04-25 11:30:14

标签: python random statistics

我有一个包含许多浮点数的列表,表示多次运算的长度。

对于每种类型的操作,我的数字都有不同的趋势。

我知道在一些python模块中有许多随机生成器,比如numpy.random

例如,我有binomialexponencialnormalweibul等等...

我想知道是否有一种方法可以找到最好的random generator,给出一个值列表,它最适合我拥有的每个数字列表。

即,最适合列表中数字趋势的生成器(及其参数)

那是因为我想自动生成每个操作的时间长度,以便我可以在n年内模拟它,而无需手动找到哪种方法最适合哪个数字列表。

编辑:换句话说,试图澄清问题:

我有一个数字列表。我试图找到最适合我已经拥有的数字数组的概率分布。我看到的唯一问题是每个概率分布都有可能干扰结果的输入参数。所以我必须弄清楚如何自动输入这个参数,试图最好地符合列表。

有什么想法吗?

4 个答案:

答案 0 :(得分:3)

您可能会发现在概率分布方面考虑更好,而不是考虑随机数生成器。然后,您可以考虑测试不同分布的拟合优度。

作为起点,您可以尝试为样本构建probability plots。就其背后的数学而言,最简单的可能是考虑Q-Q plot。使用随机数生成器,创建与数据大小相同的样本。对这两者进行排序,并将它们相互绘制。如果分布相同,那么你应该得到一条直线。

编辑:要查找统计模型的相应参数,maximum likelihood estimation是一种标准方法。根据您拥有的数字样本数量和所需的精度,您可能会发现只需手动播放参数就可以获得“足够好”的解决方案。

答案 1 :(得分:1)

为什么使用随机数是一个坏主意已经解释过了。在我看来,你真正需要的是将你提到的分布拟合到你的点(例如,使用最小二乘拟合),然后检查哪一个最适合点(例如,使用卡方检验)。

编辑添加对numpy least squares fitting example

的引用

答案 2 :(得分:0)

给定参数化单变量分布(例如exponential取决于lambda,或gamma取决于theta和k),找到最适合给定数字样本的参数值的方法称为Maximum Likelyhood程序。它不是一个最小二乘的程序,它需要分箱,从而丢失信息!一些维基百科发行文章给出了参数的最大可能性估计的表达式,但是许多没有,甚至那些确实缺少错误条和共同体的表达式。如果你知道微积分,你可以通过根据参数表示数据集的log asyhood,将二阶导数设置为零以使其最大化,并使用最小曲率矩阵的逆作为协方差矩阵来推导出这些结果。你的参数。

鉴于对两个不同参数化分布的两种不同拟合,比较它们的方式称为likelyhood ratio test。基本上,你只需选择具有较大日志可能性的那个。

答案 3 :(得分:0)

Gabriel,如果您有权访问Mathematica,则参数估算内置于:

In[43]:= data = RandomReal[ExponentialDistribution[1], 10]

Out[43]= {1.55598, 0.375999, 0.0878202, 1.58705, 0.874423, 2.17905, \
0.247473, 0.599993, 0.404341, 0.31505}

In[44]:= EstimatedDistribution[data, ExponentialDistribution[la], 
 ParameterEstimator -> "MaximumLikelihood"]

Out[44]= ExponentialDistribution[1.21548]

In[45]:= EstimatedDistribution[data, ExponentialDistribution[la], 
 ParameterEstimator -> "MethodOfMoments"]

Out[45]= ExponentialDistribution[1.21548]

但是,可能很容易确定最大似然法命令参数是什么。

In[48]:= Simplify[
 D[LogLikelihood[ExponentialDistribution[la], {x}], la], x > 0]

Out[48]= 1/la - x

因此,指数分布的估计参数为sum (1/la -x_i),其中la = 1/Mean[data]。可以为其他分布族计算出类似的方程式,并用您选择的语言编码。