La estimación adecuada de la incertidumbre predictiva es fundamental en las aplicaciones que involucran decisiones críticas. La incertidumbre puede usarse para evaluar la fiabilidad de las predicciones del modelo, desencadenar la intervención humana o decidir si un modelo puede implementarse de manera segura en la naturaleza.
Fortuna es una biblioteca para la cuantificación de la incertidumbre que facilita a los usuarios ejecutar puntos de referencia y provocar incertidumbre en los sistemas de producción. Fortuna proporciona métodos de calibración y conformes que comienzan a partir de modelos previamente capacitados escritos en cualquier marco, y admite además varios métodos de inferencia bayesianos a partir de modelos de aprendizaje profundo escritos en lino. El lenguaje está diseñado para ser intuitivo para los profesionales que no están familiarizados con la cuantificación de la incertidumbre, y es altamente configurable.
Consulte la documentación para obtener un inicio rápido, ejemplos y referencias.
Fortuna ofrece tres modos de uso diferentes: a partir de estimaciones de incertidumbre, de salidas de modelos y de modelos de lino. Estos sirven a los usuarios de acuerdo con las limitaciones dictadas por sus propias aplicaciones. Sus tuberías se representan en la siguiente figura, cada una a partir de uno de los paneles verdes.

A partir de las estimaciones de incertidumbre, tiene requisitos de compatibilidad mínimos y es el nivel de interacción más rápido con la biblioteca. Este modo de uso ofrece métodos de predicción conformes para la clasificación y la regresión. Estos toman estimaciones de incertidumbre en la entrada y devuelven conjuntos rigurosos de predicciones que retienen un nivel de probabilidad otorgado por el usuario. En tareas de regresión unidimensional, los conjuntos conformes pueden considerarse como versiones calibradas de confianza o intervalos creíbles.
Tenga en cuenta que si la incertidumbre estima que proporciona en las entradas son inexactos, los conjuntos conformes pueden ser grandes e inutilizables. Por esta razón, si su aplicación lo permite, considere las salidas del modelo y los modos de uso de modelos de lino.
Ejemplo. Suponga que desea calibrar intervalos creíbles con error de error de cobertura, cada uno correspondiente a una variable de entrada de prueba diferente. Suponemos que los intervalos creíbles se pasan como matrices de límites inferiores y superiores, respectivamente test_lower_bounds y test_upper_bounds . También tiene límites inferiores y superiores de intervalos creíbles calculados para varias entradas de validación, respectivamente val_lower_bounds y val_upper_bounds . La matriz correspondiente de objetivos de validación se denota por val_targets . El siguiente código produce intervalos de predicción conformes , es decir, versiones calibradas de usted probar intervalos creíbles.
from fortuna . conformal import QuantileConformalRegressor
conformal_intervals = QuantileConformalRegressor (). conformal_interval (
val_lower_bounds = val_lower_bounds , val_upper_bounds = val_upper_bounds ,
test_lower_bounds = test_lower_bounds , test_upper_bounds = test_upper_bounds ,
val_targets = val_targets , error = error ) A partir de las salidas del modelo, supone que ya ha capacitado a un modelo en algún marco y llega a Fortuna con salidas de modelo en formato numpy.ndarray para cada punto de datos de entrada. Este modo de uso le permite calibrar las salidas de su modelo, estimar la incertidumbre, calcular las métricas y obtener conjuntos conformes.
En comparación con el modo de uso de las estimaciones de incertidumbre, este ofrece un mejor control, ya que puede asegurar que las estimaciones de incertidumbre se hayan calibrado adecuadamente. Sin embargo, si el modelo hubiera sido entrenado con métodos clásicos, la cuantificación resultante de la incertidumbre del modelo (también conocido como epistémico) puede ser pobre. Para mitigar este problema, considere el modo de uso de modelos de lino desde el lino.
Ejemplo. Suponga que tiene salidas de validación y modelo de prueba, respectivamente, val_outputs y test_outputs . Además, tiene algunas matrices de variables de validación y objetivo, respectivamente val_targets y test_targets . El siguiente código proporciona un ejemplo de clasificación mínimo para obtener estimaciones de entropía predictiva calibrada.
from fortuna . output_calib_model import OutputCalibClassifier
calib_model = OutputCalibClassifier ()
status = calib_model . calibrate ( outputs = val_outputs , targets = val_targets )
test_entropies = calib_model . predictive . entropy ( outputs = test_outputs )A partir de los modelos de lino tiene requisitos de compatibilidad más altos que las estimaciones de incertidumbre y desde los modos de uso de salidas de modelos, ya que requiere modelos de aprendizaje profundo escritos en lino. Sin embargo, le permite reemplazar el entrenamiento de modelos estándar con procedimientos de inferencia bayesiana escalables, lo que puede mejorar significativamente la cuantificación de la incertidumbre predictiva.
Ejemplo. Suponga que tiene un model de modelo de aprendizaje profundo de clasificación de lino desde las entradas hasta los logits, con la dimensión de salida dada por output_dim . Además, tiene algo de capacitación, validación y calibración TensorFlow Data Loader train_data_loader , val_data_loader y test_data_loader , respectivamente. El siguiente código proporciona un ejemplo de clasificación mínimo para obtener estimaciones de probabilidad calibradas.
from fortuna . data import DataLoader
train_data_loader = DataLoader . from_tensorflow_data_loader ( train_data_loader )
calib_data_loader = DataLoader . from_tensorflow_data_loader ( val_data_loader )
test_data_loader = DataLoader . from_tensorflow_data_loader ( test_data_loader )
from fortuna . prob_model import ProbClassifier
prob_model = ProbClassifier ( model = model )
status = prob_model . train ( train_data_loader = train_data_loader , calib_data_loader = calib_data_loader )
test_means = prob_model . predictive . mean ( inputs_loader = test_data_loader . to_inputs_loader ())Nota: Antes de instalar Fortuna, debe instalar Jax en su entorno virtual.
Puede instalar fortuna escribiendo
PIP Instale AWS-Fortuna
Alternativamente, puede construir el paquete con poesía. Si elige seguir de esta manera, primero instale poesía y agréguela a su ruta (ver aquí). Entonces escribe
instalación de poesía
Todas las dependencias se instalarán en sus versiones requeridas. Considere agregar los siguientes indicadores al comando anterior:
-E transformers si desea usar modelos y conjuntos de datos de abrazos.-E sagemaker Si desea instalar las dependencias necesarias para ejecutar Fortuna en Amazon Sagemaker.-E docs si desea instalar dependencias de Sphinx para crear la documentación.-E notebooks si desea trabajar con cuadernos Jupyter. Finalmente, puede acceder a VirtualEnv que la poesía creada al escribir poetry shell o ejecutar comandos dentro del VirtualEnv usando el comando run , por ejemplo, poetry run python .
Se encuentran varios ejemplos de uso en el directorio /ejemplos.
Ofrecemos una tubería simple que le permite ejecutar Fortuna en Amazon Sagemaker con un esfuerzo mínimo.
config_dir , esa es la ruta absoluta al directorio de configuración principal, y config_filename , ese es el nombre del archivo de configuración principal (sin extensión .yaml), ingrese a Python y ejecute lo siguiente: from fortuna . sagemaker import run_training_job
run_training_job ( config_dir = config_dir , config_filename = config_filename )Para citar fortuna:
@article {Detommaso2023ffortuna,
title = {fortuna: una biblioteca para la cuantificación de la incertidumbre en el aprendizaje profundo},
Autor = {Detommaso, Gianluca y Gasparin, Alberto y Donini, Michele y Seeger, Matthias y Wilson, Andrew Gordon y Archambeau, Cedric},
Journal = {arxiv preprint arxiv: 2302.04019},
año = {2023}
}
Si desea contribuir al proyecto, consulte nuestras pautas de contribución.
Este proyecto tiene licencia bajo la licencia Apache-2.0. Vea la licencia para más información.