加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 11:26:05 所属栏目:Python 来源:网络整理
导读:…帮助和在线文档说scipy.stats.pareto.fit函数将变量作为要拟合的数据集的变量,并可选择b(指数),loc,scale. 结果是三元组(指数,scale) 从相同分布生成数据应该导致拟合找到用于生成数据的参数,例如,(使用python 3 colsole) $ pythonPython 3.3.0 (default,D
…帮助和在线文档说scipy.stats.pareto.fit函数将变量作为要拟合的数据集的变量,并可选择b(指数),loc,scale.
结果是三元组(指数,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,应为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,0.0)

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

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

总是返回这个指数

(1.3999999999999999,0.0)

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

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

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

解决方法

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读