首页 > 解决方案 > 数百万个分类数据 + 输入 LSTM 的位置和时间。我在这里做了所有的答案

问题描述

我有以下问题,我无法在这里或其他任何地方找到答案。我已经坚持了很长时间了。我真的需要有人帮助

我在 python 中有一个 1.2 亿行的 4 个维度的数据框,表示设备 ID 在特定时刻的位置。device_id 列是分类的,而其余列是数字的。这个数据集中有1500万个不同的device_id形式的分类数据数据
框如下(前3行)

device_id                    seconds      latitude     longitude

jg4M/taYRc2cBJPGa8c8vw==       752        53.392060    -2.069796
jg4M/taYRc2cBJPGa8c8vw==       753        53.392060    -2.069796
PdhyfpkIT8Weslb54thwuQ==       754        51.496483     0.116620       

我必须将此数据框输入加权集成 LSTM

我无法使用一个热编码器将 device_id 分类列转换为数字列,因为会创建一个具有数十亿个零的矩阵,并且 LSTM 会给出错误的预测我尝试如下标签编码器

#transforming device_id into numbers
le = preprocessing.LabelEncoder()
data1['device'] = le.fit_transform(data1['device_id'])

这给出了这个结果

device_id       seconds       latitude      longitude
7658              752         53.392060     -2.069796
7658              752         53.392060     -2.069796
4433              754         51.496483      0.116620

它非常适合 LSTM,但它给出了错误的预测

我还使用此代码将长 lat 转换为 x,y,z 坐标

data1['x'] = data1.apply(lambda row : np.cos(row.lat1_rad)* np.cos(row.long1) * 6371 , axis =1)
data1['y'] = data1.apply(lambda row : np.cos(row.lat1_rad)* np.sin(row.long1) * 6371 , axis =1)
data1['z'] = data1.apply(lambda row : np.sin(row.long1) * 6371, axis =1)

因此错误一定是使用标签编码器将1500万个device_ID的分类数据转换为数字日期。

LSTM 网络应该做的预测是关于 device_ID 的位置,因此我不能忽略带有 device_ID 的列

我正在考虑使用自动编码器,但我可能必须输入 1500 万个不同的 device_id,我也会遇到同样的问题。此外,结果必须是 LSTM 能够使用的向量。

有任何想法吗?

非常感谢我真的需要帮助

标签: pythondeep-learningtime-serieslstmcategorical-data

解决方案


推荐阅读