在 3D 数据上使用标准计算器



我试图使用scikit-learn标准缩放器扩展具有多个特征和时间序列数据的数据集。目前,我正在为每个功能创建一个单独的缩放器:

scale_feat1 = StandardScaler().fit(data[:,:,0])
scale_feat2 = StandardScaler().fit(data[:,:,1])
..

有没有办法使用一个缩放器单独缩放所有要素?另外,保存所有特征的缩放器并将其应用于Valdidation数据集的最简单方法是什么?

编辑:标准计算器仅适用于2D阵列,因此必须将阵列展平以进行缩放。在 2D 中,标准计算器为每个特征创建单独的平均值和标准开发

假设您的数据是[num_instances, num_time_steps, num_features]形成的,我要做的是首先重塑数据,然后规范化数据。

import numpy as np
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
num_instances, num_time_steps, num_features = train_data.shape
train_data = np.reshape(train_data, shape=(-1, num_features))
train_data = scaler.fit_transform(train_data)

这将以每个特征为一列的格式重塑数据,并将分别规范化每个特征。之后,您可以在训练之前以相同的形状返回数据。

train_data = np.reshape(train_data, shape=(num_instances, num_time_steps, num_features))

在验证集上使用缩放器时,fit_transform 方法计算训练集上的meanstd,并将它们存储在对象中。然后,当您想要规范化验证集时,您可以执行以下操作:

num_instances, num_time_steps, num_features = val_data.shape
val_data = np.reshape(val_data, shape=(-1, num_features))
val_data = scaler.transform(val_data)

然后以训练所需的形状重塑数据。

val_data = np.reshape(val_data, shape=(num_instances, num_time_steps, num_features))

这应该可以为您解决问题。

更新:

根据@Medomatto评论,在后来的numpy版本中,重塑的正确方法是:

... = np.reshape(data, newshape=(...))

从你这样做的方式来看,似乎可以直接做到

scale_feat = StandardScaler().fit(data[:,:,:])

以将缩放应用于所有要素。

如果您希望将缩放应用于前 5 个功能,您可以

scale_feat = StandardScaler().fit(data[:,:,0:5])

相关内容

  • 没有找到相关文章

最新更新