python - 重塑 2D 数据帧以包含以前的数据点(用于 Keras 中的 LSTM)
问题描述
我有一个包含 100000 个样本和 10 个特征的数据框。我想将其转换为 3D 数组,其中 [X][0] 是当前数据点,[X][1] 是前一个数据点 (X-1) 等。所以如果我想要一个“回溯”五个单位,数据的形状看起来像 (100000, 5, 10)。原因是我希望我的 LSTM 在训练模型时考虑以前的数据点。
是否有捷径可寻?
解决方案
如果您的数据框的形状为 (100000, 10),则无法将其重塑为 (100000, 5, 10),这仅仅是因为其中没有 100000x5x10 值。因此,第一步是创建滞后特征:
> df = pd.DataFrame({'a':[i for i in range(5)], 'b':[i for i in range(5, 10)]})
> df
> a b
0 0 5
1 1 6
2 2 7
3 3 8
4 4 9
> columns = [df.shift(i) for i in range()]
> df = pd.concat(columns, axis=1)
> df
> a b a b a b
0 0 5 NaN NaN NaN NaN
1 1 6 0.0 5.0 NaN NaN
2 2 7 1.0 6.0 0.0 5.0
3 3 8 2.0 7.0 1.0 6.0
4 4 9 3.0 8.0 2.0 7.0
在此之后,您可以重塑数据框以满足您的需求:
> # 5 samples, 3 timesteps, 2 features
> df.values.reshape(5,3,2)
> array([[[ 0., 5.],
[nan, nan],
[nan, nan]],
[[ 1., 6.],
[ 0., 5.],
[nan, nan]],
...
推荐阅读
- reactjs - 使用 react-router 导航到具体的子节点
- html - 如何使用 css 使文本居中?
- java - ConEmu (CMD) 不能识别这些 unicode 字符?
- django - 如何枚举 Django 中返回的行?
- ios - 在旋转的情况下是否可能发生 UICollectionViewCell 渐变背景层渲染问题?
- javascript - Three.js 如何通过 https 加载 Preview STL?默认加载程序给出混合内容错误
- python - Flask Web App:按按钮过滤表视图
- sql - Laravel 查询 - 向翻译表请求短语
- mariadb - 两个联合语句部分中的内部选择的别名
- android - 未包含在语言环境中时不使用默认字符串资源