Обучение, отслеживание, анализ, интерпретация и обслуживание моделей с помощью одной строки кода
Автоматизация обучения модели, отслеживания, анализа, интерпретации и создания служебных файлов с помощью всего одной строки кода для каждой.
Для специалиста по данным чрезвычайно важно быстрое экспериментирование. Если идея не работает, лучше быстро потерпеть неудачу и выяснить это раньше, чем позже.
Когда дело доходит до моделирования, быстрое экспериментирование уже довольно просто. Все реализации модели следуют одному и тому же интерфейсу API, поэтому все, что вам нужно сделать, это инициализировать модель и обучить ее. Проблема возникает сейчас, когда вам нужно интерпретировать, отслеживать и сравнивать каждую модель.
Вы делаете большой блокнот со всеми своими моделями и прокручиваете его вверх и вниз или используете оглавление, чтобы увидеть результаты различных моделей? Вы создаете отдельный блокнот для каждой модели, а затем переключаетесь между блокнотами? Как вы отслеживаете итерации моделей, если начинаете настраивать параметры? Где вы храните артефакты, чтобы вернуться к ним позже или для дальнейшего анализа?
Я собираюсь продемонстрировать способ решения этих проблем путем обучения нескольких моделей, каждая с одной строкой кода, простого просмотра общих результатов, анализа моделей, интерпретации моделей, отслеживания моделей в MLFlow и обслуживания их с помощью Aethos.
Подготовка данных
Мы будем использовать Aethos, чтобы быстро подготовить данные. Для получения дополнительной информации о том, как анализировать и преобразовывать ваши наборы данных с помощью Aethos, ознакомьтесь с моим предыдущим сообщением в блоге здесь. Загрузите данные тренировки Титаника из репозитория Aethos.
import aethos as at import pandas as pd data = pd.read_csv('https://raw.githubusercontent.com/Ashton-Sidhu/aethos/develop/examples/data/train.csv')
Передайте данные в Aethos.
df = at.Data(data, target_field='Survived')
Основное внимание в этой статье уделяется моделированию, поэтому давайте быстро обработаем данные. Мы собираемся использовать функции Survived, Pclass, Sex, Age, Fare и Embarked. вставить сюда
df.drop(keep=['Survived', 'Pclass', 'Sex', 'Age', 'Fare', 'Embarked']) df.standardize_column_names()
Замените отсутствующие значения в столбцах «Возраст» и «Вступил».
df.replace_missing_median('age') df.replace_missing_mostcommon('embarked')
Нормализуйте значения в столбцах Age и Fare и One Hot Encode для функций Sex, Pclass и Embarked.
df.onehot_encode('sex', 'pclass', 'embarked', keep_col=False) df.normalize_numeric('fare', 'age')
С Aethos трансформатор подходит для обучающего набора и применяется к испытательному набору. Всего с помощью одной строчки кода ваше обучение и набор тестов были преобразованы.
Моделирование
Чтобы обучить модели Sklearn, XGBoost, LightGBM и т. Д. С помощью Aethos, сначала перейдите от объекта обработки данных к объекту Model.
model = at.Model(df)
Объект модели ведет себя так же, как объект Data, поэтому, если у вас есть данные, которые уже были обработаны, вы можете инициировать объект Model так же, как объект Data.
Затем мы собираемся включить отслеживание экспериментов с помощью MLFlow.
at.options.track_experiments = True
Теперь, когда все настроено, обучение модели и получение прогнозов очень просты:
lr = model.LogisticRegression(C=0.1)
Чтобы обучить модель с оптимальными параметрами с помощью Gridsearch, укажите параметр gridsearch
при инициализации модели.
lr = model.LogisticRegression(gridsearch={'C': [0.01, 0.1]}, tol=0.001)
Это вернет модель с оптимальными параметрами, определенными вашим методом оценки Gridsearch.
Наконец, если вы хотите провести перекрестную проверку своих моделей, есть несколько вариантов:
lr = model.LogisticRegression(cv=5, C=0.001)
Это выполнит 5-кратную перекрестную проверку вашей модели и отобразит средний балл, а также кривую обучения, чтобы помочь измерить качество данных, избыточное и недопустимое соответствие.
Вы также можете использовать его с Gridsearch:
lr = model.LogisticRegression(cv=5, gridsearch={'C': [0.01, 0.1]}, tol=0.001)
Сначала будет использоваться Gridsearch для обучения модели с оптимальными параметрами, а затем для ее перекрестной проверки. В настоящее время поддерживаются следующие методы перекрестной проверки: k-кратный и стратифицированный k-кратный.
Чтобы обучить несколько моделей одновременно (последовательно или параллельно), укажите параметр run
при определении вашей модели.
lr = model.LogisticRegression(cv=5, gridsearch={'C': [0.01, 0.1]}, tol=0.001, run=False)
Давайте поставим в очередь еще несколько моделей для обучения:
model.DecisionTreeClassification(run=False) model.RandomForestClassification(run=False) model.LightGBMClassification(run=False)
Вы можете просмотреть модели в очереди и обученные модели, выполнив следующие действия:
model.list_models()
Чтобы теперь запускать все модели в очереди, по умолчанию параллельно:
dt, rf, lgbm = model.run_models()
Теперь вы можете пойти выпить кофе или перекусить, пока все ваши модели тренируются одновременно!
Анализ моделей
У каждой модели, которую вы тренируете, по умолчанию есть имя. Это позволяет вам обучать несколько версий одной и той же модели с одним и тем же объектом модели и API, сохраняя при этом доступ к результатам каждой отдельной модели. Вы можете увидеть название каждой модели по умолчанию в заголовке функции, нажав Shift + Tab
в Jupyter Notebook.
Вы также можете изменить имя модели, указав имя по вашему выбору при инициализации функции.
Во-первых, давайте сравним все модели, которые мы обучили друг другу:
model.compare_models()
Вы можете увидеть эффективность каждой модели по множеству показателей. В проекте по науке о данных есть предопределенные метрики, с которыми вы хотите сравнивать модели (если вы этого не сделаете, вам следует). Вы можете указать эти метрики проекта с помощью опций.
at.options.project_metrics = ['Accuracy', 'Balanced Accuracy', 'Zero One Loss']
Теперь при сравнении моделей вы увидите только метрики проекта.
model.compare_models()
Вы также можете просмотреть показатели только для одной модели, выполнив следующее:
dt.metrics() # Shows metrics for the Decision Tree model rf.metrics() # Shows metrics for the Random Forest model lgbm.metrics() # Shows metrics for the LightGBM model
Вы можете использовать один и тот же API, чтобы увидеть кривую RoC каждой модели, матрицу путаницы, индекс неверно классифицированных прогнозов и т. Д.
dt.confusion_matrix(output_file='confusion_matrix.png') # Confusion matrix for the Decision Tree model
rf.confusion_matrix(output_file='confusion_matrix.png') # Confusion matrix for the random forest model
Интерпретация моделей
Aethos оснащен автоматизированными сценариями использования SHAP для интерпретации каждой модели. Вы можете просмотреть график силы, решения, сводки и зависимости для любой модели - каждая с настраиваемыми параметрами в соответствии с вашим вариантом использования.
Указав параметр output_file
, Aethos знает, что нужно сохранять и отслеживать этот артефакт для конкретной модели.
lgbm.decision_plot(output_file='decision_plot.png')
lgbm.force_plot(output_file='force_plot.png')
lgbm.shap_get_misclassified_index() # [2, 10, 21, 38, 43, 57, 62, 69, 70, 85, 89, 91, 96, 98, 108, 117, 128, 129, 139, 141, 146, 156, 165, 167, 169] lgbm.force_plot(2, output_file='force_plot_2.png')
lgbm.summary_plot(output_file='summary_plot.png')
lgbm.dependence_plot('fare', output_file='dep_plot.png')
Для более автоматизированной работы запустите:
lgbm.interpret_model()
При этом отображается интерактивная панель инструментов, на которой вы можете интерпретировать прогноз вашей модели с помощью LIME, SHAP, чувствительности Морриса и т. Д.
Просмотр моделей в MLFlow
Когда мы тренировали модели и просматривали результаты, наши эксперименты отслеживались автоматически. Если вы запустите aethos mlflow-ui
из командной строки, будет запущен локальный экземпляр MLFlow для просмотра результатов и артефактов ваших экспериментов. Перейдите к localhost: 10000.
Каждая из ваших моделей и любые сохраненные артефакты отслеживаются и могут быть просмотрены из пользовательского интерфейса, включая параметры и метрики! Чтобы просмотреть и загрузить артефакты модели, включая файл рассола для конкретной модели, щелкните гиперссылку в столбце даты.
Вы получите подробную разбивку метрик для модели, а также параметров модели, а внизу вы увидите все сохраненные артефакты для конкретной модели.
Примечание. Кривые обучения с перекрестной проверкой и графики среднего балла всегда сохраняются как артефакты.
Чтобы изменить имя эксперимента (по умолчанию это мой эксперимент), укажите имя при запуске объекта Модель (exp_name
), в противном случае каждая модель будет добавлена в мой эксперимент.
Обслуживающие модели
После того, как вы выбрали модель, которую хотите использовать для прогнозов, вы можете легко сгенерировать необходимые файлы для обслуживания модели с помощью RESTful API, используя FastAPI и Gunicorn.
dt.to_service('titanic')
Если вы знакомы с MLFlow, вы всегда можете использовать его для обслуживания своих моделей. Откройте терминал, в котором хранятся файлы развертывания. Я рекомендую переместить эти файлы в репозиторий git, чтобы управлять версиями как модели, так и обслуживаемых файлов.
Следуйте инструкциям, чтобы создать контейнер докера, а затем запустите его отдельно.
docker build -t titanic:1.0.0 ./ docker run -d --name titanic -p 1234:80 titanic:1.0.0
Теперь перейдите к localhost: 1234 / docs, чтобы протестировать свой API. Теперь вы можете выполнять прогнозы, отправляя запросы POST на адрес 127.0.0.1:1234/predict.
Теперь одно важное замечание: это конфигурация по умолчанию, и ее не следует использовать в производственной среде без ее защиты и настройки сервера для производственного использования. В будущем я сам добавлю эти конфигурации, чтобы вы могли более или менее «бросить» модель прямо в производство с минимальными изменениями конфигурации.
Эта функция все еще находится в зачаточном состоянии, и я буду активно ее развивать и улучшать.
Что еще ты можешь сделать?
Хотя этот пост представляет собой частично исчерпывающее руководство по моделированию с помощью Aethos, вы также можете запускать статистические тесты, такие как T-Test, Anovas, использовать предварительно обученные модели, такие как BERT и XLNet, для анализа настроений и ответов на вопросы, выполнять извлекающее суммирование с помощью TextRank, обучать модель Gensim LDA, а также модели кластеризации, обнаружения аномалий и регрессии.
Полный пример можно увидеть здесь!
Обратная связь
Я приветствую все отзывы об этом посте или об Aethos. Вы можете написать мне в twitter или написать на [email protected].
При возникновении любых ошибок или запросов функций, пожалуйста, создайте проблему в репозитории Github. Я приветствую все пожелания по функциям и любые предложения. Этот проект - отличное начало, если вы хотите внести свой вклад в проект с открытым исходным кодом - вы всегда можете написать мне, если вам понадобится помощь для начала работы.