在3D数据上使用Standardscaler

时间:2018-12-20 13:57:43

标签: python scikit-learn

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

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

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

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

2 个答案:

答案 0 :(得分:0)

从您的操作方式来看,似乎可以直接做到

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

将缩放比例应用于所有功能。

如果要将缩放比例应用于前5个功能,则可以进行

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

答案 1 :(得分:0)

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

这应该为您解决问题。