我试图从python中的http://jheusser.github.io/2013/09/08/hawkes.html重现这项工作,除了不同的数据.我编写了代码来模拟泊松过程以及他们描述的霍克斯过程.
为了做霍克斯模型MLE,我将对数似然函数定义为
def loglikelihood(params, data):
(mu, alpha, beta) = params
tlist = np.array(data)
r = np.zeros(len(tlist))
for i in xrange(1,len(tlist)):
r[i] = math.exp(-beta*(tlist[i]-tlist[i-1]))*(1+r[i-1])
loglik = -tlist[-1]*mu
loglik = loglik+alpha/beta*sum(np.exp(-beta*(tlist[-1]-tlist))-1)
loglik = loglik+np.sum(np.log(mu+alpha*r))
return -loglik
Run Code Online (Sandbox Code Playgroud)
使用一些虚拟数据,我们可以计算Hawkes过程的MLE
atimes=[58.98353497, 59.28420225, 59.71571013, 60.06750179, 61.24794134,
61.70692463, 61.73611983, 62.28593814, 62.51691723, 63.17370423
,63.20125152, 65.34092403, 214.24934446, 217.0390236, 312.18830525,
319.38385604, 320.31758188, 323.50201334, 323.76801537, 323.9417007]
res = minimize(loglikelihood, (0.01, 0.1,0.1),method='Nelder-Mead',args = (atimes,))
print res
Run Code Online (Sandbox Code Playgroud)
但是,我不知道如何在python中执行以下操作.
我想用泊松分布来预测道路交通的到达时间.目前,我用泊松过程产生(合成)到达时间,使到达时间具有指数分布.
观察过去的数据,我想预测下一个/未来的到达间隔时间.为此,我想实现一个学习算法.
我已经使用了各种方法,例如贝叶斯预测器(最大后验)和多层神经网络.在这两种方法中,我使用的是一定长度的移动窗口Ñ的输入要素(到达间时间).
在贝叶斯预测器中,我使用到达间隔时间作为二元特征(1->长,0->短来预测下一个到达时间间隔为长或短),而对于神经网络的n-神经元输入层和m-神经隐藏层(n = 13,m = 20),我输入n个先前的到达间隔时间并生成未来的估计到达时间(权重是阈值由反向传播算法更新).
贝叶斯方法的问题在于,如果短到达时间的数量高于长时间,则变得有偏差.因此,它永远不会预测长的空闲时期(因为短的后方总是保持较大.而在多层神经预测器中,预测精度不够.特别是对于较高的到达间隔时间,预测精度会急剧下降.
我的问题是"随机过程(泊松)是否能够以良好的准确度预测?或者我的方法不正确?" .任何帮助将不胜感激.
statistics classification machine-learning stochastic-process neural-network
我想使用Haskell进行随机模拟,但我不知道如何.我读过Hutton的"Haskell编程",我很乐意编写确定性函数程序.但是,我不知道如何开始编写R或python等命令式语言中易于使用的随机模拟.是否有关于此的教程或入门,我可以阅读,或者任何人都可以提供一些入门提示?
例如,下面的代码模拟了几何布朗运动(GBM)过程,它满足以下随机微分方程:
该代码是这篇 Wikipedia 文章中代码的精简版本。
import numpy as np
np.random.seed(1)
def gbm(mu=1, sigma = 0.6, x0=100, n=50, dt=0.1):
step = np.exp( (mu - sigma**2 / 2) * dt ) * np.exp( sigma * np.random.normal(0, np.sqrt(dt), (1, n)))
return x0 * step.cumprod()
series = gbm()
Run Code Online (Sandbox Code Playgroud)
如何在 Python 中拟合 GBM 过程?也就是说,如何估计mu
和sigma
求解给定时间序列的随机微分方程series
?
我要生成一个过程,每一步有一个实现了泊松随机变量的,这种认识应该被保存,那么它应该是实现下一个泊松随机变量并将其添加到之前的所有变现的总和.此外,应该有可能在每个步骤中停止此过程.希望对你们有意义......任何想法都表示赞赏!
给定一对两个变量(X,Y),如何在vanilla MATLAB(无工具箱)中生成和绘制经验联合PDF和CDF?
我beieveSGDClassifier()
与loss='log'
支持多标记分类,我没有使用OneVsRestClassifier。检查这个
现在,我的数据集非常大,我正在使用HashingVectorizer
并将结果作为输入传递给SGDClassifier
. 我的目标有 42048 个特征。
当我运行它时,如下所示:
clf.partial_fit(X_train_batch, y)
Run Code Online (Sandbox Code Playgroud)
我得到:ValueError: bad input shape (300000, 42048)
。
我也使用类作为参数如下,但仍然是同样的问题。
clf.partial_fit(X_train_batch, y, classes=np.arange(42048))
Run Code Online (Sandbox Code Playgroud)
在 SGDClassifier 的文档中,它说 y : numpy array of shape [n_samples]
classification machine-learning stochastic-process scikit-learn
我正在尝试创建随机过程的可能路径的模拟,该过程不锚定到任何特定点。例如,将SARIMAX模型拟合到天气温度数据,然后使用该模型来模拟温度。
这里我使用页面中的标准演示statsmodels
作为一个更简单的示例:
import numpy as np
import pandas as pd
from scipy.stats import norm
import statsmodels.api as sm
import matplotlib.pyplot as plt
from datetime import datetime
import requests
from io import BytesIO
Run Code Online (Sandbox Code Playgroud)
拟合模型:
wpi1 = requests.get('https://www.stata-press.com/data/r12/wpi1.dta').content
data = pd.read_stata(BytesIO(wpi1))
data.index = data.t
# Set the frequency
data.index.freq="QS-OCT"
# Fit the model
mod = sm.tsa.statespace.SARIMAX(data['wpi'], trend='c', order=(1,1,1))
res = mod.fit(disp=False)
print(res.summary())
Run Code Online (Sandbox Code Playgroud)
创建模拟:
res.simulate(len(data), repetitions=10).plot();
Run Code Online (Sandbox Code Playgroud)
这是历史:
这是模拟:
模拟曲线分布广泛且彼此分离,因此这是没有意义的。最初的历史进程并没有那么大的差异。我理解错了什么?如何进行正确的模拟?
python stochastic-process statsmodels autoregressive-models arima
我正在参观一家餐厅,菜单上有 N 道菜。每次我去餐厅时,我都会随机选择一道菜。我在想,我平均要花多少时间才能尝完餐厅里所有的N道菜?
我认为我在餐厅n次访问后品尝过的菜肴数量是一个具有转移概率的马尔可夫链:
p_{k,k+1} = (N-k)/N
Run Code Online (Sandbox Code Playgroud)
和
p_{k,k} = k/N
for k =0,1,2,...,N
Run Code Online (Sandbox Code Playgroud)
我想在 R 中模拟这个过程。这样做(我在这里需要帮助),因为餐厅有我做的 100 道菜:
nits <- 1000 #simulate the problem 1000 times
count <- 0
N = 100 # number of dishes
for (i in 1:nits){
x <- 1:N
while(length(x) > 0){
x <- x[x != sample(x=x,size=1)] # pick one dish at random that I have not tasted
count <- count + 1/nits
}
}
count
Run Code Online (Sandbox Code Playgroud)
我需要一些帮助,因为我的数学结果是平均时间是 N*log(N) 并且上面的代码产生不同的结果。
python ×3
r ×3
statistics ×3
scipy ×2
stochastic ×2
arima ×1
haskell ×1
matlab ×1
numpy ×1
poisson ×1
probability ×1
scikit-learn ×1
simulation ×1
statsmodels ×1