TimeSeriesSplit#

class sklearn.model_selection.TimeSeriesSplit(n_splits=5, *, max_train_size=None, test_size=None, gap=0)[source]#

Zeitreihen-Kreuzvalidierer.

Bietet Trainings-/Testindizes zum Aufteilen von zeitlich geordneten Daten, bei denen andere Kreuzvalidierungsmethoden ungeeignet sind, da sie zu einem Training mit zukünftigen Daten und einer Auswertung auf vergangenen Daten führen würden. Um vergleichbare Metriken über die Folds hinweg sicherzustellen, müssen die Samples gleichmäßig beabstandet sein. Sobald diese Bedingung erfüllt ist, deckt jeder Testsatz die gleiche Zeitdauer ab, während die Größe des Trainingssatzes Daten aus früheren Splits akkumuliert.

Dieses Kreuzvalidierungsobjekt ist eine Variante von KFold. Im k-ten Split gibt es die ersten k Folds als Trainingssatz und den (k+1)-ten Fold als Testsatz zurück.

Beachten Sie, dass im Gegensatz zu Standard-Kreuzvalidierungsmethoden aufeinanderfolgende Trainingssätze Obermengen derer sind, die ihnen vorausgehen.

Lesen Sie mehr im Benutzerhandbuch.

Zur Visualisierung des Kreuzvalidierungsverhaltens und zum Vergleich zwischen gängigen scikit-learn-Split-Methoden siehe Visualisierung des Kreuzvalidierungsverhaltens in scikit-learn

Hinzugefügt in Version 0.18.

Parameter:
n_splitsint, default=5

Anzahl der Splits. Muss mindestens 2 sein.

Geändert in Version 0.22: n_splits Standardwert von 3 auf 5 geändert.

max_train_sizeint, default=None

Maximale Größe für einen einzelnen Trainingssatz.

test_sizeint, default=None

Wird verwendet, um die Größe des Testsatzes zu begrenzen. Standardmäßig ist dies n_samples // (n_splits + 1), was der maximal zulässige Wert bei gap=0 ist.

Hinzugefügt in Version 0.24.

gapint, default=0

Anzahl der Samples, die vom Ende jedes Trainingssatzes vor dem Testsatz ausgeschlossen werden.

Hinzugefügt in Version 0.24.

Anmerkungen

Der Trainingssatz hat in der i-ten Aufteilung eine Größe von i * n_samples // (n_splits + 1) + n_samples % (n_splits + 1) mit einem Testsatz von standardmäßig n_samples//(n_splits + 1), wobei n_samples die Anzahl der Samples ist. Beachten Sie, dass diese Formel nur gültig ist, wenn test_size und max_train_size auf ihren Standardwerten belassen werden.

Beispiele

>>> import numpy as np
>>> from sklearn.model_selection import TimeSeriesSplit
>>> X = np.array([[1, 2], [3, 4], [1, 2], [3, 4], [1, 2], [3, 4]])
>>> y = np.array([1, 2, 3, 4, 5, 6])
>>> tscv = TimeSeriesSplit()
>>> print(tscv)
TimeSeriesSplit(gap=0, max_train_size=None, n_splits=5, test_size=None)
>>> for i, (train_index, test_index) in enumerate(tscv.split(X)):
...     print(f"Fold {i}:")
...     print(f"  Train: index={train_index}")
...     print(f"  Test:  index={test_index}")
Fold 0:
  Train: index=[0]
  Test:  index=[1]
Fold 1:
  Train: index=[0 1]
  Test:  index=[2]
Fold 2:
  Train: index=[0 1 2]
  Test:  index=[3]
Fold 3:
  Train: index=[0 1 2 3]
  Test:  index=[4]
Fold 4:
  Train: index=[0 1 2 3 4]
  Test:  index=[5]
>>> # Fix test_size to 2 with 12 samples
>>> X = np.random.randn(12, 2)
>>> y = np.random.randint(0, 2, 12)
>>> tscv = TimeSeriesSplit(n_splits=3, test_size=2)
>>> for i, (train_index, test_index) in enumerate(tscv.split(X)):
...     print(f"Fold {i}:")
...     print(f"  Train: index={train_index}")
...     print(f"  Test:  index={test_index}")
Fold 0:
  Train: index=[0 1 2 3 4 5]
  Test:  index=[6 7]
Fold 1:
  Train: index=[0 1 2 3 4 5 6 7]
  Test:  index=[8 9]
Fold 2:
  Train: index=[0 1 2 3 4 5 6 7 8 9]
  Test:  index=[10 11]
>>> # Add in a 2 period gap
>>> tscv = TimeSeriesSplit(n_splits=3, test_size=2, gap=2)
>>> for i, (train_index, test_index) in enumerate(tscv.split(X)):
...     print(f"Fold {i}:")
...     print(f"  Train: index={train_index}")
...     print(f"  Test:  index={test_index}")
Fold 0:
  Train: index=[0 1 2 3]
  Test:  index=[6 7]
Fold 1:
  Train: index=[0 1 2 3 4 5]
  Test:  index=[8 9]
Fold 2:
  Train: index=[0 1 2 3 4 5 6 7]
  Test:  index=[10 11]

Ein ausführlicheres Beispiel finden Sie unter Zeitbezogenes Feature Engineering.

get_metadata_routing()[source]#

Holt das Metadaten-Routing dieses Objekts.

Bitte prüfen Sie im Benutzerhandbuch, wie der Routing-Mechanismus funktioniert.

Gibt zurück:
routingMetadataRequest

Ein MetadataRequest, der Routing-Informationen kapselt.

get_n_splits(X=None, y=None, groups=None)[source]#

Gibt die Anzahl der Splitting-Iterationen zurück, die mit dem Parameter n_splits bei der Instanziierung des Kreuzvalidierers festgelegt wurden.

Parameter:
Xarray-like von Shape (n_samples, n_features), default=None

Immer ignoriert, existiert aus API-Kompatibilitätsgründen.

yarray-like mit Form (n_samples,), default=None

Immer ignoriert, existiert aus API-Kompatibilitätsgründen.

groupsarray-like of shape (n_samples,), default=None

Immer ignoriert, existiert aus API-Kompatibilitätsgründen.

Gibt zurück:
n_splitsint

Gibt die Anzahl der Teilungsschritte im Kreuzvalidierer zurück.

split(X, y=None, groups=None)[source]#

Generiert Indizes zum Aufteilen von Daten in Trainings- und Testsets.

Parameter:
Xarray-like der Form (n_samples, n_features)

Trainingsdaten, wobei n_samples die Anzahl der Stichproben und n_features die Anzahl der Merkmale ist.

yarray-like mit Form (n_samples,), default=None

Immer ignoriert, existiert aus API-Kompatibilitätsgründen.

groupsarray-like of shape (n_samples,), default=None

Immer ignoriert, existiert aus API-Kompatibilitätsgründen.

Gibt:
trainndarray

Die Trainingsset-Indizes für diese Teilung.

testndarray

Die Testset-Indizes für diese Teilung.