我编写了这个相当简单的Python函数,但由于某种原因,在for循环结束后,函数中没有返回或打印出任何内容。我可以很好地调用函数,并在for循环中调用prints以确保值是正确的。我有什么明显的遗漏吗?底部的print语句不打印任何内容。你知道吗
def evaluate_arima_model(X, arima_order, s_arima_order):
scores = []
train_steps = [36, 48, 60, 72, 84]
for i in train_steps:
Train = X[0:i]
Test = X[i:i + 12]
model = SARIMAX(Train, order=arima_order, seasonal_order=s_arima_order)
model_fit = model.fit(trend='nc', disp=0)
yhat = model_fit.forecast(12)
rmse = sqrt(mean_squared_error(numpy.exp(Test), numpy.exp(yhat)))
scores.append(rmse)
print(scores)
return scores
这就是函数的调用方式(由另一个具有嵌套循环的函数调用)
def evaluate_models(dataset, p_values, d_values, q_values, sp_values, sd_values, sq_values, s_values):
dataset = dataset.astype('float32')
best_score, best_cfg, best_cfg2 = float("inf"), None, None
for p in p_values:
for d in d_values:
for q in q_values:
order = (p,d,q)
for sp in sp_values:
for sd in sd_values:
for sq in sq_values:
for s in s_values:
sorder = (sp,sd,sq,s)
try:
rmse = evaluate_arima_model(dataset, order, sorder)
if rmse < best_score:
best_score, best_cfg, best_cfg2 = rmse, order, sorder
print('ARIMA%s SARIMA%s RMSE=%.3f' % (order,sorder,rmse))
except:
continue
print('\n','Best ARIMA%s SARIMA%s RMSE=%.3f' % (best_cfg, best_cfg2, best_score))
series = read_csv('dataset.csv', header=None, index_col=0, parse_dates=True, squeeze=True)
series = numpy.log(series)
# Evaluate parameters
p_values = range(0, 2)
d_values = range(0, 2)
q_values = range(0, 2)
# Evaluate seasonal parameters
sp_values = range(0, 2)
sd_values = range(0, 2)
sq_values = range(0, 2)
#Set seasonality
s_values = [12]
#Call grid loop
evaluate_models(series, p_values, d_values, q_values, sp_values, sd_values, sq_values, s_values)
输出:最佳ARIMANone SARIMANone RMSE=inf
新版本仍不起作用:
def evaluate_arima_model(X, arima_order, s_arima_order):
scores = []
train_steps = [36, 48, 60, 72, 84]
for i in train_steps:
Train = X[0:i]
Test = X[i:i + 12]
model = SARIMAX(Train, order=arima_order, seasonal_order=s_arima_order)
model_fit = model.fit(trend='nc', disp=0)
yhat = model_fit.forecast(12)
rmse = None
rmse = sqrt(mean_squared_error(numpy.exp(Test), numpy.exp(yhat)))
scores.append(rmse)
print(scores)
print(scores)
return scores
最后解决了这个问题,问题是返回一个列表和一个标量,这正是我所需要的。所以“返回分数[0]”修正了它。你知道吗
你需要写返回语句而不是打印。你知道吗
你的
print()
语句必须打印一些东西。但是,因为没有return
语句,所以函数不返回任何内容(好吧,它返回None
)。如果希望函数返回某些内容,请添加最后一行:调试尝试:
简化代码:
我不认为这有什么理由不起作用。你知道吗
相关问题 更多 >
编程相关推荐