用tensorflow实现lstm预测
时间: 2024-04-18 13:19:09 浏览: 194
1. 导入所需库
```python
import pandas as pd
import numpy as np
import tensorflow as tf
from tensorflow.keras.layers import LSTM, Dense
from tensorflow.keras.models import Sequential
from sklearn.preprocessing import MinMaxScaler
```
2. 加载数据
```python
df = pd.read_csv('data.csv')
```
3. 数据预处理
```python
# 将数据转换为numpy数组
data = df.values
# 将数据缩放到0到1之间
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(data)
# 将数据拆分为训练集和测试集
train_size = int(len(scaled_data) * 0.8)
test_size = len(scaled_data) - train_size
train_data = scaled_data[0:train_size, :]
test_data = scaled_data[train_size:len(scaled_data), :]
# 将数据转换为x_train和y_train
def create_dataset(dataset, time_step=1):
data_x, data_y = [], []
for i in range(len(dataset) - time_step - 1):
a = dataset[i:(i + time_step), 0]
data_x.append(a)
data_y.append(dataset[i + time_step, 0])
return np.array(data_x), np.array(data_y)
time_step = 100
x_train, y_train = create_dataset(train_data, time_step)
x_test, y_test = create_dataset(test_data, time_step)
# 将数据转换为3D格式
x_train = x_train.reshape(x_train.shape[0], x_train.shape[1], 1)
x_test = x_test.reshape(x_test.shape[0], x_test.shape[1], 1)
```
4. 构建模型
```python
model = Sequential()
model.add(LSTM(50, return_sequences=True, input_shape=(x_train.shape[1], 1)))
model.add(LSTM(50, return_sequences=True))
model.add(LSTM(50))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mean_squared_error')
```
5. 模型训练
```python
model.fit(x_train, y_train, validation_data=(x_test, y_test), epochs=100, batch_size=64, verbose=1)
```
6. 模型预测
```python
train_predict = model.predict(x_train)
test_predict = model.predict(x_test)
# 将预测值反缩放
train_predict = scaler.inverse_transform(train_predict)
y_train = scaler.inverse_transform([y_train])
test_predict = scaler.inverse_transform(test_predict)
y_test = scaler.inverse_transform([y_test])
# 计算rmse
train_score = np.sqrt(np.mean(np.power(y_train - train_predict, 2)))
test_score = np.sqrt(np.mean(np.power(y_test - test_predict, 2)))
```
7. 可视化结果
```python
import matplotlib.pyplot as plt
# 绘制训练集预测结果和实际值
plt.plot(y_train[0])
plt.plot(train_predict)
plt.title("Train Predictions")
plt.xlabel("Time")
plt.ylabel("Value")
plt.legend(["Actual", "Predicted"])
plt.show()
# 绘制测试集预测结果和实际值
plt.plot(y_test[0])
plt.plot(test_predict)
plt.title("Test Predictions")
plt.xlabel("Time")
plt.ylabel("Value")
plt.legend(["Actual", "Predicted"])
plt.show()
```
阅读全文
相关推荐
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)