共享单车作为一种新兴的交通方式,近年来受到越来越多城市居民的青睐。为了有效管理共享单车的使用情况,预测其租赁数量是一个重要的研究方向。本文将介绍如何利用深度学习模型如LSTM、BiLSTM、GRU、TCN和Transformer来进行共享单车租赁数据的预测。我们将用相同的数据集展示这几种模型的实现,所有模型仅需修改一行代码即可切换。

数据准备

首先,我们需要准备共享单车的租赁数据。假设我们已有一个包含租赁数量和相关特征(如天气、时间等)的数据集。我们需要对数据进行预处理,包括归一化和划分训练集和测试集。

import pandas as pd
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split

# 读取数据
data = pd.read_csv('bike_sharing_data.csv')

# 数据预处理,选择特征和目标变量
features = data[['temperature', 'humidity', 'windspeed']]
target = data['count']

# 归一化特征
scaler = MinMaxScaler()
features_scaled = scaler.fit_transform(features)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(features_scaled, target, test_size=0.2, random_state=42)

模型实现

接下来,我们将实现不同的模型。这里以简化的步骤展示各模型的实现,所有模型的构建方式几乎相同,只是在模型类型上做了调整。

LSTM-KAN

import torch
import torch.nn as nn

class LSTM_KAN(nn.Module):
    def __init__(self, input_size, hidden_size, output_size):
        super(LSTM_KAN, self).__init__()
        self.lstm = nn.LSTM(input_size, hidden_size, batch_first=True)
        self.fc = nn.Linear(hidden_size, output_size)

    def forward(self, x):
        out, (hn, cn) = self.lstm(x)
        return self.fc(hn[-1])

# 使用示例
model = LSTM_KAN(input_size=3, hidden_size=64, output_size=1)

BiLSTM-KAN

class BiLSTM_KAN(nn.Module):
    def __init__(self, input_size, hidden_size, output_size):
        super(BiLSTM_KAN, self).__init__()
        self.lstm = nn.LSTM(input_size, hidden_size, batch_first=True, bidirectional=True)
        self.fc = nn.Linear(hidden_size * 2, output_size)

    def forward(self, x):
        out, (hn, cn) = self.lstm(x)
        return self.fc(hn[-1])

# 使用示例
model = BiLSTM_KAN(input_size=3, hidden_size=64, output_size=1)

GRU-KAN

class GRU_KAN(nn.Module):
    def __init__(self, input_size, hidden_size, output_size):
        super(GRU_KAN, self).__init__()
        self.gru = nn.GRU(input_size, hidden_size, batch_first=True)
        self.fc = nn.Linear(hidden_size, output_size)

    def forward(self, x):
        out, hn = self.gru(x)
        return self.fc(hn[-1])

# 使用示例
model = GRU_KAN(input_size=3, hidden_size=64, output_size=1)

TCN-KAN

from torch import nn

class TCN_KAN(nn.Module):
    def __init__(self, input_size, output_size):
        super(TCN_KAN, self).__init__()
        self.tcn = nn.Conv1d(input_size, output_size, kernel_size=3, padding=1)

    def forward(self, x):
        x = x.transpose(1, 2)  # 转置以适应Conv1d输入
        return self.tcn(x)

# 使用示例
model = TCN_KAN(input_size=3, output_size=1)

Transformer-KAN

class Transformer_KAN(nn.Module):
    def __init__(self, input_size, output_size):
        super(Transformer_KAN, self).__init__()
        self.transformer_layer = nn.TransformerEncoderLayer(input_size, nhead=4)
        self.fc = nn.Linear(input_size, output_size)

    def forward(self, x):
        x = self.transformer_layer(x)
        return self.fc(x)

# 使用示例
model = Transformer_KAN(input_size=3, output_size=1)

模型训练与评估

模型构建后,我们需要对其进行训练和评估。可以使用常见的损失函数如均方误差损失(MSE)和优化器如Adam进行优化。

criterion = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)

# 训练过程
for epoch in range(100):
    model.train()
    optimizer.zero_grad()

    outputs = model(torch.Tensor(X_train).view(-1, 1, 3))
    loss = criterion(outputs, torch.Tensor(y_train).view(-1, 1))
    loss.backward()
    optimizer.step()

    if (epoch+1) % 10 == 0:
        print(f'Epoch [{epoch+1}/100], Loss: {loss.item():.4f}')

总结

通过上述代码,我们展示了如何利用不同的深度学习模型(LSTM、BiLSTM、GRU、TCN、Transformer)来预测共享单车的租赁数量。所有模型的切换仅需修改模型类的实例化代码,可以有效降低实现成本。未来的研究可以在数据集的丰富性、特征工程及模型调优等方面进一步探索,以优化共享单车的租赁预测效果。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部