使数据适合指数分布并创建生成器函数

时间:2019-03-24 23:32:08

标签: python scikit-learn scipy

我有一个短时24小时内的到达数据集,其中到达间隔似乎模拟了指数分布。我的目标是使它适合指数分布,以便可以将其用作生成器,以对比初始24小时窗口更长的时间段的到达进行建模。

Sample:
248.69
250.01
287.73
302.17
318.03
357.66
389.87
392.82
395.99
406.47
446.29
466.47
475.52
487.2
496.85
500.02
522.95
547.09
582.78
593.67
612.46
680.63
745.35

哪个导致

Difference:
1.32
37.72
14.44
15.86
39.63
32.21
2.95
3.17
10.48
39.82
20.18
9.05
11.68
9.65
3.17
22.93
24.14
35.69
10.89
18.79
68.17
64.72

在直方图上绘制整个差异数据集可以得到:https://i.imgur.com/kJnNrFM.png

理想情况下,我可以获取一些变量,将其插入像expovariate这样的函数中以对变量进行建模,如下所示:

def arrivals(lambda):
    return random.expovariate(lambda)

我发现了以下功能的建议,但不知道如何使用打印的变量:

  

0.023493173851297056   [[65.70015487]]

from math import exp
from scipy.optimize import curve_fit
import numpy as np

def model(x, p):
    return p*np.exp(-p*x)

def expfit(df):
    X = df.index.values.reshape(-1,1).flatten().tolist()
    Y = df.values.flatten().tolist()
    popt, pcov = curve_fit(model, X, Y)
    print (popt[0])
    print (pcov)

arrivals = pd.read_csv("arrivals.csv")
expfit(arrivals.dropna().diff().dropna().to_frame())

谢谢!

0 个答案:

没有答案