网络上利用LSTM预测轨迹的文章不多,仅有的几篇比较粗略。本文对一些大佬开源的代码进行修改,增添了轨迹连续预测代码。不足之处欢迎批评。
本文参考Muzi_Water大佬的文章“LSTM模型 轨迹经纬度预测”https://blog.csdn.net/Muzi_Water/article/details/103921115
大佬的文章预测代码部分仅仅测试了一组坐标,预测了一个坐标。我在其代码基础上进行修改,预测了整条连续的轨迹。而且大佬的文章里用的TensorFlow比较老了,我将部分代码改成适用于TensorFlow2.2.0的。
数据集可以直接用Geolife,我是用自己的数据,如图所示。利用前两列经纬度信息
用前六个位置信息预测下一个位置
训练代码
import numpy as np
from keras.layers.core import Dense, Activation, Dropout
from keras.layers import LSTM
from keras.models import Sequential, load_model
from keras.callbacks import Callback
import keras.backend.tensorflow_backend as KTF
import tensorflow as tf
import pandas as pd
import os
import keras.callbacks
import matplotlib.pyplot as plt
# 设定为自增长
os.environ['CUDA_VISIBLE_DEVICES'] = '0'
config=tf.compat.v1.ConfigProto()
config.gpu_options.allow_growth = True
session=tf.compat.v1.Session(config=config)
KTF.tf.compat.v1.keras.backend.set_session(session)
def create_dataset(data, n_predictions, n_next):
'''
对数据进行处理
'''
dim = data.shape[1]
train_X, train_Y = [], []
for i in range(data.shape[0] - n_predictions - n_next - 1):
a = data[i:(i + n_predictions), :]
train_X.append(a)
tempb = data[(i + n_predictions):(i + n_predictions + n_next), :]
b = []
for j in range(len(tempb)):
for k in range(dim):
b.append(tempb[j, k])
train_Y.append(b)
train_X = np.array(train_X, dtype='float64')
train_Y = np.array(train_Y, dtype='float