【问题标题】:How to apply LSTM to predict parking Availability如何应用 LSTM 预测停车可用性
【发布时间】:2021-06-13 10:12:52
【问题描述】:

我是循环神经网络的新手,我必须应用 LSTM (KERAS) 从我的数据集中预测停车可用性。我有一个具有两个特征的数据集,时间戳(Y-M-D H-M-S)和停车可用性(免费停车位的数量)。从上午 00:03 到下午 23:58(每天 188 个样本),每 5 分钟对停车可用性进行采样,持续时间为 25 周。我需要一些帮助来了解如何应用 LSTM(选择什么时间步长)。

【问题讨论】:

    标签: python tensorflow keras lstm prediction


    【解决方案1】:

    您似乎想了解如何使用您的数据集并在其上应用 LSTM 以从您的数据中获取一些有意义的信息。

    现在您可以在这里重新构建您的数据集,以从您当前的数据集中创建更多特征,例如。

    可以从数据中导出的特征

    1. 每月取出日期(1-31 是哪一天)
    2. 每月的第几周(每月的第 1-4 周)
    3. 星期几(周一至周六)
    4. 现在几点了(188 中可以取任意值)

    可以从开源数据中添加的功能

    1. 今天是什么天气
    2. 附近有假期吗(下一个假期/活动等的剩余天数)

    现在让我们假设您的数据中的每一行都有 K 个特征,并且您有一个目标,您必须预测哪些是可用的停车位。 P(#parking_space|X)

    现在只需在创建模型时将您的时间步长作为一个变量,并将您的数据从 X.shape-->(Examples, Features) 重塑为 X.shape-->(examples,Timesteps,Features) 格式。您可以使用下面的代码并定义自己的look_back

    这里你的架构将是多对多的,Tx=Ty

    def create_dataset_many_to_many(dataset,look_back=70):
        data_timestamp=[]
        for i in range(len(dataset)-look_back):
            data_timestamp.append(dataset[i:i+look_back])
            if i%1000==0:
                print(i)
        return np.array(data_timestamp)
    

    现在您可以构建模型了

    import tensorflow as tf
    
    import matplotlib.pyplot as plt
    # Importing pandas
    import pandas as pd
    # Importing keras model
    from tensorflow.keras.models import Model
    # Importing layers like input and dense
    from tensorflow.keras.layers import Dense, Input,LSTM,Dropout
    #importing train test split
    from sklearn.model_selection import train_test_split
    
    class Lstm_model(tf.keras.Model):
        def __init__(self, **kwargs):
            super(Lstm_model, self).__init__()   
            self.Lstm1 = tf.keras.layers.LSTM(32,return_sequences=True)
            self.Lstm2 = tf.keras.layers.LSTM(32,return_sequences=True) 
            self.Regressor = tf.keras.layers.Dense(1, )
    
        def call(self, inputs):
    
            input_A=inputs
            x = self.Lstm1(input_A)
            x = self.Lstm2(x)
            pred = self.Regressor(x) 
            
            return  pred
    
    lstms_ = Lstm_model()
    lstms_.compile(optimizer='adam', loss=tf.keras.losses.MeanSquaredError())
    lstms_.fit(X,Y, epochs=50)
    

    这只是您如何制作模型的一瞥。

    【讨论】:

    • 非常感谢。你能帮我调整一下look_back参数吗?如果我将我的数据集划分为前 23 周用于训练,最后 2 周用于测试,并且每天每五分钟有一个样本,那么回顾的价值是什么?我开始思考,即 6 半小时和 12 小时
    • 把数据分成三部分!!以 70:20:10 的比例进行训练、验证和测试。使用回顾作为超参数。针对多个值训练和验证您的模型。取最佳分数对应的look_back。 Look_back 是一个代理,它会告诉您要使用多少个时间戳!看一下create_data_set_many_to_many的代码
    • 谢谢。最后一件事,如何使用星期几作为功能? (作为布尔值、字符串等)?
    • 一种热编码可能是一种方法! @LucaMinutillo 如果对您有帮助,请接受答案!谢谢
    • 当然。非常感谢。我需要另一件事。如果我想在回顾之后不仅预测 t+1 还预测 5 个样本,例如如何更改创建数据集?
    猜你喜欢
    • 1970-01-01
    • 2018-05-16
    • 2020-08-24
    • 2020-08-25
    • 1970-01-01
    • 2018-09-24
    • 2021-04-21
    相关资源
    最近更新 更多