python - 在 python 中使用神经网络预测时间序列数据

标签 python algorithm neural-network keras

我是神经网络的初学者,试图用 Python 中的 5 个输入预测温度值(输出)。我在 python 中使用 keras 包来处理神经网络。

此外,我使用了前馈神经网络(回归)和循环神经网络(LSTM)这两种算法来预测值。然而,这两种算法都不能很好地用于预测。

在我的前馈神经网络(回归)案例中,我使用了 3 个隐藏层(具有 100、200、300 个神经元),如下面的代码,

def baseline_model():
    # create model
    model = Sequential()
    model.add(Dense(100, input_dim=5, kernel_initializer='normal', activation='sigmoid'))
    model.add(Dense(200, kernel_initializer = 'normal', activation='sigmoid'))
    model.add(Dense(300, kernel_initializer = 'normal', activation='sigmoid'))
    model.add(Dense(1, kernel_initializer='normal'))
    # Compile model
    model.compile(loss='mean_squared_error', optimizer='adam')
    return model


df = DataFrame({'Time': TIME_list, 'input1': input1_list, 'input2': input2_list, 'input3': input3_list, 'input4': input4_list, 'input5': input5_list, 'output': output_list})
df.index = pd.to_datetime(df.Time)
df = df.values

#Setting training data and test data
train_size_x = int(len(df)*0.8)     #The user can change the range of training data
print(train_size_x)
X_train = df[0:train_size_x, 0:5]
t_train = df[0:train_size_x, 6]
X_test = df[train_size_x:int(len(df)), 0:5]
t_test = df[train_size_x:int(len(df)), 6]

# fix random seed for reproducibility
seed = 7
np.random.seed(seed)

scale = StandardScaler()
X_train = scale.fit_transform(X_train)
X_test = scale.transform(X_test)

#Regression in Keras package
clf = KerasRegressor(build_fn=baseline_model, nb_epoch=50, batch_size=5, verbose=0)

clf.fit(X_train,t_train)
res = clf.predict(X_test)

但是,错误还是挺大的。最大绝对误差为 78.4834。因此,我尝试通过更改隐藏层或隐藏层中神经元的数量来最小化该错误,但错误保持不变。

在前馈 NN 之后,其次,我使用了循环神经网络 (LSTM) 算法,它可以仅使用一个输入进行预测。在我的例子中,输入是温度。它给我的错误比前馈 NN 少得多,但我深深地认为我实现的循环神经网络(LSTM)在我的情况下有点模棱两可,因为它没有使用影响输出(温度值)的 5 个输入作为我在上面实现的前馈回归。

现在我不知道应该使用哪些其他类型的算法。

对我的案例有什么建议或想法吗?

提前致谢。

最佳答案

我必须同意评论者对你的问题的看法,你有点过头了。神经网络有时看起来像是黑魔法,值得花时间了解幕后的实际情况。开始学习和试验的好地方是 sklearn。 Sklearn 是一个很好的起点,因为您可以轻松尝试不同的技术,这将帮助您快速学习如何构建问题。还有大量的信息和教程。

从那里,您将能够更好地从头开始处理您自己的神经网络。此外,sklearn 有许多有用的功能来预处理/规范化您的训练数据,这本身就是一门完整的艺术。

已经有大量适用于常见情况的良好网络。大部分工作是为您的问题选择正确的结构,获取良好的数据进行训练,并处理该数据以便正确利用它。

检查一下... http://scikit-learn.org/stable/

关于python - 在 python 中使用神经网络预测时间序列数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45450015/

相关文章:

javascript - 返回数组中的第一个重复数字

neural-network - 原型(prototype)神经网络

algorithm - 为翻译字幕添加静音的机器学习方法

algorithm - 快速 sigmoid 算法

python - 查找两个文件之间的共同元素

python - 如何在不重复导入顶级名称的情况下构造python包

python - pydub可以设置最大/最小音量吗?

java - 根据对象的属性将对象归为特定类型

python - 使用 numpy.ma 屏蔽空白值

algorithm - 使用黑盒 findmax 子程序进行排序的运行时间