我是在python上使用scipy和numpy的新手。
我的问题:如何使用最佳alpha(水平平滑常数)最小化误差函数(平均绝对百分比误差,MAPE具体而言)?因此,我正在尝试通过MAPE获得最佳alpha。
这是我的数学:
x = [ 3, 4, 5, 6]
y0 = x0
y1 = x0*alpha+ (1-alpha)*y0
MAPE = (y-x)/x [ This is an objective function and I am trying to solve for alpha here]
Constraints1: alpha<1
Constrants2 : alpha>0
最佳答案
这应该工作。我认为没有比我创建的递归循环更好的方法来找到y
。基本思想是,您需要将要最小化的对象变成最小化参数(alpha
)和其他任何东西(x
)的函数。因此,这就是我所说的mape
。将对alpha
和其他参数(x
)的初始猜测传递到最小化器中。由于您的约束只是界限,因此如果使用method='SLSQP'
,这很容易。
import numpy as np
from scipy.optimize import minimize
from __future__ import division
def y(alpha, x):
y = np.empty(len(x), float)
y[0] = x[0]
for i in xrange(1, len(x)):
y[i] = x[i-1]*alpha + y[i-1]*(1-alpha)
return y
def mape(alpha, x):
diff = y(alpha, x) - x
return np.mean(diff/x)
x = np.array([ 3, 4, 5, 6])
guess = .5
result = minimize(mape, guess, (x,), bounds=[(0,1)], method='SLSQP')
要获取您的信息,您可以执行以下操作:
print result
[alpha_opt] = result.x
如果有任何混淆之处,请发表评论!
关于python - 最小化指数平滑中的alpha,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22289523/