示例#1
0
def fit_ARIMA():
    init_bic = float("inf")
    init_p = 0
    init_q = 0
    init_d = 1
    maxLag = 8
    with open('dev_data.json', 'r') as f:
        raw_data = json.load(f)
    data = []
    for index in range(len(raw_data)):
        if index % 10 == 0:
            data.extend([float(di[1]) for di in raw_data[index]['data']])
        # data.extend([float(di[1]) for di in d['data']])

    init_properModel = None
    for p in np.arange(0, maxLag):
        for q in np.arange(0, maxLag):
            for d in np.arange(1, 3):
                print('test p = %d, d = %d, q = %d' % (p, d, q))
                model = ARIMA(data, order=(p, d, q))
                ## bug cuased by statsmodels lib, if do not set them then error occurs during saving
                model.dates = None
                model.freq = None
                model.missing = None
                try:
                    results_ARIMA = model.fit(disp=-1, method='css')
                except:
                    continue
                bic = results_ARIMA.bic
                print('current bic = %.4f' % (bic))
                if bic < init_bic:
                    print(
                        'It BEATS the previous best p, d and q, current p = %d, d = %d, q = %d'
                        % (p, d, q))
                    init_p = p
                    init_q = q
                    init_d = d
                    init_properModel = results_ARIMA
                    init_bic = bic
                    results_ARIMA.save('ARIMA_best')
                    print('Saved the best model')
    print('p is :' + str(init_p))
    print('q is :' + str(init_q))
    print('d is :' + str(init_d))
示例#2
0
      len(lines))
le = LabelEncoder()
le.fit(list(alphabet))

print("Fitted alphabet")

seq = []
max_np_len = 200000
for i in range(0, len(words), max_np_len):
    print(i)
    seq.extend(list(le.transform(words[i:i + max_np_len])))
for i in range(len(seq)):
    seq[i] = float(seq[i])

model = ARIMA(seq, order=(2, 1, 0))
model_fit = model.fit(disp=0)
output = model_fit.forecast()
prediction = le.inverse_transform(
    [int(symbol.flatten()[0]) for symbol in output])
print("Single forecast:", prediction)
print("Fit features")
model.dates, model.freq, model.missing = None, None, None

with open(args.o + "arima.model_fit", "wb") as f:
    pickle.dump(model_fit, f)
with open(args.o + "arima.model", "wb") as f:
    pickle.dump(model, f)

warn("Output written to arima.model and arima.model_fit")
print(datetime.datetime.now())