LSTM do prognozowania szeregów czasowych
Przygotowywanie sekwencji, bezstanowe i stanowe LSTM, okno wsteczne, prognozowanie wielokrokowe.
LSTM do prognozowania szeregów czasowych to bezpłatna lekcja Learn AI with Python na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Learn AI with Python, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Learn AI with Python zawiera 4 lekcji w sumie.
Dlaczego LSTM w szeregach czasowych?
LSTM (Long Short-Term Memory) to rekurencyjna sieć neuronowa, która zapamiętuje wzorce w długich sekwencjach dzięki bramkowanym komórkom pamięci. Potrafi modelować nieliniowe zależności, których nie uwzględnia ARIMA, dzięki czemu przy wystarczającej ilości danych dobrze sprawdza się w przypadku złożonych szeregów.
Okna sekwencji
Sieci LSTM uczą się na podstawie okien: fragmentów wcześniejszych kroków o stałej długości, używanych do przewidywania następnej wartości. Przy oknie o długości 10 model widzi kroki 1–10, aby przewidzieć krok 11, następnie kroki 2–11, aby przewidzieć krok 12, i tak dalej.
Tworzenie okien w kodzie
Funkcja pomocnicza przekształca jednowymiarowy szereg w pary wejściowe i docelowe.
import numpy as np
def make_windows(series, window):
X, y = [], []
for i in range(len(series) - window):
X.append(series[i:i+window])
y.append(series[i+window])
return np.array(X), np.array(y)
X, y = make_windows(values, window=10)Skalowanie danych
Sieci neuronowe lepiej uczą się na przeskalowanych danych wejściowych. Proszę użyć MinMaxScaler, aby odwzorować wartości na zakres [0, 1], i pamiętać o późniejszym przywróceniu oryginalnej skali predykcji.
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaled = scaler.fit_transform(values.reshape(-1, 1))Zmiana kształtu danych dla LSTM
Warstwy LSTM biblioteki Keras oczekują danych wejściowych o kształcie (samples, timesteps, features). W przypadku szeregu jednowymiarowego liczba cech wynosi 1.
# X is (samples, timesteps); add a feature axis
X = X.reshape((X.shape[0], X.shape[1], 1))
print(X.shape) # (samples, timesteps, 1)Budowanie modelu
Prosta architektura obejmuje jedną warstwę LSTM(50), która przekazuje dane do warstwy wyjściowej Dense(1) przewidującej następną wartość.
from tensorflow.keras import Sequential
from tensorflow.keras.layers import LSTM, Dense
model = Sequential([
LSTM(50, input_shape=(X.shape[1], 1)),
Dense(1)
])Dlaczego Dense(1)
Prognozowanie o jeden krok naprzód jest zadaniem regresji z pojedynczym wynikiem liczbowym, dlatego warstwą końcową jest Dense(1) bez funkcji aktywacji. W przypadku prognoz wielokrokowych można użyć Dense(n_steps).
Kompilowanie
Proszę użyć optymalizatora adam i funkcji straty mse (błąd średniokwadratowy), czyli standardowego wyboru w regresji dla ciągłych wartości docelowych.
model.compile(optimizer="adam", loss="mse")Trenowanie
Proszę wytrenować model na danych podzielonych na okna. Podział walidacyjny monitoruje zdolność generalizacji w kolejnych epokach.
history = model.fit(
X, y,
epochs=50,
batch_size=32,
validation_split=0.2
)Przewidywanie
Proszę wykonywać predykcje dla nowych okien, a następnie przywrócić oryginalną skalę wyników.
pred_scaled = model.predict(X_test)
pred = scaler.inverse_transform(pred_scaled)Łączenie warstw i strojenie
W przypadku trudniejszych szeregów można układać warstwy LSTM jedna na drugiej (ustawiając return_sequences=True we wszystkich warstwach oprócz ostatniej) i dodać dropout. Większa liczba warstw pozwala uchwycić głębsze wzorce, ale wymaga większej ilości danych i zwiększa ryzyko przeuczenia.
model = Sequential([
LSTM(50, return_sequences=True, input_shape=(X.shape[1], 1)),
LSTM(50),
Dense(1)
])Szybki test
Sprawdź swoją wiedzę na temat prognozowania za pomocą LSTM.
Podsumowanie
Przygotowano okna, przeskalowano dane za pomocą MinMaxScaler, zmieniono ich kształt na (samples, timesteps, features), zbudowano model LSTM(50) + Dense(1), skompilowano go z użyciem adam/mse, wytrenowano i wykonano predykcje, przywracając na końcu oryginalną skalę. Na tym kończy się kurs Szeregi czasowe. Następny kurs: Systemy rekomendacyjne.
Często zadawane pytania
Czy lekcja „LSTM do prognozowania szeregów czasowych” jest bezpłatna?
Tak — pełny tekst „LSTM do prognozowania szeregów czasowych” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Learn AI with Python, przejdź na CoddyKit PRO. Kurs Learn AI with Python zawiera 4 lekcji w sumie.
Co nauczysz się w „LSTM do prognozowania szeregów czasowych”?
Przygotowywanie sekwencji, bezstanowe i stanowe LSTM, okno wsteczne, prognozowanie wielokrokowe. Ćwiczysz Learn AI with Python z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Learn AI with Python?
Nie wymagamy żadnego doświadczenia. Learn AI with Python w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „LSTM do prognozowania szeregów czasowych”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Learn AI with Python?
Tak. Każda lekcja Learn AI with Python zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Składowe szeregów czasowych i stacjonarność
- Modele ARIMA i SARIMA
- Prophet do automatycznego prognozowania
- LSTM do prognozowania szeregów czasowych