【发布时间】:2014-09-26 17:08:36
【问题描述】:
我收到 TypeError: 'numpy.float64' object is not callable 以下代码错误:
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)
编辑:
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, alpha):
fit=ses(data, alpha)
se=[]
for i in range(2,len(data)):
print i, i-2
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
data=d[0]
result = minimize(rmse, alpha, (data,), bounds=[(0,1)], method='SLSQP')
好的,谢谢。对此进行了编辑,我已经停止了错误,但是现在我得到一个索引超出范围的错误,这很奇怪,因为没有最小化行,代码运行得很好。
编辑 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')
【问题讨论】:
-
发布完整的 Traceback。让它更容易。
-
minimize()在哪里定义?发布此功能。 -
我认为你的函数定义中有
alpha和data参数。
标签: python optimization numpy scipy minimize