如何规范化 3D 数组的特定维度
Posted
技术标签:
【中文标题】如何规范化 3D 数组的特定维度【英文标题】:How to normalize a specific dimension of a 3D array 【发布时间】:2021-01-28 10:10:10 【问题描述】:sklearn.preprocessing.normalize
仅支持二维数组归一化。
但是,我目前有一个用于 LSTM 模型训练(批量、步骤、特征)的 3D 数组,我希望对特征进行归一化。
我试过tf.keras.utils.normalize(X_train, axis=-1, order=2 )
但是不正确。
另一种方法是将3D数组折叠成2D数组
print(X_train.shape)
print(max(X_train[0][0]))
输出
(1883, 100, 68)
6.028588763956215
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train.reshape(X_train.shape[0], -1)).reshape(X_train.shape)
X_test = scaler.transform(X_test.reshape(X_test.shape[0], -1)).reshape(X_test.shape)
print(X_train.shape)
print(max(X_train[0][0]))
print(min(X_train[0][0]))
输出
(1883, 100, 68)
3.2232538993444533
-1.9056918449890343
该值仍然不在 1 和 -1 之间。
我应该如何处理它?
【问题讨论】:
@MarcoCerliani 我建议您将其发布为专门使用MinMaxScaler
的答案,以便 OP 随后可以接受并解决问题(它不是 exact 重复) .
【参考方案1】:
按照 cmets 的建议,我提供了答案
您可以使用 sklearn
预处理方法缩放 3D 数组。您只需重新执行 2D 数据以适应它们,然后返回 3D。这可以通过几行代码轻松完成。
如果您希望缩放数据在 (-1,1) 范围内,您可以简单地使用 MinMaxScaler
指定 feature_range=(-1,1)
X_train = np.random.uniform(-20,100, (1883, 100, 68))
X_test = np.random.uniform(-20,100, (100, 100, 68))
print(X_train.shape)
print(X_train.min().round(5), X_train.max().round(5)) # -20, 100
scaler = MinMaxScaler(feature_range=(-1,1))
X_train = scaler.fit_transform(X_train.reshape(X_train.shape[0], -1)).reshape(X_train.shape)
X_test = scaler.transform(X_test.reshape(X_test.shape[0], -1)).reshape(X_test.shape)
print(X_train.shape)
print(X_train.min().round(5), X_train.max().round(5)) # -1, 1
【讨论】:
以上是关于如何规范化 3D 数组的特定维度的主要内容,如果未能解决你的问题,请参考以下文章