Gráfico de GPR Co2

Machine LearningMachine LearningBeginner
Practicar Ahora

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

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

Esta práctica es un tutorial paso a paso sobre cómo realizar la regresión mediante procesos gaussianos (GPR) en los datos de CO2 de Mauna Loa utilizando el paquete scikit-learn. Los datos consisten en las concentraciones mensuales medias de CO2 atmosférico recogidas en el Observatorio de Mauna Loa en Hawaii entre 1958 y 2001. El objetivo es modelar la concentración de CO2 en función del tiempo y extrapolarla para los años posteriores a 2001.

Consejos sobre la VM

Una vez finalizada la arranque de la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje sus comentarios después de la sesión y lo resolveremos rápidamente para usted.


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{{"Gráfico de GPR Co2"}} sklearn/datasets -.-> lab-49144{{"Gráfico de GPR Co2"}} ml/sklearn -.-> lab-49144{{"Gráfico de GPR Co2"}} end

Construir el conjunto de datos

El primer paso es construir el conjunto de datos a partir de los datos de muestra de aire recolectados en el Observatorio de Mauna Loa. Estamos interesados en estimar la concentración de CO2 y extrapolarla para años futuros. Cargamos el conjunto de datos original disponible en OpenML y preprocesamos el conjunto de datos calculando la media mensual y eliminando los meses para los que no se recogieron mediciones.

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()

Diseñar el kernel adecuado

Para diseñar el kernel que se utilizará con nuestro proceso gaussiano, podemos hacer algunos supuestos sobre los datos que tenemos a mano. Observamos que tienen varias características: vemos una tendencia ascendente a largo plazo, una variación estacional pronunciada y algunas irregularidades menores. Podemos utilizar diferentes kernels adecuados que capturen estas características.

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
)

Ajuste y extrapolación del modelo

Ahora, estamos listos para utilizar un regresor de procesos gaussianos y ajustar los datos disponibles. Para seguir el ejemplo de la literatura, restaremos la media del objetivo. Creamos datos sintéticos desde 1958 hasta el mes actual y utilizamos el proceso gaussiano para predecir en los datos de entrenamiento para inspeccionar la bondad del ajuste y en los datos futuros para ver la extrapolación realizada por el modelo.

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()

Interpretación de los hiperparámetros del kernel

Ahora, podemos echar un vistazo a los hiperparámetros del kernel.

gaussian_process.kernel_

Por lo tanto, la mayor parte de la señal objetivo, con la media restada, está explicada por una tendencia ascendente a largo plazo de ~45 ppm y una escala de longitud de ~52 años. El componente periódico tiene una amplitud de ~2,6 ppm, un tiempo de decaimiento de ~90 años y una escala de longitud de ~1,5. El largo tiempo de decaimiento indica que tenemos un componente muy cercano a una periodicidad estacional. El ruido correlacionado tiene una amplitud de ~0,2 ppm con una escala de longitud de ~0,12 años y una contribución de ruido blanco de ~0,04 ppm. Por lo tanto, el nivel general de ruido es muy pequeño, lo que indica que los datos pueden ser muy bien explicados por el modelo.

Resumen

Esta práctica demostró cómo realizar la regresión de procesos gaussianos (GPR) en los datos de CO2 de Mauna Loa utilizando el paquete scikit-learn. Los datos consisten en las concentraciones mensuales promedio de CO2 atmosférico recolectadas en el Observatorio de Mauna Loa en Hawái entre 1958 y 2001. El objetivo es modelar la concentración de CO2 como una función del tiempo y extrapolarla para los años posteriores a 2001. Construimos el conjunto de datos, diseñamos el kernel adecuado, ajustamos el modelo y realizamos la extrapolación. Finalmente, interpretamos los hiperparámetros del kernel.