Для тестирования некоторых классификаторов я хочу сгенерировать синтетические данные временного ряда с 3 сигналами и одной меткой, которая должна зависеть от всех точек данных во всех трех из них, вот правила, которым я хочу следовать для моих сигналов:
- Три сигнала должны иметь некоторую корреляцию между ними
- Метка должна зависеть от всех точек всех трех сигналов
- Она не должна быть линейно разделимой, и онаДолжна быть трудная проблема для классификаторов.(В частности, я не хочу, чтобы простая двунаправленная модель LSTM достигала точности более 80%)
Я пробовал много способов, включая один из них, чтобы дать представление о том, кто япытаясь сделать:
Генерация базового синусового сигнала с течением времени со случайной частотой (в моем примере я использовал значения между 7 8 9 10 для частоты) и случайной фазой, проблема в том, чтобы найти эту частоту так, чтобы метка(y) зависит от частоты (если частота больше 8 y равна 1, иначе y равен 0), тогда я генерирую 3 случайных фильтра и свертываю этот базовый сигнал 3 раза для генерации моих 3 сигналов, добавляя шум на каждом шаге.
freq = np.random.choice([7, 8, 9, 10])
phase = np.random.rand() * 10
base = []
for i in range(data_size):
base.append(np.random.rand() + math.sin(phase + float(i/freq)))
for f in filters:
signal = np.convolve(base, f)
signal += np.random.rand(len(signal)) * 6
all_features.append(signal)
if freq > 8:
y = 0
else:
y = 1
Проблема с этими данными заключается в том, что простая модель BiLSTM достигает точности около 100%.Так что мой вопрос в том, есть ли способ добиться этого?Знаете ли вы какую-либо библиотеку, которую я могу использовать для генерации этого?
Если вы можете привести пример на любом языке программирования, который он будет делать, например, я нашел пакет simstudy в R, который, я думаю, можно использовать здесь,однако я не знаю, как этого добиться.
Спасибо за вашу помощь.