Python(Keras)实现 LSTM 对销售额的预测
Python(Keras)实现 LSTM 对销售额的预测
LSTM(Long Short-Term Memory)是一种常用的循环神经网络,它能够处理序列数据,具有记忆能力,适用于时间序列预测等任务。在本文中,我们将使用 Python 中的 Keras 库实现 LSTM 对销售额的预测。
1. 数据准备
首先,我们需要准备数据。假设我们有一份销售额数据,包含每个月的销售额。我们可以使用 Pandas 库读取数据,并将其转换为 Numpy 数组。
```python
import pandas as pd
import numpy as np
# 读取数据
data = pd.read_csv('sales.csv')
# 将数据转换为 Numpy 数组
sales = np.array(data['sales'])
```
接下来,我们需要将数据进行归一化处理,以便 LSTM 模型更好地学习。我们可以使用 Scikit-learn 库中的 MinMaxScaler 类进行归一化处理。
```python
from sklearn.preprocessing import MinMaxScaler
# 创建 MinMaxScaler 对象
scaler = MinMaxScaler(feature_range=(0 1))
# 将数据进行归一化处理
sales = scaler.fit_transform(sales.reshape(-1 1))
```
最后,我们需要将数据转换为时间序列数据。我们可以定义一个函数,将数据转换为时间序列数据,其中参数 look_back 表示每个时间步所包含的历史数据的数量。
```python
def create_dataset(dataset look_back=1):
X Y = [] []
for i in range(len(dataset)-look_back):
X.append(dataset[i:i+look_back 0])
Y.append(dataset[i+look_back 0])
return np.array(X) np.array(Y)
# 将数据转换为时间序列数据
look_back = 12
X Y = create_dataset(sales look_back)
```
2. 模型构建
接下来,我们需要构建 LSTM 模型。我们可以使用 Keras 库中的 Sequential 类来构建模型。我们将使用一个 LSTM 层和一个全连接层来构建模型。
```python
from keras.models import Sequential
from keras.layers import LSTM Dense
# 创建 Sequential 对象
model = Sequential()
# 添加 LSTM 层
model.add(LSTM(50 input_shape=(look_back 1)))
# 添加全连接层
model.add(Dense(1))
# 编译模型
model.compile(loss='mean_squared_error' optimizer='adam')
```
3. 模型训练
接下来,我们需要训练模型。我们可以使用 Keras 库中的 fit() 函数来训练模型。我们将使用 100 个 epoch 和 32 个批次进行训练。
```python
# 训练模型
model.fit(X Y epochs=100 batch_size=32 verbose=2)
```
4. 模型预测
最后,我们可以使用训练好的模型进行预测。我们可以使用 Keras 库中的 predict() 函数来进行预测。我们将使用最后 12 个月的数据进行预测。
```python
# 使用模型进行预测
last_month = sales[-look_back:]
last_month = last_month.reshape(1 look_back 1)
prediction = model.predict(last_month)
# 将预测结果进行反归一化处理
prediction = scaler.inverse_transform(prediction)
print('预测销售额为:' prediction[0][0])
```
完整代码如下:
```python
import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import LSTM Dense
# 读取数据
data = pd.read_csv('sales.csv')
# 将数据转换为 Numpy 数组
sales = np.array(data['sales'])
# 创建 MinMaxScaler 对象
scaler = MinMaxScaler(feature_range=(0 1))
# 将数据进行归一化处理
sales = scaler.fit_transform(sales.reshape(-1 1))
# 将数据转换为时间序列数据
look_back = 12
X Y = create_dataset(sales look_back)
# 创建 Sequential 对象
model = Sequential()
# 添加 LSTM 层
model.add(LSTM(50 input_shape=(look_back 1)))
# 添加全连接层
model.add(Dense(1))
# 编译模型
model.compile(loss='mean_squared_error' optimizer='adam')
# 训练模型
model.fit(X Y epochs=100 batch_size=32 verbose=2)
# 使用模型进行预测
last_month = sales[-look_back:]
last_month = last_month.reshape(1 look_back 1)
prediction = model.predict(last_month)
# 将预测结果进行反归一化处理
prediction = scaler.inverse_transform(prediction)
print('预测销售额为:' prediction[0][0])
```
参考文献:
[1]