flo*_*ida 2 python scikit-learn
我尝试使用 scikit-learn 标准缩放器缩放具有多个特征和时间序列数据的数据集。目前我正在为每个功能创建一个单独的缩放器:
scale_feat1 = StandardScaler().fit(data[:,:,0])
scale_feat2 = StandardScaler().fit(data[:,:,1])
..
Run Code Online (Sandbox Code Playgroud)
有没有办法使用一个缩放器分别缩放所有功能?另外,为所有特征保存缩放器并将其应用于验证数据集的最简单方法是什么?
编辑: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)
Run Code Online (Sandbox Code Playgroud)
这将以每个特征为一列的格式重塑数据,并将分别标准化每个特征。之后,您可以在训练前以相同的形状返回数据。
train_data = np.reshape(train_data, shape=(num_instances, num_time_steps, num_features))
Run Code Online (Sandbox Code Playgroud)
当它使用的验证集的缩放谈到,该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)
Run Code Online (Sandbox Code Playgroud)
然后将数据重塑为训练所需的形状。
val_data = np.reshape(val_data, shape=(num_instances, num_time_steps, num_features))
Run Code Online (Sandbox Code Playgroud)
这应该对你有用。
更新:
根据@Medomatto 的评论,在以后的numpy版本中,正确的重塑方法是:
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2879 次 |
| 最近记录: |