我是在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/

10-12 18:22