Правильная оценка прогнозной неопределенности является фундаментальной в приложениях, которые включают критические решения. Неопределенность может быть использована для оценки надежности модельных прогнозов, запуска вмешательства человека или определения того, может ли модель быть безопасно развернута в дикой природе.
Fortuna - это библиотека для количественной оценки неопределенности, которая позволяет пользователям легко запускать тесты и приносить неопределенность производственных систем. Fortuna предоставляет калибровки и конформные методы, начиная с предварительно обученных моделей, написанных в любой структуре, и также поддерживает несколько методов байесовского вывода, начиная с моделей глубокого обучения, написанных в льняном. Язык предназначен для того, чтобы быть интуитивно понятным для практикующих, незнакомых с количественным определением неопределенности и очень настраивается.
Проверьте документацию на предмет QuickStart, примеров и ссылок.
Fortuna предлагает три различных режима использования: по оценкам неопределенности, из выходов моделей и моделей льна. Они обслуживают пользователей в соответствии с ограничениями, продиктованными их собственными приложениями. Их трубопроводы изображены на следующем рисунке, каждый из которых начинается с одной из зеленых панелей.

Начиная с оценки неопределенности имеет минимальные требования к совместимости, и это самый быстрый уровень взаимодействия с библиотекой. Этот режим использования предлагает конформные методы прогнозирования как для классификации, так и для регрессии. Они принимают оценки неопределенности при вводе и возвращают строгие наборы прогнозов, которые сохраняют пользовательский уровень вероятности. В задачах одномерной регрессии конформные наборы могут рассматриваться как калиброванные версии доверия или достоверных интервалов.
Имейте в виду, что если неопределенность оценивает, что вы предоставляете в данных, являются неточными, конформные наборы могут быть большими и непригодными. По этой причине, если ваше приложение позволяет это, пожалуйста, рассмотрим выходы из модели и из режимов использования моделей льна.
Пример. Предположим, вы хотите калибровать достоверные интервалы с error покрытия, каждый из которых соответствует различной тестовой входной переменной. Мы предполагаем, что достоверные интервалы передаются в виде массивов нижних и верхних границ, соответственно, test_lower_bounds и test_upper_bounds . У вас также есть нижние и верхние границы достоверных интервалов, рассчитанных для нескольких входов валидации, соответственно val_lower_bounds и val_upper_bounds . Соответствующий массив целей проверки обозначается val_targets . Следующий код дает конформные интервалы прогнозирования , т.е. калибровали версии вас тестируют заслуживающие доверия интервалы.
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 ) Начиная с выходов моделей предполагает, что вы уже обучили модель в некоторых структурах и прибыли в Fortuna с выходами модели в формате numpy.ndarray для каждой точки входных данных. Этот режим использования позволяет вам калибровать выходы модели, оценить неопределенность, вычислять метрики и получить конформные наборы.
По сравнению с режимом использования от неопределенности, этот предлагает лучший контроль, поскольку он может убедиться, что оценки неопределенности были соответствующим образом откалиброваны. Однако, если модель была обучена классическим методам, полученная количественная оценка неопределенности модели (ака эпистемическая) может быть плохой. Чтобы смягчить эту проблему, пожалуйста, рассмотрите режим использования моделей From Elax.
Пример. Предположим, что у вас есть выходы проверки и тестовой модели, соответственно, val_outputs и test_outputs . Кроме того, у вас есть несколько массивов валидации и целевых переменных, соответственно, val_targets и test_targets . В следующем коде приведен минимальный пример классификации для получения калиброванных предсказательных оценок энтропии.
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 )Начиная с моделей льна имеет более высокие требования к совместимости, чем оценки неопределенности и из модельных режимов использования, так как это требует глубокого обучения моделей, написанных в льна. Тем не менее, это позволяет вам заменить стандартную модельную обучение на масштабируемые байесовские процедуры вывода, что может значительно улучшить количественную оценку прогнозирующей неопределенности.
Пример. Предположим, что у вас есть model модели глубокого обучения классификации льна от входных до входов к логитам, с выходным измерением, данным output_dim . Кроме того, у вас есть некоторое обучение, проверка и калибровка данных TensorFlow Data train_data_loader , val_data_loader и test_data_loader , соответственно. В следующем коде приведен минимальный пример классификации для получения калиброванных оценок вероятности.
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 ())Примечание. Перед установкой Fortuna вам необходимо установить JAX в свою виртуальную среду.
Вы можете установить Fortuna, набрав
PIP установить AWS-Фортуна
В качестве альтернативы, вы можете построить упаковку, используя поэзию. Если вы решите продолжить этот путь, сначала установите поэзию и добавьте ее в свой путь (см. Здесь). Затем тип
Поэзия установка
Все зависимости будут установлены в их необходимых версиях. Подумайте о добавлении следующих флагов в команду выше:
-E transformers если вы хотите использовать модели и наборы данных от обнимающего лица.-E sagemaker Если вы хотите установить зависимости, необходимые для запуска Fortuna на Amazon SageMaker.-E docs если вы хотите установить зависимости Sphinx для создания документации.-E notebooks если вы хотите поработать с ноутбуками Jupyter. Наконец, вы можете либо получить доступ к виртуальному делу, созданному поэзией, созданной путем ввода poetry shell , либо выполнить команды в VirtualEnv, используя команду run , например, poetry run python .
Несколько примеров использования можно найти в каталоге /примеров.
Мы предлагаем простой трубопровод, который позволяет вам запустить Fortuna на Amazon Sagemaker с минимальными усилиями.
config_dir , то есть абсолютный путь к основному каталогу конфигурации, и config_filename , то есть имя основного файла конфигурации (без расширения .yaml), введите Python и запустите следующее: from fortuna . sagemaker import run_training_job
run_training_job ( config_dir = config_dir , config_filename = config_filename )Наслаться Fortuna:
@Article {detOmmaso2023 кчатка,
title = {fortuna: библиотека для количественной оценки неопределенности в глубоком обучении},
Author = {Detommaso, Gianluca и Gasparin, Alberto и Donini, Michele и Seeger, Matthias и Wilson, Andrew Gordon и Archambeau, Cedric},
Journal = {arxiv preprint arxiv: 2302.04019},
Год = {2023}
}
Если вы хотите внести свой вклад в проект, пожалуйста, обратитесь к нашим руководящим принципам взноса.
Этот проект лицензирован по лицензии Apache-2.0. Смотрите лицензию для получения дополнительной информации.