es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Intervalo de confianza gaussiano: Python

Estoy escribiendo un script que utiliza GPR para analizar y predecir las propiedades de combustión de diferentes combustibles. Obtengo buenos resultados para mi conjunto de pruebas y ahora quiero agregar un intervalo de confianza del 95%. Cuando intento implementar el intervalo, obtengo resultados terribles. Por favor, envía ayuda.


Predicciones Gaussianas para el Retardo de Ignición

14 de septiembre de 2021

%matplotlib inline
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
import seaborn as sns

from sklearn.metrics import mean_absolute_error as mae
from sklearn.model_selection import train_test_split
from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import RBF, ConstantKernel as C

gpr = GaussianProcessRegressor()

kernel = C(1.0, (1e-3, 1e3))*RBF(10, (1e-2, 1e2))
gpr = GaussianProcessRegressor(kernel=kernel, n_restarts_optimizer=9, alpha=0.1, normalize_y=True)
gpr.fit(x_train, y_train)
y_prediction, std = gpr.predict(x_test, return_std=True)

confidence = std*1.96/np.sqrt(len(x_test))
confidence = confidence.reshape(-1,1)

Plot the function, the prediction and the 95% confidence interval based on the MSE

plt.figure()

plt.plot(x_train, y_train, “b.”, markersize=10, label=”Observaciones”)
plt.fill(x_test,
y_prediction-confidence,
y_prediction+confidence,
alpha=0.3,
fc=”b”,
ec=”None”,
label=”Intervalo de confianza del 95%”,
) #esto dibuja el intervalo de confianza y lo ajusta a mis datos

plt.plot(x_test, y_prediction, “r.”, markersize=10, label=”Predicción”)

Tags:  ,

Answer

  1. Avatar for davy.ai

    Basado en el código y el gráfico proporcionados, parece que el intervalo de confianza no se está calculando correctamente. En particular, la línea de código que calcula el intervalo de confianza usando std*1.96/np.sqrt(len(x_test)) puede no ser apropiada para los datos.

    Un posible problema es que el valor std que se utiliza para calcular el intervalo de confianza es la desviación estándar de los residuos, en lugar de la desviación estándar de los valores pronosticados. Para solucionar esto, el argumento return_std en la función predict() debe establecerse en True para obtener la desviación estándar de los valores pronosticados, como se muestra en el fragmento de código.

    y_prediction, std = gpr.predict(x_test, return_std=True)
    

    Otro problema puede ser el cálculo de los límites superior e inferior del intervalo de confianza, que se realiza sumando y restando confidence de y_prediction. Esto puede no ser correcto, ya que la desviación estándar refleja la incertidumbre en la predicción, pero no tiene en cuenta la incertidumbre en el propio modelo. Un enfoque más adecuado sería utilizar los cuantiles de la distribución predictiva para definir los límites del intervalo de confianza. Por ejemplo, se pueden utilizar el percentil 2.5 y el percentil 97.5 de la distribución predictiva para definir un intervalo de confianza del 95%, como se muestra a continuación:

    lower_bound, upper_bound = gpr.predict(x_test, return_std=True, return_quantiles=(2.5, 97.5))
    confidence = (upper_bound - lower_bound) / 2
    

    Esto calculará el percentil 2.5 y el percentil 97.5 de la distribución predictiva y los utilizará como límites del intervalo de confianza. En este caso, la variable confidence será la mitad del ancho del intervalo de confianza, en lugar del error estándar.

    En general, el código revisado para trazar el intervalo de confianza se vería así:

    # Realizar predicciones y calcular el intervalo de confianza
    y_prediction, std = gpr.predict(x_test, return_std=True)
    lower_bound, upper_bound = gpr.predict(x_test, return_std=True, return_quantiles=(2.5, 97.5))
    confidence = (upper_bound - lower_bound) / 2
    
    # Graficar la función, la predicción y el intervalo de confianza del 95% basado en los cuantiles
    plt.figure()
    plt.plot(x_train, y_train, "b.", markersize=10, label="Observaciones")
    plt.fill_between(x_test.squeeze(), lower_bound.squeeze(), upper_bound.squeeze(),
             alpha=0.3,
             fc="b",
             ec="None",
             label="Intervalo de confianza del 95%",
    )         
    plt.plot(x_test, y_prediction, "r.", markersize=10, label="Predicción")
    

    Aplicar estos cambios debería mejorar la precisión de la gráfica del intervalo de confianza para la predicción de las propiedades de consumo de combustible.

Comments are closed.