【问题标题】:How to create dataset for fitting a function in scipy stats?如何创建数据集以在 scipy stats 中拟合函数?
【发布时间】:2015-06-16 21:55:36
【问题描述】:

我想将一些数据放入Pareto distribution using the scipy.stats 库中。我不确定问题是否是数字问题,所以为了安全起见;我从几千分钟开始测量自变量(“分钟”)的因变量(我们称它们为“推”)的值,此后每十分钟(除了在数据清理过程中删除的几个点) )。

例如

2780.0 362.0

2800.0 376.0

2810.0 393.0 ...

我能找到的最好的信息是这样的

from scipy.stats import pareto
result = pareto.fit(data)

我不知道在这种情况下如何格式化这些数据。我已经尝试了以下但都导致错误。

result = pareto.fit(zip(minutes, pushes))
result = pareto.fit(pushes)

错误通常是

Warning: invalid value encountered in double_scalars

非常感谢您的指导,谢谢。

【问题讨论】:

  • pareto.fit() 方法获得帕累托分布参数的估计值,该估计值最大化观察某些给定样本集的后验概率。因此,它只需要一个 single 输入数组,由要拟合的样本组成(其他 kwargs 控制拟合过程,例如通过指定分布参数的初始值)。从您的问题来看,您似乎确实想要建立某种关系f(minutes, pushes),这不是pareto.fit() 所做的。你能澄清一下你想在这里做什么吗?
  • @ali_m 是的,我正在尝试建立某种关系f(minutes, pushes)。我认为这基本上是一个回归问题,但仅从观察数据图来看,它看起来像一个幂律,与帕累托分布非常相似。抱歉,如果这没有意义,我对此很陌生。
  • 在这种情况下,您需要选择一些将因变量与自变量相关联的函数(即pushes = f(minutes)),然后找到使“预测”和“预测”之间的均方误差最小的函数参数实际'推送每个给定的'分钟'值。您可以使用scipy.optimize.curve_fitscipy.optimize.minimize
  • @ali_m 成功了,非常感谢!!

标签: python numpy statistics scipy model-fitting


【解决方案1】:

正如我在上面的 cmets 中提到的,pareto.fit() 不是您要找的。​​p>

scipy.stats 中的连续分布的.fit() methods 获得了分布参数的估计值,该估计值使观察到某些特定样本值集的概率最大化。因此,pareto.fit() 只需要一个 single 数组参数,其中包含您想要拟合分布的样本。其他关键字参数控制拟合过程的各个方面,例如通过指定分布参数的初始值。

实际上试图做的是拟合一些自变量x和一些因变量y之间的关系,即

y_fit = f(x, params)

你需要做的是:

  1. f 选择一些函数形式。根据您的描述,yx 的图类似于probability density function for a Pareto distribution,所以也许这个或衰减指数可能是合适的。

  2. 找到params 的集合,以最小化yy_fit 之间的差异(通常是平方差异的总和)。您可以使用scipy.optimize.curve_fitscipy.optimize.minimize 来执行此操作。

【讨论】:

    猜你喜欢
    • 2019-05-03
    • 2016-04-26
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    • 2017-04-11
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多