Leo*_*Leo 3 numpy machine-learning scikit-learn keras
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]))
Run Code Online (Sandbox Code Playgroud)
输出
(1883, 100, 68)
6.028588763956215
Run Code Online (Sandbox Code Playgroud)
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]))
Run Code Online (Sandbox Code Playgroud)
输出
(1883, 100, 68)
3.2232538993444533
-1.9056918449890343
Run Code Online (Sandbox Code Playgroud)
该值仍然不在 1 和 -1 之间。
我应该如何处理它?
根据评论中的建议,我提供了答案
您可以使用预处理方法缩放 3D 数组sklearn
。您只需重新转换为 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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3354 次 |
最近记录: |