sklearn.preprocessing.normalize
仅支持2D数组标准化。但是,我目前有一个用于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之间。
我应该如何处理?
如评论中所建议,我提供了答案
您可以使用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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句