gpt4 book ai didi

python - 如何使用keras实现LSTM中多元回归的输入?

转载 作者:行者123 更新时间:2023-11-30 09:41:52 26 4
gpt4 key购买 nike

这是我的代码

def create_dataset(signal_data, look_back=1):
dataX, dataY = [], []
for i in range(len(signal_data) - look_back):
dataX.append(signal_data[i:(i + look_back), 0])
dataY.append(signal_data[i + look_back, 0])
return np.array(dataX), np.array(dataY)

df = pd.read_csv('time_series.csv')
signal_data = df.Close.values.astype('float32')
signal_data = signal_data.reshape(len(df), 1)


scaler = MinMaxScaler(feature_range=(0, 1))
signal_data = scaler.fit_transform(signal_data)

train_size = int(len(signal_data) * 0.80)
test_size = len(signal_data) - train_size)
# val_size = len(signal_data) - train_size - test_size
train = signal_data[0:train_size]
# val = signal_data[train_size:train_size+val_size]
test = signal_data[train_size+val_size:len(signal_data)]

x_train, y_train = create_dataset(train, look_back)
# x_val, y_val = create_dataset(val, look_back)
x_test, y_test = create_dataset(test, look_back)


x_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1], 1))
# x_val = np.reshape(x_val, (x_val.shape[0], x_val.shape[1], 1))
x_test = np.reshape(x_test, (x_test.shape[0], x_test.shape[1], 1))

现在我想添加df.Opendf.Highdf.Lowdf.Volume

如何实现这段代码?

我应该添加到信号数据中吗?我想知道如何添加数据,以便可以训练信号数据中的多个特征。

我不知道在哪里以及如何实现它。我需要你的帮助。

我们将非常感谢您提出的宝贵意见和想法。

最佳答案

我对您的代码做了一些修改。这应该有效。总结一下:

  • 我修复了对变量 0 的选择进行条形码编码的代码行。现在,目标变量位于最后一个位置,其他变量位于前面的位置
  • 我修复了一些不需要的形状,其他的则被修复以保留所有尺寸
  • 我修复了模型输入形状,现在您有 5 个变量而不是 1

我的一般建议:

  • 我不会使用 MinMaxScaler,它很危险,因为单个异常值可能会扰乱您的所有分布。相反,请使用StandardScaler。更多信息请点击:http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html
  • 之后,当构建 train_xtest_x 及其相应的 y 对应数据时,我会缩放数据。原因是因为您正在使用训练集和测试集计算用于缩放数据的统计数据,即 future 信息。这与您尝试在真实情况下运行代码时发现的情况完全不同。 IE。您必须使用过去的统计数据来衡量新数据。最好构建一个尽可能接近现实的测试集。
  • 您如何知道您的模型足够大,可以对数据进行建模?我会消除丢失并运行模型以查看它是否会过度拟合数据。如果模型可以过度拟合训练数据,则意味着模型足够大,您可以开始正则化模型以增强泛化能力。本书的更多信息:https://www.deeplearning.ai/machine-learning-yearning/
  • 在模型metrics中,您选择accuracy,这是一个分类指标。我会根据我的问题类型(回归)使用一个:例如“平均绝对误差”。

希望我能帮到你:D

<小时/>
import numpy as np
import pandas as pd
from keras.models import Sequential
from keras.layers import Dense, LSTM, Dropout, Conv2D, Reshape, TimeDistributed, Flatten, Conv1D,ConvLSTM2D, MaxPooling1D
from keras.layers.core import Dense, Activation, Dropout
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean_squared_error
import tensorflow as tf
import matplotlib.pyplot as plt


config = tf.ConfigProto()
config.gpu_options.allow_growth=True

sess = tf.Session(config=config)
def create_dataset(signal_data, look_back=1):
dataX, dataY = [], []
for i in range(len(signal_data) - look_back):
dataX.append(signal_data[i:(i + look_back), :])
dataY.append(signal_data[i + look_back, -1])
return np.array(dataX), np.array(dataY)


look_back = 20



df = pd.read_csv('kospi.csv')
signal_data = df[["Open", "Low", "High", "Volume", "Close"]].values.astype('float32')


scaler = MinMaxScaler(feature_range=(0, 1))
signal_data = scaler.fit_transform(signal_data)



train_size = int(len(signal_data) * 0.80)
test_size = len(signal_data) - train_size - int(len(signal_data) * 0.05)
val_size = len(signal_data) - train_size - test_size
train = signal_data[0:train_size]
val = signal_data[train_size:train_size+val_size]
test = signal_data[train_size+val_size:len(signal_data)]



x_train, y_train = create_dataset(train, look_back)
x_val, y_val = create_dataset(val, look_back)
x_test, y_test = create_dataset(test, look_back)




model = Sequential()
model.add(LSTM(128, input_shape=(None, 5),return_sequences=True))
model.add(Dropout(0.3))

model.add(LSTM(128, input_shape=(None, 5)))
model.add(Dropout(0.3))

model.add(Dense(128))
model.add(Dropout(0.3))

model.add(Dense(1))




model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])


model.summary()
hist = model.fit(x_train, y_train, epochs=20, batch_size=32, verbose=2, validation_data=(x_val, y_val))

trainScore = model.evaluate(x_train, y_train, verbose=0)
model.reset_states()
print('Train Score: ', trainScore)
valScore = model.evaluate(x_val, y_val, verbose=0)
model.reset_states()
print('Validataion Score: ', valScore)
testScore = model.evaluate(x_test, y_test, verbose=0)
model.reset_states()
print('Test Score: ', testScore)



p = model.predict(x_test)


print(mean_squared_error(y_test, p))

import matplotlib.pyplot as pplt

pplt.plot(y_test)
pplt.plot(p)
pplt.legend(['testY', 'p'], loc='upper right')
pplt.show()

关于python - 如何使用keras实现LSTM中多元回归的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57543916/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com