Библиотеки Data Science, которые заслуживают вашего внимания
Библиотеки Data Science, которые заслуживают гораздо большего внимания
В то время как большие ребята, Pandas, Scikit-learn, NumPy, Matplotlib, TensorFlow и т.д., занимают всё ваше внимание, легко пропустить некоторые простые и в то же время невероятные библиотеки.
Возможно, они не рок-звёзды GitHub и не обучаются по дорогим специализациям Coursera, но тысячи разработчиков вкладывают свою кровь и пот в их написание. Они незаметно заполняют пробелы, оставленные популярными библиотеками из тени.
Цель этой статьи – пролить свет на некоторые из этих библиотек и вместе удивиться тому, насколько мощным может быть сообщество разработчиков с открытым исходным кодом.
Давайте начнем!
0. Manim
Мы все поражены и ошеломлены тем, насколько прекрасны видеоролики 3Blue1Brown. Но большинство из нас не знает, что все анимации создаются с использованием библиотеки Mathematical Animation Engine (Manim), написанной самим Грантом Сандерсоном. (Мы воспринимаем Гранта Сандерсона как нечто само собой разумеющееся.)
Каждое видео 3b1b основано на тысячах строк кода, написанных на Manim. В качестве примера можно привести легендарную серию “Сущность исчисления”, в которой Грант Сандерсон использовал более 22 тысяч строк кода.
В Manim каждая анимация представлена классом scene, подобным следующему (не волнуйтесь, если вы этого не понимаете):
import numpy as np
from manim import *
class FunctionExample(Scene):
def construct(self):
axes = Axes(...)
axes_labels=axes.get_axis_labels()
# Get the graph of a simple functions
graph = axes.get_graph(lambda x: np.sin(1/x), color=RED)
# Set up its label
graph_label = axes.get_graph_label(
graph, x_val=1, direction=2 * UP + RIGHT,
label=r'f(x) = \sin(\frac{1}{x})', color=DARK_BLUE
)
# Graph the axes components together
axes_group = VGroup(axes, axes_labels)
# Animate
self.play(Create(axes_group), run_time=2)
self.wait(0.25)
self.play(Create(graph), run_time=3)
self.play(Write(graph_label), run_time=2)
Что производит следующую анимацию функции sin(1/x):
К сожалению, Manim плохо поддерживается и не документируется, поскольку Грант Сандерсон, по понятным причинам, тратит большую часть своих усилий на создание потрясающих видео.
Но существует ответвление библиотеки от сообщества Manim Community, которое обеспечивает лучшую поддержку, документацию и учебные ресурсы.
Статистика и ссылки:
- GitHub: 3b1b Manim (50.6k ⭐)
- GitHub: Manim community version (13.8k ⭐)
- Загрузок Manim за последний месяц: 14k
Из-за крутой кривой обучения и сложной установки Manim получает очень мало загрузок каждый месяц. Она заслуживает гораздо большего внимания.
1. PyTorch Lightning
Когда я начал изучать PyTorch после TensorFlow, я стал очень сварливым. Было очевидно, что PyTorch мощный, но я не мог не сказать: «TensorFlow делает это лучше», или «Это было бы намного короче в TF», или, что ещё хуже, «Я почти хотел бы никогда не изучать PyTorch».
Это потому, что PyTorch — низкоуровневая библиотека. Да, это означает, что PyTorch даёт вам полный контроль над процессом обучения модели, но для этого требуется много стандартного кода. Это как TensorFlow, но на пять лет моложе, если я не ошибаюсь.
Оказывается, таких людей очень много. В частности, почти 830 участников Lightning AI разработали PyTorch Lightning.
PyTorch Lightning — это высокоуровневая библиотека-оболочка, построенная на основе PyTorch, которая абстрагирует большую часть шаблонного кода и устраняет все его болевые точки:
- Аппаратно-независимые модели
- Код легко читается, поскольку инженерный код обрабатывается модулями Lightning.
- Гибкость сохранена (все модули Lightning по-прежнему являются модулями PyTorch)
- Поддержка нескольких GPU, нескольких узлов, TPU
- 16-битная точность
- Отслеживание экспериментов
- Ранняя остановка и контрольная точка модели (наконец-то!)
и другие, около 40 расширенных функций, предназначенных для того, чтобы порадовать исследователей ИИ, а не привести их в бешенство.
Статистика и ссылки:
2. Optuna
Да, настройка гиперпараметров с помощью GridSearch проста, удобна и выполняется всего одним оператором импорта. Но согласитесь, что он медленнее похмельной улитки и очень неэффективен.
На мгновение представьте себе настройку гиперпараметров как покупку продуктов. Использование GridSearch означает обход каждого прохода в супермаркете и проверку каждого продукта. Это систематический и упорядоченный подход, но вы тратите так много времени…
С другой стороны, если у вас есть умный личный помощник по покупкам с байесовскими корнями, вы будете точно знать, что вам нужно и куда идти. Это более эффективный и целенаправленный подход.
Если вам нужен этот помощник, его зовут Optuna. Это байесовская структура оптимизации гиперпараметров для эффективного поиска заданного пространства гиперпараметров и поиска золотого набора гиперпараметров, которые обеспечивают наилучшую производительность модели.
Вот некоторые из его главных особенностей:
- Фреймворк-агностик: настраивает модели любой модели машинного обучения, о которой вы только можете подумать.
- Pythonic API для определения областей поиска: вместо того, чтобы вручную перечислять возможные значения гиперпараметра, Optuna позволяет выбирать их линейно, случайным образом или логарифмически из заданного диапазона.
- Визуализация: поддерживает графики важности гиперпараметров (параллельные координаты), графики истории и графики срезов.
- Управляйте количеством или продолжительностью итераций: задайте точное количество итераций или максимальную продолжительность процесса настройки.
- Приостановление и возобновление поиска
- Сокращение: прекращайте бесперспективные испытания до их начала
Статистика и ссылки:
3. PyCaret
Я очень уважаю Моэза Али за то, что он самостоятельно создал эту библиотеку с нуля. В настоящее время PyCaret является лучшей библиотекой машинного обучения с низкоуровневым кодом.
Если бы PyCaret рекламировали по телевидению, вот что было бы в рекламе:
«Вы устали часами писать практически один и тот же код в своих рабочих процессах машинного обучения? Тогда PyCaret — это решение данной проблемы!
Наша универсальная библиотека машинного обучения поможет вам создавать и развёртывать модели машинного обучения, используя как можно меньше строк кода. Думайте об этом как о коктейле, содержащем код из всех ваших любимых библиотек машинного обучения, таких как Scikit-learn, XGBoost, CatBoost, LightGBM, Optuna и многих других».
Затем реклама будет показывать этот фрагмент кода с драматическим хлопком для отображения каждой строки:
# Classification OOP API Example
# loading sample dataset
from pycaret.datasets import get_data
data = get_data('juice')
# init setup
from pycaret.classification import ClassificationExperiment
s = ClassificationExperiment()
s.setup(data, target = 'Purchase', session_id = 123)
# model training and selection
best = s.compare_models()
# evaluate trained model
s.evaluate_model(best)
# predict on hold-out/test set
pred_holdout = s.predict_model(best)
# predict on new data
new_data = data.copy().drop('Purchase', axis = 1)
predictions = s.predict_model(best, data = new_data)
# save model
s.save_model(best, 'best_pipeline')
Рассказчик сказал бы закадровым голосом, когда отображается код:
«С помощью нескольких строк кода вы можете обучить и выбрать лучшую из десятков моделей из разных фреймворков, оценить их на отложенном наборе и сохранить для развёртывания. Она настолько проста в использовании, что любой может это сделать!
Поспешите получить копию нашего программного обеспечения с GitHub через PIP и поблагодарите нас позже!»
Статистика и ссылки:
4. BentoML
Веб-разработчики любят FastAPI, как домашних животных. Это один из самых популярных проектов GitHub, который, по общему признанию, делает разработку API невероятно простой и интуитивно понятной.
Из-за этой популярности он также нашёл своё применение в машинном обучении. Часто можно увидеть, как инженеры развёртывают свои модели как API с помощью FastAPI, думая, что процесс не может быть проще.
Итак, какой инструмент лучше всего подходит для работы? Я так рад, что вы спросили — BentoML!
BentoML, хотя и относительно молодая библиотека, представляет собой сквозную структуру для упаковки и доставки моделей любой библиотеки машинного обучения на любую облачную платформу.
FastAPI был разработан для веб-разработчиков, поэтому у него было много очевидных недостатков в развёртывании моделей машинного обучения. BentoML решает их все:
- Стандартный API для сохранения/загрузки моделей
- Хранение модели в версии и отслеживание модели
- Докеризация моделей одной строкой кода терминала
- Обслуживание моделей на графических процессорах
- Развёртывание моделей в виде API с помощью одного короткого скрипта и нескольких терминальных команд для любого облачного провайдера
Статистика и ссылки:
5. PyOD
Эта библиотека является аутсайдером, потому что проблема, которую она решает, обнаружение выбросов, также является аутсайдером.
Практически любой курс машинного обучения, который вы посещаете, учит только z-оценкам для обнаружения выбросов и переходит к более причудливым концепциям и инструментам, таким как R (сарказм).
Но обнаружение выбросов — это гораздо больше, чем простые z-значения. Существуют модифицированные z-оценки, Isolation Forests (крутое название), KNN для аномалий, Local Outlier Factor и более 30 других современных алгоритмов обнаружения аномалий, упакованных в набор инструментов Python Outlier Detection (PyOD).
Если их не обнаружить и не обработать должным образом, выбросы будут искажать среднее значение и стандартное отклонение признаков и создавать шум в обучающих данных — сценарии, которые вам совсем не нужны.
Жизненная цель PyOD — предоставлять инструменты для облегчения поиска аномалий. Помимо широкого спектра алгоритмов, он полностью совместим со Scikit-learn, что упрощает его использование в существующих конвейерах машинного обучения.
Статистика и ссылки:
6. Sktime
Машины времени больше не являются предметом научной фантастики. Это реальность в форме Sktime.
Вместо того, чтобы прыгать между временными периодами, Sktime выполняет чуть менее интересную задачу анализа временных рядов.
Она заимствует лучшие инструменты своего старшего брата Scikit-learn для выполнения следующих задач временных рядов:
- Классификация
- Регрессия
- Кластеризация (это весело!)
- Аннотация
- Прогнозирование
Она содержит более 30 современных алгоритмов со знакомым синтаксисом Scikit-learn, а также предлагает конвейерную обработку, сборку и настройку моделей как для одномерных, так и для многомерных данных временных рядов. Она также очень хорошо поддерживается — участники Sktime работают как пчёлы.
Статистика и ссылки:
Заключение
Хотя в наших повседневных рабочих процессах преобладают популярные инструменты, такие как Scikit-learn, TensorFlow или PyTorch, важно не упускать из виду менее известные библиотеки.
У них может не быть такого же уровня признания или поддержки, но в умелых руках они предлагают элегантные решения проблем, с которыми не справляются их популярные аналоги.
Эта статья посвящена только шести из них, но вы можете быть уверены, что существуют сотни других!