700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 马里兰大学calce电池循环测试数据集_Keras-建立RNN(循环神经网络)

马里兰大学calce电池循环测试数据集_Keras-建立RNN(循环神经网络)

时间:2022-12-22 20:22:51

相关推荐

马里兰大学calce电池循环测试数据集_Keras-建立RNN(循环神经网络)

循环神经网络(Recurrent Neural Network, RNN)是一类以序列(sequence)数据为输入,在序列的演进方向进行递归(recursion)且所有节点(循环单元)按链式连接的递归神经网络(recursive neural network)。

过多的原理我就不多说了,简单的理解就是前一批数据会产生一个结果输出,并同下一批数据一起作为输入产生一个下一个结果输出,如此往复循环。就是说前面的数据会对后面的结果有影响。

下面我们开始写一个RNN预测google股票模型

1.读取Google数据

import pandasgoogl = pandas.read_csv('../data/google_stock_prics.csv')print(googl.head())

这里总共有/12/31到/7/25 共2156条数据

2.将数据分为训练与测试数据集

training_set = googl.iloc[0:2156 - 300, 4:5].valuestest_set = googl.iloc[2156 - 300:, 4:5].valuesprint(training_set.shape)

这里我们用后面的300条数据作为我们的测试数据,前面的1856条作为我们的训练数据。由于我们是预测股价,所以我们只取收盘价,Close这列

3.标准化

from sklearn.preprocessing import MinMaxScalersc = MinMaxScaler(feature_range = (0, 1))training_set_scaled = sc.fit_transform(training_set)

4.划分输入x和目标y

import numpy as npX_train = []y_train = []for i in range(60, len(training_set_scaled) ):X_train.append(training_set_scaled[i-60:i, 0])y_train.append(training_set_scaled[i,0])X_train, y_train = np.array(X_train), np.array(y_train)print(X_train.shape)print(y_train.shape)X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1))print(X_train.shape)

这一步是关键,很多人没搞懂rnn主要是这里没弄明白,数据集我们划分好了,作为训练数据,哪些数据是x输入特征,哪些是y预测值呢。这里我们用前60天的数据当做输入x,第61天数据当作目标y。(当然我们也可以拿前10天的数据当作输入x,第11天当作目标y.)。我们会发现,x_train.shape (1796, 60) y_train.shape(1796,)。我们在对x_train reshape下变成(1796, 60, 1)

大家可以看图理解下,就是用x 来预测y

5.构建LSTM神经网路

from keras.models import Sequentialfrom keras.layers import Densefrom keras.layers import LSTMfrom keras.layers import Dropoutregressor = Sequential()regressor.add(LSTM(units = 50, return_sequences = True, input_shape = (X_train.shape[1], 1)))regressor.add(Dropout(0.2))regressor.add(LSTM(units = 50, return_sequences = True))regressor.add(Dropout(0.2))regressor.add(LSTM(units = 50, return_sequences = True))regressor.add(Dropout(0.2))regressor.add(LSTM(units = 50))regressor.add(Dropout(0.2))regressor.add(Dense(units = 1))pile(optimizer = 'adam', loss = 'mean_squared_error')regressor.fit(X_train, y_train, epochs = 100, batch_size = 100)

6.评估模型在测试数据集的表现

#对测试数据标准化test_set = sc.transform(test_set)#划分测试集的x输入特征X_test = []for i in range(60, len(test_set)):X_test.append(test_set[i-60:i, 0])X_test = np.array(X_test)X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))#预测predicted_stock_price = regressor.predict(X_test)#对预测数据还原。predicted_stock_price = sc.inverse_transform(predicted_stock_price)# print(predicted_stock_price)real_stock_price = sc.inverse_transform(test_set[60:])

由于我们测试数据进行了标准化,所以要得到预测数据的实际值我要inverse_transform进行标准化恢复。这里我还要注意,我们是取前60天的数据,所以y真实值我们要取61天的。这里我们为什么写test_set[60:]大家要注意,数组是0为第一位的。所以我这里的60实际上是61位置的值。

7.画图

import matplotlib.pyplot as pltplt.plot(real_stock_price, color = 'red' , label = 'Google Stock Price')plt.plot(predicted_stock_price, color = 'blue', label = 'Predicted Google Stock Price')plt.title('Google Stock Price Prediction')plt.xlabel('Time')plt.ylabel('Google Stock Price')plt.legend()plt.show()

我们会看到整体趋势还不错。

大家可以用这个方法取试试预测彩票的蓝球。没准下一个500中奖者就是你。

/s/1w4d2mGV3puGKD4JBZj4RSg

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。