Чтобы повысить производительность модели, я комбинировал: < /p>
- 10 Значения задержки в пути (т.е., T-1 до T-1) с использованием метода Spling Window < /p>
< /li>
- Принимайте вращательное окно 10 прошлых значений. /> Извлекать 9 функций на основе TDA из этого окна (они не изменяются в определенном окне и генерируются один раз в окне). < /p>
< /li>
сохраняют одни и те же значения, что и черты лага. /> - Use this to predict the next travel time (t+1).
- samples = number of windows
- timeSteps = 1
- функции = 19 (9 TDA + 10 лагеря)
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