我试图使用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
方法计算训练集上的mean
和std
,并将它们存储在对象中。然后,当您想要规范化验证集时,您可以执行以下操作:
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])