首页 生活指南 正文内容

我正在使用此指南进行时间序列预测(附带示例数据)

阿立指南 生活指南 2022-09-11 08:09:18 431 0

我正在使用本指南进行时间序列预测(附有示例数据)。

这是代码:

def create_dataset(dataset, window_size = 1):
    data_X, data_Y = [], []
    for i in range(len(dataset) - window_size - 1):
        a = dataset[i:(i + window_size), 0]
        data_X.append(a)
        data_Y.append(dataset[i + window_size, 0])
    return(np.array(data_X), np.array(data_Y))   

def fit_model(train_X, train_Y, window_size = 1):
    model = Sequential()

    model.add(LSTM(4, 
               input_shape = (1, window_size)))
    model.add(Dense(1))
    model.compile(loss = "mean_squared_error", 
              optimizer = "adam")
    model.fit(train_X, 
          train_Y, 
          epochs = 100, 
          batch_size = 1, 
          verbose = 0)

    return(model)

def predict_and_score(model, X, Y):
# Make predictions on the original scale of the data.
    pred = MinMaxScaler(feature_range = (0,1)).inverse_transform(model.predict(X))
# Prepare Y data to also be on the original scale for interpretability.
    orig_data = MinMaxScaler(feature_range = (0,1)).inverse_transform([Y])
# Calculate RMSE.

    score = math.sqrt(mean_squared_error(orig_data[0], pred[:, 0]))
    return(score, pred)

整个功能正在以下功能中使用:

def nnet(time_series, window_size=1,  ): 
    cmi_total_raw = vstack((time_series.values.astype('float32')))
    scaler = MinMaxScaler(feature_range = (0,1))
    cmi_total_scaled = scaler.fit_transform(cmi_total_raw)
    cmi_train_sc = (cmi_total_scaled[0:int(cmi_split*len(cmi_total_scaled))])
    cmi_test_sc = cmi_total_scaled[int(cmi_split*len(cmi_total_scaled)) : len(cmi_total_scaled)] 


    # Create test and training sets for one-step-ahead regression.
    window_size = 1
    train_X, train_Y = create_dataset(cmi_train_sc, window_size)
    test_X, test_Y = create_dataset(cmi_test_sc, window_size)

    # Reshape the input data into appropriate form for Keras.
    train_X = np.reshape(train_X, (train_X.shape[0], 1, train_X.shape[1]))
    test_X = np.reshape(test_X, (test_X.shape[0], 1, test_X.shape[1]))

    model = fit_model(train_X, train_Y, window_size)

    rmse_train, train_predict = predict_and_score(nn_model, train_X, train_Y)

    mape_test, test_predict = predict_and_score(model, test_X, test_Y)    
    return (mape_test, test_predict)   

据我了解时间序列分析:单变量和多变量方法 pdf,它是根据训练数据创建模型,并根据样本内测试集进行预测时间序列分析:单变量和多变量方法 pdf,最后计算误差。

输入数据有 209 行,我想预测下一行。

这是我尝试过的:

由于使用 (steps=) 方法在 Auto-Arima 中完成了相同的操作,因此我在 Keras 中寻找了类似的东西。

来自 Keras 文档:

(x,=无,=0,步数=无)

范围:

x:输入数据,作为 Numpy 数组(如果模型有,则为 Numpy 列表)。

步数:回合的总步数。值为无。

我尝试改变步长,它预测了一个非常荒谬的值 100,000。而且,长度还是很接近我给的步数。所以我认为 step 在这里还有其他含义。

问题 - Keras 甚至可以用于预测时间序列数据(样本外) - 如果是这样,有没有办法像上面一样做?- 如果没有,有没有办法使用现有方法摆脱样本外预测?

样本():

2014-05-25    272.459887
2014-06-01    272.446022
2014-06-08    330.301260
2014-06-15    656.838394
2014-06-22    670.575110

解决方案 暂无答案

关注本站公众号:程序员总部,领取三大福利!福利一:前端辅导福利二:进程序员微信群,程序员圈专属福利三:领取全套零基础视频教程(,java,front-end,php)

欢迎 发表评论:

文章目录
    搜索