Сегодня существует огромное количество библиотек для машинного и глубокого обучения, — пишет Сергей Бойко, Software Engineer в Railsware, в своей статье на DOU.UA. — Чтобы облегчить задачу выбора для новичков, мы рассмотрим только самые популярные и необходимые библиотеки, которые покрывают все базовые потребности для начала работы с ML и DL.
Язык программирования: Python или R?
Язык R создавался для решения задач статистики и очень популярен среди дата-аналитиков. Его основная проблема — он плохо подходит для решения задач, не связанных с анализом и визуализацией данных.
В свою очередь Python — язык общего назначения и может быть успешно применен для решения различных задач.
Именно поэтому в последние пару лет Python набрал огромную популярность и стал lingua franca в сообществе машинного обучения. Практически любая современная ML или DL библиотека предоставляет Python API.
Поэтому сейчас задача выбора сильно упростилась: используйте Python и не ошибетесь.
Сам язык очень простой и поэтому легок в изучении. Тем более, что для применения в машинном обучении не нужно знать все его тонкости.
Jupyter Notebook: работа с данными, кодом и графиками
Если в традиционном программировании большую часть времени вы проводите в текстовых редакторах или IDE-шках, то в Data Science большая часть кода пишется в Jupyter Notebook.
Это простой и мощный инструмент для анализа данных. Он позволяет писать код на Python, R и других языках, добавлять текстовые описания в Markdown, встраивать графики и диаграммы непосредственно в интерактивную веб-страницу.
Плюс ко всему, Google выпустил бесплатный сервис Google Colab, который предоставляет облачную версию Jupyter Notebook и дает возможность производить вычисления на CPU и GPU. Все нужные питоновские ML библиотеки уже установлены, так что можно начинать сразу там, если лень устанавливать все локально.
Scikit-learn: лучшая библиотека для классических ML алгоритмов
Scikit-learn — одна из самых популярных ML библиотек на сегодня. Она поддерживает большинство алгоритмов обучения, как с учителем, так и без: линейная и логистическая регрессия, метод опорных векторов (SVM), Naive Bayes классификатор, градиентный бустинг, кластеризация, KNN, k-средние и многие другие.
Кроме этого, Scikit-learn содержит множество полезных утилит для подготовки данных и анализа результатов. Эта библиотека в основном предназначена для классических алгоритмов машинного обучения, поэтому её функционал для нейронных сетей очень ограничен, а для задач глубокого обучения она не может быть использована вовсе.
В дополнение к очень качественной документации, Scikit-learn содержит раздел с туториалами, в котором показано, как работать с библиотекой, а также даются базовые знания по машинному обучению.
Pandas: извлечение и подготовка данных
Анализ и подготовка данных зачастую занимает большую часть времени при решении ML задач. Данные могут быть получены в CSV, JSON, Excel или другом структурированном (или не очень) формате, и вам нужно обработать их для того, чтобы использовать в ML моделях.
Для этих целей используется библиотека Pandas. Это мощный инструмент, который позволяет быстро анализировать, модифицировать и подготавливать данные для дальнейшего использования в других ML и DL библиотеках, таких как Scikit-learn, TensorFlow или PyTorch.
В Pandas можно загружать данные из различных источников: SQL баз, CSV, Excel, JSON файлов и других менее популярных форматов.
Когда данные загружены в память, с ними можно выполнять множество различных операций для анализа, трансформации, заполнения отсутствующих значений и очистки набора данных. Pandas позволяет выполнять множество SQL-подобных операций над наборами данных: объединение, группировка, агрегирование и т. п. Также она предоставляет встроенный набор популярных статистических функций для базового анализа.
Jupyter Notebook также поддерживает Pandas и реализует красивую визуализацию его структур данных.
Сайт Pandas содержит очень подробную документацию. Но начать можно с 10-минутного туториала, который показывает все основные фишки и возможности библиотеки.
Библиотека NumPy: многомерные массивы и линейная алгебра
Основной функционал NumPy заключается в поддержке многомерных массивов данных и быстрых алгоритмов линейной алгебры. Именно поэтому NumPy — ключевой компонент Scikit-learn, SciPy и Pandas.
Обычно NumPy используют как вспомогательную библиотеку для выполнения различных математических операций со структурами данных Pandas, поэтому стоит изучить её базовые возможности.
Для этого отлично подойдет вводный туториал по Numpy, а также основы NumPy.
Matplotlib и Seaborn: построение графиков и визуализация данных
Matplotlib — это стандартный инструмент в наборе дата-инженера. Он позволяет создавать разнообразные графики и диаграммы для визуализации полученных результатов.
Графики, созданные в Matplotlib, легко интегрируются в Jupyter Notebook. Это дает возможность визуализировать данные и результаты, полученные при обработке моделей.
Для этой библиотеки создано множество дополнительных пакетов. Один из наиболее популярных — это Seaborn. Его основная фишка — готовый набор самых часто используемых статистических диаграмм и графиков.
Традиционно, обе библиотеки имеют раздел с туториалами на их сайтах, но более эффективным подходом будет зарегистрироваться на сайте Kaggle и посмотреть в разделе «Kernels» готовые примеры использования, например, Comprehensive Data Exploration with Python.
Tensorflow и Keras: библиотеки глубокого обучения
Любая библиотека глубокого обучения содержит три ключевых компонента: многомерные массивы (они же тензоры), операторы линейной алгебры и вычисление производных.
В Tensorflow, библиотеке глубокого обучения от Google, отлично реализованы все три компонента. Наряду с CPU, она поддерживает вычисления на GPU и TPU (тензорных процессорах Google).
В настоящее время это самая популярная библиотека глубокого обучения, вследствие чего по ней создано множество туториалов и онлайн-курсов. Но зрелость имеет и обратную сторону — весьма корявый API и более высокий порог входа, по сравнению с той же PyTorch.
Keras — это надстройка над Tensorflow, которая решает множество юзабилити-проблем последней. Ее главная фишка — это возможность строить архитектуру нейронной сети с использованием красивого Python DSL. Для Keras также написано множество обучающих материалов, поэтому разобраться с ней несложно.
PyTorch: альтернативная библиотека глубокого обучения
Пожалуй, PyTorch — это вторая по популярности DL библиотека после Tensorflow, которая создана в Facebook. Ее сильная сторона в том, что она была разработана для Python, и поэтому использует его стандартные идиомы. По сравнению с Tensorflow, здесь порог входа намного ниже, а любую нейронную сеть можно построить с использованием стандартных ООП классов и объектов.
Также ее легче отлаживать, потому что код исполняется как обычный Python код — нет этапа компиляции, как в TensorFlow. Поэтому можно пользоваться даже питоновским отладчиком.
Если сравнивать с Keras, PyTorch — более многословный, но менее магический.
У PyTorch тоже есть своя надстройка — это библиотека fastai. Она позволяет решить большинство стандартных DL задач в пару строчек кода. Но что делает fastai действительно особенной — это их невероятный онлайн-курс Practical Deep Learning for Coders.
На что обратить внимание
Невзирая на очень развитую экосистему, есть явные лидеры, наиболее широко применяемые в мире машинного и глубокого обучения. Делая первые шаги в ML, лучше использовать именно их, поскольку для них созданы подробные туториалы, онлайн-курсы, а также есть активные комьюнити.
Чтобы сделать процесс обучения более гладким, есть смысл начать эксперименты с классических задач ML и сфокусироваться на использовании Scikit-learn и Pandas. И после этого уже двигаться в сторону глубокого обучения.
Если вы задаетесь вопросом, какую DL библиотеку лучше выбрать: TensorFlow/Keras или PyTorch, то лучшим ответом будет найти онлайн-курс, который вам нравится, и курс сделает выбор за вас.