Python-';numpy.float64';对象不能使用最小化函数进行简单指数平滑的alpha优化

Python-';numpy.float64';对象不能使用最小化函数进行简单指数平滑的alpha优化,python,optimization,numpy,scipy,minimize,Python,Optimization,Numpy,Scipy,Minimize,我得到TypeError:“numpy.float64”对象对于以下代码是不可调用的错误: import numpy as np from scipy.optimize import minimize def ses(data, alpha): fit=[] fit.append(alpha*data[1] + (1-alpha)*data[0]) for i in range(2, len(data)): fit.append(data[i]*alph

我得到TypeError:“numpy.float64”对象对于以下代码是不可调用的错误:

import numpy as np
from scipy.optimize import minimize

def ses(data, alpha):
    fit=[]
    fit.append(alpha*data[1] + (1-alpha)*data[0])
    for i in range(2, len(data)):
        fit.append(data[i]*alpha + fit[i-2]*(1-alpha))
    return fit

def rmse(data, fit):
    se=[]
    for i in range(2,len(data)):
        se.append((data[i]-fit[i-2])*(data[i]-fit[i-2]))
    mse=np.mean(se)
    return np.sqrt(mse)


alpha=0.1555 # starting value
fit=ses(d[0], alpha)
error=rmse(d[0], fit)

result=minimize(error, alpha, (fit,), bounds=[(0,1)], method='SLSQP') 
我尝试过很多选择,但都不起作用。将列表更改为数组,并使乘法不涉及指数(np.sqrt()而不是()**0.5)

编辑:

好的,伙计们,谢谢。我已经编辑到这个,我已经停止了错误,但是现在我得到了一个索引越界错误,这是奇怪的,因为没有最小化行,代码运行得非常好

编辑2:

有一系列愚蠢的错误,其中大部分我不知道是问题,但通过反复试验解决了

对于某些优化指数平滑的工作代码:

def ses(data, alpha):
    'Simple exponential smoothing'

    fit=[]
    fit.append(data[0])
    fit.append(data[1]) ## pads first two
    fit.append(alpha*data[1] + (1-alpha)*data[0])

    for i in range(2, len(data)-1):
        fit.append(alpha*data[i] + (1-alpha)*fit[i])
    return fit


def rmse(alpha, data):
    fit=ses(data, alpha)
    se=[]
    for i in range(2,len(data)):
        se.append((data[i]-fit[i-2])*(data[i]-fit[i-2]))
    mse=np.mean(se)
    return np.sqrt(mse)

alpha=0.5
data = d[0]

result = minimize(rmse, alpha, (data,), bounds=[(0,1)], method='SLSQP')

很难说到底是什么问题。我假设
minimize
实际上是

如果是这样,第一个参数应该是函数。而是传递
rmse
函数的输出,这是一个双精度数字

error=rmse(d[0], fit) # <--- returns a number

毕竟,
rmse
函数给出的是错误值,而这正是您在这种优化中要最小化的。

完成回溯后。使它更容易。在哪里定义了
minimize()
?发布此函数。我认为您在函数定义中前后都有
alpha
data
参数。请阅读
minimize
的文档,您当前的代码显然是在传递一个数字作为第一个参数。
error=rmse(d[0], fit) # <--- returns a number
result=minimize(<some function here>, alpha, (fit,), bounds=[(0,1)], method='SLSQP')
result=minimize(rmse, alpha, (fit,), bounds=[(0,1)], method='SLSQP')