几何布朗运动的极大似然

2024-09-26 22:50:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图对一个几何布朗运动做极大似然估计。我知道,Theano主要是一个ML库,但它应该可以工作。。。(当然,我只是在尝试Theano,我的最终目标是对稍微复杂的模型进行MLE…)

在SO写数学是个婊子,所以查一下GBM例如here。在

下面是Theano代码,它根据Theano教程中的logistic回归示例稍作修改:

training_steps = 1000
dt = 1/390
NT = len(Xdata)
rng = np.random
rate = 0.001

# Declare Theano symbolic variables
X = T.vector("X")
dX = T.vector("dX")
mu = theano.shared(rng.randn(), name="mu")
sigma2 = theano.shared(rng.random(), name="sigma2")

print("Initial model:")
print(mu.get_value())
print(sigma2.get_value())

# Construct Theano expression graph

eps = (dX - mu*dt*X)/X
summand1 = eps**2
loghood = summand1.sum()/sigma2/dt + NT*T.log(sigma2)
gmu, gsigma2 =  T.grad(loghood, [mu, sigma2])

# Compile
train = theano.function(
          inputs=[X,dX],
          outputs=[loghood],
          updates=((mu, mu - rate * gmu), (sigma2, sigma2 - rate * gsigma2)))

# Train
costlist = []
mulist = []
siglist = []
for i in range(training_steps):
    cost = train(Xdata, dXdata)
    costlist.append(cost[0])
    mulist.append(mu.get_value())
    siglist.append(sigma2.get_value())

print("Final model:")
print(mu.get_value())
print(sigma2.get_value())

plot(costlist)
  • loghood是对数似然,它应该最小化w.r.t mu和sigma2
  • 扩展数据从GBM模拟,dXdata[n]=扩展数据[n+1]-扩展数据[n]
  • 自微分应该可以工作,我也试过用手放梯度
  • 为了调试目的添加了costlist、mulist和siglist

所以我得到的是,train函数对初始mu,sigma2求值为OK,但就在第2步,mu,sigma2根据梯度更新,train函数似乎适得其反,要么给出疯狂的数字,要么南:s。。。在

我将结果与精确极大似然估计和最小化进行了比较scipy.optimize.minimize.最小化,两者都很好。我想问题出在上面的“木屋”里,但我就是想不通。。。在

那么有人能找出代码哪里出错了吗?


Tags: getratevaluedttraintheanoprintrng

热门问题