用Martin Eastwood的MPE公式实现scipy.optimize.minimize

ruyhziif  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(175)

我很难用Martin Eastwood的插值公式来执行scipy.optimize.minimize-
z=(x^w1/(x^w2+y^w3))* w 4*17(我们得到16而不是17
而x[3]、x[4]、x[16]、x[18]存在于式中)
(2012年12月17日,preml.ge)

x=np.array([33,43,28,26,28,30,26,24,15,21,23,28,19,18,19,22,15,19,18,15])
y=np.array([15,24,17,16,21,25,22,21,13,20,23,29,25,24,26,32,24,31,32,30])
z=np.array([36,42,29,24,27,29,23,27,24,23,22,20,25,16,17,15,18, 9,15,10])
data=np.array([x, y, z])

十年前,Martin Eastwood(一位发烧友博主)found
结果表明,在1999年,我国的人均国内生产总值增长率为1.122777,人均国内生产总值增长率为1.072388;
其中,对于我的问题,RMSE=3.657522858。
我想知道的是,我可以用哪种方法来得到这些参数,就像上面的相关估计一样。
I read these answers,但方法似乎不太好查,需要你的帮助。

添加。另一个问题是,我们如何估计w-* 参数 * 用于每个集合{x_i,y_i,z_i},而不是如上所述的整个{x,y,z}?

4bbkushb

4bbkushb1#

使用最小二乘法效果更好,因为该方法可以单独查看每个样本的变化,而不是仅查看最终总和。

import scipy.optimize
import numpy as np
import matplotlib.pyplot
x=np.array([33,43,28,26,28,30,26,24,15,21,23,28,19,18,19,22,15,19,18,15])
y=np.array([15,24,17,16,21,25,22,21,13,20,23,29,25,24,26,32,24,31,32,30])
z=np.array([36,42,29,24,27,29,23,27,24,23,22,20,25,16,17,15,18, 9,15,10])

pred = lambda w: (x**w[0]/(x**w[1]+y**w[2]))*w[3
w_given = 1.122777, 1.072388, 1.127248, 2.499973]
w,_ = scipy.optimize.leastsq(lambda w: (z - pred(w)), (1,1,1,1))
w_guided,_ = scipy.optimize.leastsq(lambda w: (z - pred(w)), w_given)

让我们想象一下

plt.plot(z, pred(w), '.')

# 17 introduced here arbitrarily

plt.plot(z, pred(w_given)*17, '+')
plt.plot(z, pred(w_guided), '+')
plt.plot(np.sort(z), np.sort(z), '--')
plt.legend(['dumb guess', 'given w (scaled)', 'init with given w', 'target'])

检查拟合是否给出比初始猜测更好的结果(健全性检查)
第一个

相关问题