Sul*_*_28 5 python regression machine-learning time-series arima
我正在尝试使用 statsmodels 库中的 ARIMA 算法对时间序列数据集进行预测。这是一个股票价格数据集,当我将标准化数据提供给模型时,它会给出以下错误。
注意:这是一个单变量预测,我正在尝试预测收盘价。
ConvergenceWarning:最大似然优化未能收敛。检查 mle_retvals"检查 mle_retvals", ConvergenceWarning)
问题:这是什么原因?在提供给 ARIMA 模型时标准化数据不是一个好习惯吗?
下面显示的是我的代码:
from statsmodels.tsa.arima_model import ARIMA
import pandas as pd
from pandas.plotting import autocorrelation_plot
import matplotlib as mplt
mplt.use('agg') # Must be before importing matplotlib.pyplot or pylab!
from matplotlib import pyplot
import numpy as np
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean_squared_error
from sklearn.metrics import mean_absolute_error
from math import sqrt
class RNNConfig():
lag_order = 2
degree_differencing = 1
order_moving_avg = 0
scaler = MinMaxScaler(feature_range=(0,1))
test_ratio = 0.2
fileName = 'AIG.csv'
min = 10
max = 2000
column = 'Close'
config = RNNConfig()
def mean_absolute_percentage_error(y_true, y_pred):
y_true, y_pred = np.array(y_true), np.array(y_pred)
return np.mean(np.abs((y_true - y_pred) / y_true)) * 100
def scale(data):
data[config.column] = (data[config.column] - config.min) / (config.max - config.min)
return data
def ARIMA_model():
stock_data = pd.read_csv(config.fileName)
stock_data = stock_data.reindex(index=stock_data.index[::-1])
scaled_data = scale(stock_data)
price = scaled_data[config.column]
size = int(len(price) * 0.66)
train, test = price[0:size], price[size:len(price)]
history = [x for x in train]
predictions = list()
for t in range(len(test)):
model = ARIMA(history, order=(config.lag_order, config.degree_differencing, config.order_moving_avg))
model_fit = model.fit(disp=0)
output = model_fit.forecast()
yhat = output[0]
predictions.append(yhat)
obs = test[t]
history.append(obs)
print('predicted=%f, expected=%f' % (yhat, obs))
meanSquaredError = mean_squared_error(test, predictions)
rootMeanSquaredError = sqrt(meanSquaredError)
print("RMSE:", rootMeanSquaredError)
mae = mean_absolute_error(test, predictions)
print("MAE:", mae)
mape = mean_absolute_percentage_error(test, predictions)
print("MAPE:", mape)
# plot
pyplot.plot(test, color='blue', label='truth close')
pyplot.plot(predictions, color='red',label='pred close')
pyplot.legend(loc='upper left', frameon=False)
pyplot.xlabel("day")
pyplot.ylabel("closing price")
pyplot.grid(ls='--')
pyplot.savefig("ARIMA results.png", format='png', bbox_inches='tight', transparent=False)
if __name__ == '__main__':
ARIMA_model()
Run Code Online (Sandbox Code Playgroud)
小智 1
我不确定这个错误是由于标准化还是季节性等其他原因产生的。无论如何,可以通过增加用于估计模型参数的最大迭代次数来解决该问题。IE,
model = ARIMA(time_series, order=(p, d, q))
model_fit = model.fit(method_kwargs={'maxiter':300})
Run Code Online (Sandbox Code Playgroud)
请注意,
statsmodels.tsa.arima_model.ARIMA已被删除以支持statsmodels.tsa.arima.model.ARIMA
| 归档时间: |
|
| 查看次数: |
4836 次 |
| 最近记录: |