Проблема возникает, когда я хочу передать данные из разных групп в RNN - большинство примеров предполагают элегантные временные ряды, но при добавлении групп мы не можем просто переключаться между окнами данных, нам нужно переходить при изменении группы, чтобыданные поступают из группы.
Эти группы просто разные люди, поэтому я хотел сохранить их последовательности при себе.Например, пользователь просматривает веб-сайт, а мы собираем данные о просмотре страниц.Или это могут быть разные акции и связанные с ними ценовые движения.
import pandas as pd
data = {
'group_id': [1,1,1,1,2,2],
'timestep': [1,2,3,4,1,2],
'x': [6,5,4,3,2,1],
'y': [0,1,1,1,0,1]
}
df = pd.DataFrame(data=data)
group_id timestep x y
0 1 1 6 0
1 1 2 5 1
2 1 3 4 1
3 1 4 3 1
4 2 1 2 0
5 2 2 1 1
Предположим, мы хотели бы использовать размер партии в 2 выборки, и каждая из выборок будет иметь 3 временных шага.RNNSequence.__len__ = 3
(ниже) партий, но это невозможно, потому что мы можем максимально получить 2 образца из 1-й группы (что составляет 1 пакет).Вторая группа имеет только 2 временных шага, поэтому итерация невозможна.
from keras.utils import Sequence
class RNNSequence(Sequence):
def __init__(self, x_set, y_set, batch_size, seq_length):
self.x, self.y = x_set, y_set
self.batch_size = batch_size
self.seq_length = seq_length
def __len__(self):
return int(np.ceil(len(self.x) / float(self.batch_size)))
def __getitem__(self, idx):
# get_batch to be coded
return get_batch(idx, self.x, self.y, self.batch_size, self.seq_length)
Каков наиболее эффективный способ получения этих пакетов с использованием последовательности?
Мое решение состояло в том, чтобы фактически не использовать Последовательность и вместо этого использовать собственный генератор, который выплевывает данные, не зная, сколько пакетов будет заранее.и используйте fit_generator(custom_generator, max_queue_size=batch_size)
вместо этого.Это самый эффективный способ?Проблема здесь в том, что нет перестановки, и это может быть проблемой?
Желаемый вывод для batchsize = 2, seq_length = 3:
X = [
[ [6], [5], [4] ],
[ [5], [4], [3] ]
]
Y = [ 1, 1 ]