GPR Co2 plotten

Machine LearningMachine LearningBeginner
Jetzt üben

This tutorial is from open-source community. Access the source code

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Dieses Labor ist ein Schritt-für-Schritt-Tutorial zur Durchführung der Gaussian Process Regression (GPR) auf Mauna Loa CO2-Daten mithilfe des scikit-learn-Pakets. Die Daten bestehen aus monatlichen Durchschnittskonzentrationen von atmosphärischem CO2, die zwischen 1958 und 2001 am Mauna Loa Observatorium in Hawaii gesammelt wurden. Ziel ist es, die CO2-Konzentration als Funktion der Zeit zu modellieren und sie für die Jahre nach 2001 zu extrapolieren.

Tipps für die VM

Nachdem der VM-Start abgeschlossen ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu nutzen.

Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund von Einschränkungen in Jupyter Notebook nicht automatisiert werden.

Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/gaussian_process("Gaussian Processes") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/gaussian_process -.-> lab-49144{{"GPR Co2 plotten"}} sklearn/datasets -.-> lab-49144{{"GPR Co2 plotten"}} ml/sklearn -.-> lab-49144{{"GPR Co2 plotten"}} end

Das Dataset erstellen

Der erste Schritt besteht darin, das Dataset zu erstellen, indem es aus dem Mauna Loa Observatorium abgeleitet wird, das Luftproben gesammelt hat. Wir interessieren uns für die Schätzung der CO2-Konzentration und deren Extrapolation für weitere Jahre. Wir laden das ursprüngliche Dataset aus OpenML und verarbeiten das Dataset, indem wir einen monatlichen Mittelwert berechnen und Monate, für die keine Messungen durchgeführt wurden, ausschließen.

from sklearn.datasets import fetch_openml
import pandas as pd

co2 = fetch_openml(data_id=41187, as_frame=True, parser="pandas")
co2_data = co2.frame
co2_data["date"] = pd.to_datetime(co2_data[["year", "month", "day"]])
co2_data = co2_data[["date", "co2"]].set_index("date")
co2_data = co2_data.resample("M").mean().dropna(axis="index", how="any")

X = (co2_data.index.year + co2_data.index.month / 12).to_numpy().reshape(-1, 1)
y = co2_data["co2"].to_numpy()

Den passenden Kernel entwerfen

Um den Kernel zu entwerfen, der mit unserem Gaussian-Prozess verwendet werden soll, können wir einige Annahmen über die vorhandenen Daten machen. Wir stellen fest, dass sie mehrere Merkmale aufweisen: einen langfristigen Anstiegstrend, eine ausgeprägte saisonale Schwankung und einige kleinere Unregelmäßigkeiten. Wir können verschiedene geeignete Kerne verwenden, die diese Merkmale erfassen.

from sklearn.gaussian_process.kernels import RBF, ExpSineSquared, RationalQuadratic, WhiteKernel

long_term_trend_kernel = 50.0**2 * RBF(length_scale=50.0)
seasonal_kernel = (
    2.0**2
    * RBF(length_scale=100.0)
    * ExpSineSquared(length_scale=1.0, periodicity=1.0, periodicity_bounds="fixed")
)
irregularities_kernel = 0.5**2 * RationalQuadratic(length_scale=1.0, alpha=1.0)
noise_kernel = 0.1**2 * RBF(length_scale=0.1) + WhiteKernel(
    noise_level=0.1**2, noise_level_bounds=(1e-5, 1e5)
)

co2_kernel = (
    long_term_trend_kernel + seasonal_kernel + irregularities_kernel + noise_kernel
)

Modellanpassung und Extrapolation

Jetzt sind wir bereit, einen Gaussian-Prozess-Regressor zu verwenden und die verfügbaren Daten anzupassen. Um das Beispiel aus der Literatur zu folgen, subtrahieren wir den Mittelwert von der Zielvariable. Wir erstellen synthetische Daten von 1958 bis zum aktuellen Monat und verwenden den Gaussian-Prozess, um auf den Trainingsdaten zu prognostizieren, um die Anpassungsgüte zu überprüfen, und auf zukünftige Daten, um die Extrapolation durch das Modell zu betrachten.

from sklearn.gaussian_process import GaussianProcessRegressor
import datetime
import numpy as np
import matplotlib.pyplot as plt

y_mean = y.mean()
gaussian_process = GaussianProcessRegressor(kernel=co2_kernel, normalize_y=False)
gaussian_process.fit(X, y - y_mean)

today = datetime.datetime.now()
current_month = today.year + today.month / 12
X_test = np.linspace(start=1958, stop=current_month, num=1_000).reshape(-1, 1)
mean_y_pred, std_y_pred = gaussian_process.predict(X_test, return_std=True)
mean_y_pred += y_mean

plt.plot(X, y, color="black", linestyle="dashed", label="Measurements")
plt.plot(X_test, mean_y_pred, color="tab:blue", alpha=0.4, label="Gaussian process")
plt.fill_between(
    X_test.ravel(),
    mean_y_pred - std_y_pred,
    mean_y_pred + std_y_pred,
    color="tab:blue",
    alpha=0.2,
)
plt.legend()
plt.xlabel("Year")
plt.ylabel("Monthly average of CO$_2$ concentration (ppm)")
plt.title(
    "Monthly average of air samples measurements\nfrom the Mauna Loa Observatory"
)
plt.show()

Interpretation der Kernel-Hyperparameter

Jetzt können wir uns die Hyperparameter des Kerns ansehen.

gaussian_process.kernel_

Somit wird der größte Teil des Zielsignals, mit dem Mittelwert subtrahiert, durch einen langfristigen Anstiegstrend von etwa 45 ppm und eine Längenskala von etwa 52 Jahren erklärt. Die periodische Komponente hat eine Amplitude von etwa 2,6 ppm, eine Abklingzeit von etwa 90 Jahren und eine Längenskala von etwa 1,5. Die lange Abklingzeit zeigt an, dass wir eine Komponente haben, die sehr nahe an einer saisonalen Periodizität ist. Der korrelierte Rauschen hat eine Amplitude von etwa 0,2 ppm mit einer Längenskala von etwa 0,12 Jahren und einen Weißrauschenbeitrag von etwa 0,04 ppm. Somit ist das gesamte Rauschlevel sehr klein, was darauf hindeutet, dass die Daten sehr gut durch das Modell erklärt werden können.

Zusammenfassung

In diesem Lab wurde gezeigt, wie man die Gaussian Process Regression (GPR) auf Mauna Loa CO2-Daten mit dem scikit-learn-Paket durchführt. Die Daten bestehen aus monatlichen Durchschnittskonzentrationen von atmosphärischer CO2, die zwischen 1958 und 2001 am Mauna Loa Observatorium in Hawaii gesammelt wurden. Ziel ist es, die CO2-Konzentration als Funktion der Zeit zu modellieren und sie für die Jahre nach 2001 zu extrapolieren. Wir haben das Dataset erstellt, den passenden Kernel entworfen, das Modell angepasst und die Extrapolation durchgeführt. Schließlich haben wir die Kernel-Hyperparameter interpretiert.