【发布时间】:2021-02-10 12:01:14
【问题描述】:
我正在对数据集进行规范化,但由于填充,数据包含很多 0。
我可以在模型训练期间屏蔽它们,但显然,当我应用归一化时,这些零会受到影响。
from sklearn.preprocessing import StandardScaler,MinMaxScaler
我目前正在使用 Sklearn 库进行规范化
例如,给定一个维度为 (4,3,5) 为 (batch, step, features) 的 3D 数组
零填充的数量因批次而异,因为这些是我从音频文件中提取的特征,具有不同的长度,使用固定的窗口大小。
[[[0 0 0 0 0],
[0 0 0 0 0],
[0 0 0 0 0]]
[[1 2 3 4 5],
[4 5 6 7 8],
[9 10 11 12 13]],
[[14 15 16 17 18],
[0 0 0 0 0],
[24 25 26 27 28]],
[[0 0 0 0 0],
[423 2 230 60 70],
[0 0 0 0 0]]
]
我希望按列进行归一化,所以
scaler = MinMaxScaler()
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)
但是,在这种情况下,零被视为有效值。例如,第一列的最小值应该是 1 而不是 0。
此外,在应用缩放器后,0 的值也会发生变化,但我希望将它们保持为 0,以便在训练期间屏蔽它们。 model.add(tf.keras.layers.Masking(mask_value=0.0, input_shape=(X_train.shape[1], X_train.shape[2])))
在标准化过程中是否有任何方法可以屏蔽它们,以便在此示例中仅使用第 2 步和第 3 步进行标准化?
此外,我的项目的数组的实际维度更大为 (2000,50,68) 在这 68 个特征中,这 68 个特征的值差异可能非常大。我试图通过将每个元素除以其行中最大的元素来对它们进行归一化,以避免来自 0 的影响,但这并不奏效。
【问题讨论】:
-
你试过什么方法吗?你应该在这里写你的试用代码。
-
我在网上找不到任何方法
-
向我们展示这些零值转换为您不想要的东西的确切代码序列。
-
请minimal reproducible example 提供输入数据和预期输出
-
您应该先尝试一下,然后再在这里提问。当然,如果你不能实现,你可以在这里问。你应该为流程编写数据样本,这就是 StackOverflow 的方式
标签: python machine-learning scikit-learn