A estimativa adequada da incerteza preditiva é fundamental em aplicações que envolvem decisões críticas. A incerteza pode ser usada para avaliar a confiabilidade das previsões do modelo, desencadear intervenção humana ou decidir se um modelo pode ser implantado com segurança na natureza.
Fortuna é uma biblioteca para quantificação da incerteza que facilita a execução dos usuários e trazem incerteza para os sistemas de produção. Fortuna fornece métodos de calibração e conformidade a partir de modelos pré-treinados escritos em qualquer estrutura e suporta ainda vários métodos de inferência bayesiana a partir de modelos de aprendizado profundo escritos em linho. O idioma foi projetado para ser intuitivo para os profissionais não familiarizados com a quantificação da incerteza e é altamente configurável.
Verifique a documentação para um início rápido, exemplos e referências.
Fortuna oferece três modos de uso diferentes: a partir de estimativas de incerteza, de saídas do modelo e de modelos de linho. Eles servem aos usuários de acordo com as restrições ditadas por seus próprios aplicativos. Seus oleodutos são retratados na figura a seguir, cada um a partir de um dos painéis verdes.

A partir das estimativas de incerteza, possui requisitos mínimos de compatibilidade e é o nível mais rápido de interação com a biblioteca. Este modo de uso oferece métodos de previsão conforme para classificação e regressão. Estes fazem estimativas de incerteza na entrada e retornam conjuntos rigorosos de previsões que mantêm um nível de probabilidade dado pelo usuário. Nas tarefas de regressão unidimensional, conjuntos conformais podem ser considerados versões calibradas de confiança ou intervalos credíveis.
Lembre -se de que, se as estimativas da incerteza que você fornece em insumos forem imprecisas, conjuntos conformais podem ser grandes e inutilizáveis. Por esse motivo, se o seu aplicativo permitir, considere as saídas do modelo e dos modos de uso de modelos de linho.
Exemplo. Suponha que você queira calibrar intervalos credíveis com error de cobertura, cada um correspondente a uma variável de entrada de teste diferente. Assumimos que os intervalos credíveis são passados como matrizes de limites inferiores e superiores, respectivamente, test_lower_bounds e test_upper_bounds . Você também possui limites inferiores e superiores de intervalos credíveis calculados para várias entradas de validação, respectivamente, val_lower_bounds e val_upper_bounds . A matriz correspondente das metas de validação é indicada pelo val_targets . O código a seguir produz intervalos de previsão conforme , ou seja, versões calibradas de você testam intervalos credíveis.
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 das saídas do modelo, assume que você já treinou um modelo em alguma estrutura e chega a Fortuna com saídas de modelo no formato numpy.ndarray para cada ponto de dados de entrada. Esse modo de uso permite calibrar as saídas do seu modelo, estimar a incerteza, calcular métricas e obter conjuntos conformes.
Comparado ao modo de uso de estimativas de incerteza, este oferece melhor controle, pois pode garantir que as estimativas de incerteza tenham sido calibradas adequadamente. No entanto, se o modelo tivesse sido treinado com métodos clássicos, a quantificação resultante do modelo (também conhecida como epistêmica) pode ser ruim. Para mitigar esse problema, considere o modo de uso de modelos de linho.
Exemplo. Suponha que você tenha saídas de validação e modelo de teste, respectivamente, val_outputs e test_outputs . Além disso, você tem algumas matrizes de validação e variáveis de destino, respectivamente, val_targets e test_targets . O código a seguir fornece um exemplo mínimo de classificação para obter estimativas de entropia preditiva 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 dos modelos de linho, possui requisitos de compatibilidade mais altos do que as estimativas de incerteza e dos modos de uso de saídas de modelo, pois requer modelos de aprendizado profundo escritos em linho. No entanto, ele permite substituir o treinamento de modelos padrão por procedimentos escaláveis de inferência bayesiana, o que pode melhorar significativamente a quantificação da incerteza preditiva.
Exemplo. Suponha que você tenha um model de aprendizado profundo de classificação de linho, de entradas a logits, com dimensão de saída fornecida pelo output_dim . Além disso, você tem algum treinamento de treinamento, validação e calibração Tensorflow Data Freler train_data_loader , val_data_loader e test_data_loader , respectivamente. O código a seguir fornece um exemplo mínimo de classificação para obter estimativas de probabilidade 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 o Fortuna, você deve instalar o JAX em seu ambiente virtual.
Você pode instalar Fortuna digitando
PIP Instale aws-fortuna
Como alternativa, você pode construir o pacote usando poesia. Se você optar por seguir dessa maneira, primeiro instale a poesia e adicione -a ao seu caminho (veja aqui). Então digite
Instalação de poesia
Todas as dependências serão instaladas nas versões necessárias. Considere adicionar os seguintes sinalizadores ao comando acima:
-E transformers Se você deseja usar modelos e conjuntos de dados de abraçar o rosto.-E sagemaker se você deseja instalar as dependências necessárias para executar o Fortuna no Amazon Sagemaker.-E docs se você deseja instalar dependências de Esfinge para criar a documentação.-E notebooks se você quiser trabalhar com notebooks Jupyter. Finalmente, você pode acessar o VirtualEnv que a poesia criada digitando poetry shell ou executa comandos dentro do VirtualEnv usando o comando run , por exemplo, poetry run python .
Vários exemplos de uso são encontrados no diretório /exemplos.
Oferecemos um pipeline simples que permite que você execute Fortuna no Amazon Sagemaker com um esforço mínimo.
config_dir , esse é o caminho absoluto para o diretório de configuração principal, e config_filename , esse é o nome do arquivo de configuração principal (sem .yaml Extension), digite o Python e execute o seguinte: from fortuna . sagemaker import run_training_job
run_training_job ( config_dir = config_dir , config_filename = config_filename )Para citar Fortuna:
@Article {Detommaso2023fortuna,
title = {Fortuna: uma biblioteca para quantificação de incerteza em aprendizado profundo},
Autor = {DeTommaso, Gianluca e Gasparin, Alberto e Donini, Michele e Seeger, Matthias e Wilson, Andrew Gordon e Archambeau, Cedric},
Journal = {arxiv pré -impressão arxiv: 2302.04019},
ano = {2023}
}
Se você deseja contribuir para o projeto, consulte nossas diretrizes de contribuição.
Este projeto está licenciado sob a licença Apache-2.0. Consulte a licença para obter mais informações.