【问题标题】:Predict the next location based on the previous days data using lstm使用 lstm 根据前几天的数据预测下一个位置
【发布时间】:2019-10-12 06:34:04
【问题描述】:

根据 10 天的数据我需要预测用户第 11 天的位置。我的输入示例在this link

数据集包含: 200,000 个用户,每个用户有 1550 个随机位置点和 10 天的历史记录

from datetime import datetime
from random import seed

import pandas as pd

seed(150)

df = pd.read_csv('input.csv', delimiter=';')
df = df.iloc[:-1,:]
df = df.drop(columns='tslot')

def normalize_cols(df, cols):
for col in df.columns:
print(col, df[col].max(), df[col].min())
df[col] = (df[col] - df[col].min())/(df[col].max() - df[col].min())
return df

df = normalize_cols(df, ['slot', 'location', 'user'])
df.to_csv('cleaned_data.csv', index=False)
from keras.models import Sequential, load_model
from keras.layers import Dense, LSTM, Dropout
from matplotlib import pyplot
import numpy as np
import pandas as pd
df = pd.read_csv('cleaned_data.csv')
train_x = df[['slot', 'user']].copy()
train_y = df[['tower']].copy().values
train_x = train_x.values.reshape((train_x.shape[0], 1, train_x.shape[1]))
model = Sequential()
model.add(LSTM(50, input_shape=(train_x.shape[1], train_x.shape[2])))
model.add(Dropout(0.5))
model.add(Dense(40))
model.add(Dropout(0.3))
model.add(Dense(20))
model.add(Dropout(0.2))
model.add(Dense(1))
model.compile(loss='mae', optimizer='adam')
history = model.fit(train_x, train_y, epochs=100, batch_size=25,  verbose=2, shuffle=True)
model.save('5g_tower.h5')
del model
model = load_model('5g_tower.h5')
## Prediction
def get_tower_number(model, slot, user): 
## normalize input slot, tower, user
slot = ((slot - 0)*1.0) / ((95.0 - 0.0)*1.0)
user = ((user - 1)*1.0) / ((2.0 - 1.0)*1.0)

## get a slot for next 15 mins
res = model.predict(np.array([[[slot, user]]]))

## de-normalize that tower
return int(res[0][0] * ((1354.0 - 9.0)*1.0) + 9.0)

print(get_tower_number(model, 4, 1))

但未能预测用户第 11 天的位置。与所需的输出相比,我得到的输出是错误的。 输出示例在this link 中给出。如何在这个系统中实现个体模型而不是全局模型? 示例输出应该是第 11 天:

     User   location   slot
      1        145       0




      1         94       95
      2         562       0

      2         583       95

实际数据集共包含 350,000 个用户

【问题讨论】:

  • “失败”是什么意思?没有输出,输出错误?您真的应该在此处引用(部分)示例输出,而不是将我们引导至广告泛滥、寿命短的文件托管服务。
  • 请修正代码中的缩进。你的代码中有这些大括号(第一行和最后一行)吗?

标签: python deep-learning time-series lstm prediction


【解决方案1】:

仅查看模型实现,您缺少每个 Dense 块的激活函数,因此 keras 正在应用线性激活。 您可以使用以下方法进行修改:

model.add(Activation('relu'))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-08
    • 2015-07-06
    • 1970-01-01
    相关资源
    最近更新 更多