Я использую Керас, поэтому форма данных (batch_size, timesteps, input_dim). А Стандартный скалер просто соответствует 2D-данным.
Одно из решений, которое я подумал, заключалось в использовании частичной подгонки с последующим преобразованием.
scaler = StandardScaler()
for sample in range(data.shape[0]):
scaler.partial_fit(data[sample])
for sample in range(data.shape[0]):
data[sample] = scaler.transform(data[sample])
Это правильный / эффективный подход?
У вас есть две возможности
data = np.random.randn(batch_size*time_length*nb_feats).reshape((bsize,time,feats))
Версия 1 делает то, что вы говорите:
scaler = StandardScaler()
for sample in range(data.shape[0]):
scaler.partial_fit(data[sample])
for sample in range(data.shape[0]):
data[sample] = scaler.transform(data[sample])
Другая возможность (версия 2) - сгладить массив, подогнать и преобразовать, а затем изменить его форму.
scaler = StandardScaler()
data = scaler.fit_transform(data.reshape((bsize*time,feats))).reshape((bsize,time,feats))
В моем компьютере
Версия 1 занимает 0,8759770393371582 секунды
Версия 2 занимает 0,11733722686767578 секунд
да, вы можете использовать partial_fit, если данные слишком велики. Однако вам не нужно перебирать образцы один за другим. На это уходит слишком много времени. Может быть, вы сможете сделать частичную подгонку партий
Следует ли выбирать версию 1, когда объем данных слишком велик?