python - 数百万个分类数据 + 输入 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 能够使用的向量。
有任何想法吗?
非常感谢我真的需要帮助
解决方案
推荐阅读
- javascript - 展开和折叠 HTML 表数据行
- python - 试图改变列表失败
- streamlit - 有没有办法在流光中更改微调器的占位符文本?
- php - laravel中api的更新方法不起作用
- vue.js - 在 vue 中检测 tbody 上的滚动
- firebase - SwiftUI:Firebase ForEach 列表执行编辑功能无法编辑选定的行项目
- c - 在 C 中将静态大小的向量与静态大小的常量非方阵相乘的最快方法,生成一个 15 元素的输出向量
- javascript - 如何在“for in”循环中获取对象?
- python - 如何从doc文件中提取文本?
- arrays - Laravel 验证 - 通过自定义规则相互验证关联数组值