我正在尝试使用scikit-learn standardscaler缩放具有多个功能和时间序列数据的数据集。目前,我正在为每个功能创建单独的缩放器:

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


有没有一种方法可以使用一个缩放器分别缩放所有功能?另外,为所有功能保存缩放器并将其应用于验证数据集的最简单方法是什么?

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

最佳答案

假设您的数据是[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))


这应该为您解决问题。

关于python - 在3D数据上使用Standardscaler,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53870113/

10-09 00:56
查看更多