Чтобы повысить производительность модели, я объединил: < /p>
10 Забатых значений времени прохождения (то есть, T-1 до T-10) с использованием Splliding Window Method < /p>
9 топологические функции, извлеченные из того же 10-VALE, использующего e.com, с использованием капли. Числа, энтропия, нормы L1 /L2) < /p>
На каждом временном шаге I: < /p>
- Взять окно с 10 прошлых значениями. < /p>
< /li>
Извлечение 9 основанных на TDA особенности из этого окна (они не изменяются в конкретном окне. Window). - сохранить те же 10 значений, что и функции лага. />
samples = number of windows
timesteps = 1
features = 19 (9 TDA + 10 lags)
мой вопрос < /strong>:
является ли этот подход действительным для прогнозирования временных рядов на основе LSTM? Альтернативные/лучшие архитектуры при смешивании статических + последовательных функций?def extract_all_features(series, win=10, dim=3, delay=1):
data = []
for i in range(len(series) - win - 10):
segment = series[i:i+win]
cloud = time_delay_embedding(segment, delay, dim)
rips = gd.RipsComplex(points=cloud).create_simplex_tree(max_dimension=2)
rips.persistence()
h0 = rips.persistence_intervals_in_dimension(0)
h1 = rips.persistence_intervals_in_dimension(1)
h0_vals = replace_inf(h0)
h1_vals = replace_inf(h1)
row = [
len(h0_vals), np.mean(h0_vals) if h0_vals else 0,
persistent_entropy([(0, p) for p in h0_vals]),
l_norm([(0, p) for p in h0_vals], p=1),
l_norm([(0, p) for p in h0_vals], p=2),
len(h1_vals), np.mean(h1_vals) if h1_vals else 0,
l_norm([(0, p) for p in h1_vals], p=1),
l_norm([(0, p) for p in h1_vals], p=2)
]
lags = [series[i + win - j] for j in range(1, 11)]
data.append(row + lags + [series[i + win]])
return np.array(data)
# Reshape for LSTM
X = features[:, :-1]
y = features[:, -1]
X_scaled = MinMaxScaler().fit_transform(X)
y_scaled = MinMaxScaler().fit_transform(y.reshape(-1, 1))
X_train = X_scaled[train_mask]
X_val = X_scaled[val_mask]
X_train = X_train.reshape((X_train.shape[0], 1, X_train.shape[1]))
X_val = X_val.reshape((X_val.shape[0], 1, X_val.shape[1]))
# LSTM model
model = Sequential([
LSTM(64, return_sequences=True, input_shape=(1, X_train.shape[2])),
Dropout(0.2),
LSTM(32),
Dropout(0.2),
Dense(1)
])
model.compile(optimizer='adam', loss='mse')
model.fit(X_train, y_train, validation_data=(X_val, y_val),
epochs=100, batch_size=16, callbacks=[EarlyStopping(patience=10)])```
Подробнее здесь: https://stackoverflow.com/questions/796 ... to-predict