写一个利用lstm的水质预测模型
时间: 2024-05-12 12:08:10 浏览: 124
基于小波分解的LSTM水质预测模型
好的,以下是一个利用LSTM的水质预测模型的代码示例,供参考:
```python
import numpy as np
import pandas as pd
from keras.models import Sequential
from keras.layers import Dense, LSTM, Dropout
from sklearn.preprocessing import MinMaxScaler
# 读取数据
data = pd.read_csv('water_quality.csv')
data = data.drop(['date'], axis=1) # 删除日期列
print(data.head())
# 数据归一化
scaler = MinMaxScaler(feature_range=(0, 1))
data_scaled = scaler.fit_transform(data)
# 划分训练集和测试集
train_size = int(len(data_scaled) * 0.8)
test_size = len(data_scaled) - train_size
train_data = data_scaled[0:train_size, :]
test_data = data_scaled[train_size:len(data_scaled), :]
# 创建时间步长为60的数据集
def create_dataset(dataset, look_back=60):
X, Y = [], []
for i in range(len(dataset)-look_back-1):
a = dataset[i:(i+look_back), :]
X.append(a)
Y.append(dataset[i + look_back, :])
return np.array(X), np.array(Y)
look_back = 60
X_train, Y_train = create_dataset(train_data, look_back)
X_test, Y_test = create_dataset(test_data, look_back)
# 创建LSTM模型
model = Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=(X_train.shape[1], X_train.shape[2])))
model.add(Dropout(0.2))
model.add(LSTM(units=50, return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(units=50))
model.add(Dropout(0.2))
model.add(Dense(units=1))
# 编译模型
model.compile(loss='mean_squared_error', optimizer='adam')
# 训练模型
model.fit(X_train, Y_train, epochs=50, batch_size=72, validation_data=(X_test, Y_test), verbose=2)
# 预测
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)
# 计算误差
train_score = np.sqrt(mean_squared_error(Y_train[:,0], train_predict[:,0]))
print('Train Score: %.2f RMSE' % (train_score))
test_score = np.sqrt(mean_squared_error(Y_test[:,0], test_predict[:,0]))
print('Test Score: %.2f RMSE' % (test_score))
```
该模型的过程如下:
1. 读取数据并删除日期列。
2. 进行数据归一化。
3. 将数据集分为训练集和测试集。
4. 创建时间步长为60的数据集。
5. 创建LSTM模型,并编译模型。
6. 训练模型。
7. 预测并反归一化数据。
8. 计算误差。
需要注意的是,该示例中没有包含数据的读取和预处理过程,需要根据实际情况进行编写。
阅读全文