我有一个包含许多浮点数的列表,表示多次运算的长度。
对于每种类型的操作,我的数字都有不同的趋势。
我知道在一些python模块中有许多随机生成器,比如numpy.random
例如,我有binomial
,exponencial
,normal
,weibul
等等...
我想知道是否有一种方法可以找到最好的random generator
,给出一个值列表,它最适合我拥有的每个数字列表。
即,最适合列表中数字趋势的生成器(及其参数)
那是因为我想自动生成每个操作的时间长度,以便我可以在n
年内模拟它,而无需手动找到哪种方法最适合哪个数字列表。
编辑:换句话说,试图澄清问题:
我有一个数字列表。我试图找到最适合我已经拥有的数字数组的概率分布。我看到的唯一问题是每个概率分布都有可能干扰结果的输入参数。所以我必须弄清楚如何自动输入这个参数,试图最好地符合列表。
有什么想法吗?
答案 0 :(得分:3)
您可能会发现在概率分布方面考虑更好,而不是考虑随机数生成器。然后,您可以考虑测试不同分布的拟合优度。
作为起点,您可以尝试为样本构建probability plots。就其背后的数学而言,最简单的可能是考虑Q-Q plot。使用随机数生成器,创建与数据大小相同的样本。对这两者进行排序,并将它们相互绘制。如果分布相同,那么你应该得到一条直线。
编辑:要查找统计模型的相应参数,maximum likelihood estimation是一种标准方法。根据您拥有的数字样本数量和所需的精度,您可能会发现只需手动播放参数就可以获得“足够好”的解决方案。
答案 1 :(得分:1)
为什么使用随机数是一个坏主意已经解释过了。在我看来,你真正需要的是将你提到的分布拟合到你的点(例如,使用最小二乘拟合),然后检查哪一个最适合点(例如,使用卡方检验)。
的引用答案 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]
。可以为其他分布族计算出类似的方程式,并用您选择的语言编码。