如何标准缩放 3D 矩阵?

新手上路,请多包涵

我正在研究信号分类问题,想先缩放数据集矩阵,但我的数据是 3D 格式(批次、长度、通道)。

我尝试使用 Scikit-learn Standard Scaler:

 from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

但我收到此错误消息:

找到带有暗淡 3 的数组。预期 StandardScaler <= 2

我认为一种解决方案是将矩阵拆分为多个 2D 矩阵中的每个通道,分别缩放它们,然后以 3D 格式放回原处,但我想知道是否有更好的解决方案。

非常感谢你。

原文由 JPM 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 495
2 个回答

您必须为每个通道安装并存储定标器

from sklearn.preprocessing import StandardScaler

scalers = {}
for i in range(X_train.shape[1]):
    scalers[i] = StandardScaler()
    X_train[:, i, :] = scalers[i].fit_transform(X_train[:, i, :])

for i in range(X_test.shape[1]):
    X_test[:, i, :] = scalers[i].transform(X_test[:, i, :])

原文由 Bert Kellerman 发布,翻译遵循 CC BY-SA 4.0 许可协议

只有 3 行代码…

 scaler = StandardScaler()
X_train = scaler.fit_transform(X_train.reshape(-1, X_train.shape[-1])).reshape(X_train.shape)
X_test = scaler.transform(X_test.reshape(-1, X_test.shape[-1])).reshape(X_test.shape)

原文由 Marco Cerliani 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题