С чего начать работу с ML и DL. Обзор лучших библиотек

💡 Усі статті, обговорення, новини для початківців — в одному місці. Приєднуйтесь до Junior спільноти!

В январе вышла моя статья про типы машинного обучения и способы их применения для повседневных задач. Спасибо всем за фидбэк и комментарии: особенно часто меня спрашивали о том, как все описанные методы и алгоритмы можно «пощупать» и воплотить. В этой статье я подскажу способы.

Сегодня существует огромное количество библиотек для машинного и глубокого обучения. Чтобы облегчить задачу выбора для новичков, мы рассмотрим только самые популярные и необходимые библиотеки, которые покрывают все базовые потребности для начала работы с 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, то лучшим ответом будет найти онлайн-курс, который вам нравится, и курс сделает выбор за вас.

После ознакомления с основными инструментами и хотя бы базового понимания, что они позволяют делать, следующий важный шаг — выбор обучающих материалов. Курсов по ML и DL существует огромное множество и времени пройти все попросту не хватит. Поэтому в следующей статье мы обсудим лучшие, на мой взгляд, варианты по этим темам, а также дальнейшие шаги после их прохождения.

Все про українське ІТ в телеграмі — підписуйтеся на канал DOU

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному3
LinkedIn



91 коментар

Підписатись на коментаріВідписатись від коментарів Коментарі можуть залишати тільки користувачі з підтвердженими акаунтами.
То, что ML и AI тупо в статье сведены к паре классических методов и некоторым типам нейронок — уже отметили другие комментаторы.

Vasily Nekrasov, cогласен! Но учитывая тему статьи «С чего начать работу с ML и DL. Обзор лучших библиотек» думаю это приемлимо.

Вот что стоит добавить в этой статье, так это обозначить важность глубокого понимания ML/DS/AI, а не просто дать новичкам ориентир на инструменты. (Кстати для заголовка — это вполне ОК).

Один из таких глубоких курсов для новичков — www.coursera.org/learn/machine-learning
Нейронки там затронуты лишь немного, в конце курса. Оcновной язык там MatLab(Octave), а не Python). Но зато пройдя этапы курса, глубоко понимаешь, откуда взялись нейронки и как их «готовить». Что не для всего нейронка самое лучшее решение. И главное, как понимать, что алгоритм обучается, тому что хотим мы.

Автору отдельное спасибо за Google Colab. Теперь не надо будет локально свой Jupyter Notebook поднимать! :)

Кажется, у тебя ошибка — вместо «вкраткосрок» нужно «вдолгосрок» (?)

Странно, что обошли вниманием библиотеку ML.NET, которая сейчас очень активно развивается.

Да, ML.NET развиваеться. Впервые о нем я услышал в июне 2018. Но скорее это инструмент для .NET разработчиков, чтобы не переходить на другие языки и прикручивать ML в существующий .NET софт, нежели лидер в ML.
Пока еще ML.NET не догнал все разнообразие инструментов, которое существует для Python.

Отличная статья, большое спасибо автору!
В свое время, приходилось искать этот путь методом проб и ошибок:
1) сразу выбрал не тот язык программирования, с которым сложно было писать что-то практичное
2) пошел в сферы и инструменты, от которой в итоге не было пользы
3) поздно узнал про Jupyter Notebook
Автор предлагает отличную дорожную карту, рекомендую ее к использованию

1) ИИ нет и врядли в ближайшее время будет. Умножение матриц это не ИИ.
2) Заката МЛ не будет, так как это следующий шаг в разработке софта. Проще говоря автоматизация.
3) МЛ это и есть статистика) А посему утверждение что статистика говорит что статистика умрет довольно странно)

Чет я как то очень уж сомневаюсь что в Амазоне работают слабые специалисты. Понятно что там работают специалиты и без phd по математики, но все же .

Простой пример. Вот GPT модель языка blog.openai.com/better-language-models
Которой просто скармливают кучу текстов и она сама находит все правила и закономерности языка.
Сделаете это быстрее руками?) — врядли.

Рекомендую сразу подписаться на канал телеграм по МЛ t.me/ml_world
Там много полезных пейперов новостей и прочего

Раз такое дело, то тоже порекомендую хороший канал: t.me/d_science

Спасибо, ждем такую же статью только для аналитиков. Например
«С чего начать работу с Java. Обзор лучших библиотек»
....
Если в Data Science большую часть времени вы проводите в Jupyter Notebook, то в большая часть кода в програмировании пишется в так называемых IDE....
.... Выбор языка Java, Scala, Kotlin, Groovy — какой выбрать?...
... Spring — лучшая библиотека для бизнес-приложений..
Ну вообщем что то в таком духе, или блин, «стрелочка не поворачивается» ?

Что за треш? Вы модели на ассемблере пишите?) и какие же у питона проблемы на проде?)

Вы хоть что-то на прод с пайтоном деплоии?

Не знаю что там у вас, но обычно это происходит довольно непринуждённо.

tensorflow наверное самый убогий движок для нейронок, но он и самый простой для вайтишников и по нему много уроков для новичков в инете.

Это почему же он убогий?

Сборка tf то еще занятие, тут я согласен. Но обычно его и не нужно постоянно собирать, так как это делают с кафе, и не нужно что-то менять в середине так как это делают с кафе. Он довольно гибок(PyTorch еще более гибок). А это для ресьорча очень важно.

По поводу GPU, он по дефолту отжирает все. тому да, приходиться юзать CUDA_VISIBLE_DEVICES и alow_grown_placement.

R и R Shiny — это идеальные инструменты для исследования и создания прототипов приложений.

Для разработки «production-ready» приложений, можно использовать (например):

01. web сервер R Shiny и связанные с ним пакеты (shiny.rstudio.com);
02. пакеты «tidyverse» и «data.table» (высокопроизводительные вычисления);
03. пакет «ggplot2» и различные внешние JS библиотеки для визуализации;
04. пакет «bookdown» для создания технической документации проекта;
05. пакет «doParallel» для выполнения параллельных вычислений;
06. пакет «caret» (подробнее в книге «Applied Predictive Modeling in R»);
07. пакет «forecast» для работы с временными рядами (otexts.com/fpp2);
08. пакеты «keras» и «tensorflow» для глубокого машинного обучения;
09. пакет «R6» для реализации кода в парадигме объектно-ориентированного программирования;
10. пакет «testthat» для создания unit тестов.

Учитывая, что «большую часть времени» аналитики проводят в «Jupyter Notebook», хотелось бы обратить внимание на «R Notebook», который очень комфортный для проведения исследовательской работы и позволяет работать с кодом на Python, SQL, C++, Bash.

Общепринятой IDE для R является R Studio, которая существует в desktop и браузерной версиях.
При этом работа в R Studio на локальном компьютере и через браузер выполняется в едином интерфейсе, что весьма полезно при удаленной работе с R кодом на AWS сервере.

Мнение, что «R плохо подходит для решения задач, не связанных с анализом и визуализацией данных» обычно связано с тем, что код на R пишут не-программисты и он получается трудночитаемым и поддерживаемым. Код на Python легче поддерживать на этапе использования готового продукта. Кроме того, специалистов на Python обычно легче найти на рынке.

Считаю, что одним из основных достоинств R + R Shiny является отличное соотношение «скорость vs стоимость» прототипирования MVP vs MSP приложений.

R вообще не рекомендую, тупо урезанный пайтон без будущего, с просто пипец ужа ным синтиаксисом который тупо нереально быстро читать

В питоне как и в любом норм языке это в либах)
открываете гугли и пишете то что вам надо и юзаете
Пример:
www.google.com/...​&sourceid=chrome&ie=UTF-8

А вы думает в формуле что то изменилось?)

Я уже молчу о том что эти вещи довольно просты в реализации + довольно слабо полезны

1. Рекомендовать R или нет вопрос личной оценки.
2. R != Python. Но у них есть общее «под капотом» — C++.
3. Будущее R более чем прекрасно и серьезно (www.rstudio.com/pricing)
4. Синтаксис R имеет «особенности», связанные со статистической мощью языка.
5. Хорошо документированный R код читается легче C++ кода.

В R есть рекомендации по стилю кода.
Например:
1. Style guide — adv-r.had.co.nz/Style.html
2. Google’s R Style Guide — google.github.io/styleguide/Rguide.xml
3. The tidyverse style guide — style.tidyverse.org

1) это вопрос не личной оценки, а финансовых, хайринговых, сапортских вопросов.
R не выгоден по многим аспектам.
2) R != Python разумеется но R in Python)
3) У него нет будущего кроме как в группах какихто староверов или хз кого. А отсутствие массовости делает продукт не жизнеспособным априори.
4) Синтаксис никогда не связан с особенностями и не более чем кривые руки разработчиков. я бы еще поняли синтаксис если бы он был сделан в сторону скорости обработки, но это не так. А следователньо его состояние ничем необосновано и бесполезно.
5)

Хорошо документированный R код читается легче C++ кода.

Хорошо документированный R код читается легче хренового C++ кода? Ну тут вопервых нормальный сишный код сегда норм читается и никогда не вызывает проблем с быстрым пониманием. А во вторых мы вроде сравниваем R и Python)

RE:

У него нет будущего кроме как в группах какихто староверов или хз кого

Абсолютно странное заявление, у которого точно нет будущего, в отличие от R.

расскажите еще о великом будущем Lisp’a))

PYPL — R in Top10 (7)
TIOBE — R in Top15 (15)
Отличный результат для в общем-то специализированного языка.

Ну а писать серваки на R это всеравно что писать МЛ на Groovy. Что лишь подтверждает печальность языка.

Спасибо за статью. Какраз лично мне очень актуально. Google Colab — прямо таки находка!

Я не знаю что такое R, а значит

используйте Python и не ошибетесь

это был сарказм)
я знаю что такое R

Типа язык для статистики, но проблема в том что все тоже есть в питоне) а посему его использование вызывает вопросы

В R почти 14000 библиотек, которые покрывают очень широкий спектр задач. Поэтому я бы так лихо не сказал, что

все тоже есть в питоне

я все библиотеки в R не знаю) как собсно и в любом языке)
Но я еще не видел кода на R который бы просто не переводился в Python.
На том же Kaggle, R юзается крайне редко.

Просто суть в том что на Питоне можно решить любую задачу а на R нет. Следовательно он более оптимален для изучения.

Если бы R решал задачи по типу кнопки «сделать пиздато» то вопросов не было бы.. но это тот же кодинг что и на другом языке. А при его узкой специфике и доволньо малом отличии вопрос «зачем плодить зоопарк?»

Рекомендую к изучению „The Impressive Growth of R”
stackoverflow.blog/...​0/10/impressive-growth-r

приведи пример задачи, которую можно решить на питоне и нельзя на R?

Підписатись на коментарі