python scipy stats帕累托适合:它是如何工作的

…帮助和在线文档说scipy.stats.pareto.fit函数将变量作为要拟合的数据集的变量,并可选择b(指数),loc,scale.

结果是三元组(指数,loc,scale)

从相同分布生成数据应该导致拟合找到用于生成数据的参数,例如, (使用python 3 colsole)

$ python
Python 3.3.0 (default, Dec 12 2012, 07:43:02) 
[GCC 4.7.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

(在下面的代码行中省略了python控制台提示“>>>”)

dataset=scipy.stats.pareto.rvs(1.5,size=10000)  #generating data
scipy.stats.pareto.fit(dataset)

然而这导致了

(1.0, nan, 0.0)

(指数1,应为1.5)和

dataset=scipy.stats.pareto.rvs(1.1,size=10000)  #generating data
scipy.stats.pareto.fit(dataset)

结果是

(1.0, nan, 0.0)

(指数1,应为1.1)和

dataset=scipy.stats.pareto.rvs(4,loc=2.0,scale=0.4,size=10000)    #generating data
scipy.stats.pareto.fit(dataset)

(指数应为4,loc应为2,比例应为0.4)in

(1.0, nan, 0.0)

等等
在调用fit函数时给出另一个指数

scipy.stats.pareto.fit(dataset,1.4)

总是返回这个指数

(1.3999999999999999, nan, 0.0)

显而易见的问题是:我是否完全误解了这个拟合函数的用途,是否以某种方式使用它,或者它是否被简单地破坏了?

一句话:在有人提到像Aaron Clauset的网页(http://tuvalu.santafe.edu/~aaronc/powerlaws/)上给出的那些专用函数比scipy.stats方法更可靠之前应该使用它们:这可能是真的,但它们也非常耗费时间对于10000点的数据集,在普通PC上需要花费很多小时(可能是几天,几周,几年).

编辑:哦:拟合函数的参数不是分布的指数而是指数减1(但这不会改变上述问题)

最佳答案 拟合方法是一种非常通用且简单的方法,它对分布的非负似然函数(self.nnlf)进行优化.fmin.在像帕累托这样具有可以创建未定义区域的参数的分布中,通用方法不起作用.

特别是,当随机变量的值不适合分布的有效域时,一般的nnlf方法返回“inf”. “fmin”优化器不能很好地使用此目标函数,除非您已经猜测起始值非常接近最终拟合.

通常,.fit方法需要使用约束优化器进行分布,其中对pdf的适用范围有限制.

点赞