Полное руководство по началу работы с машинным обучением в Julia

Что такое Юля?

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

Зачем использовать Юлию для машинного обучения?

Скорость и компиляция

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

Скриптоподобный синтаксис

Несмотря на преимущество в скорости, синтаксис Джулии не очень сложен. Он очень похож на язык сценариев, и относительно легко переключиться на Julia из фона Python или R.

Сообщество, разработки и библиотеки

Юля набирает обороты и становится все более зрелой. С этим ростом растет и сообщество. Хотя все еще намного меньше, чем сообщество Python, это хороший признак того, что растет как сообщество, так и количество доступных библиотек.

Запустите Julia в Jupyter Notebook

Еще одна замечательная особенность Джулии в том, что ее можно запускать в записных книжках Jupyter. И установить его очень просто! Вот как установить Юлию в блокнот Jupyter:

  1. Скачайте и установите Юлию с их сайта
  2. Откройте командную строку Julia
  3. Запустите команду using Pkg
  4. Запустите команду Pkg.add("IJulia")
  5. Запустите записную книжку Юпитер, и вы сможете выбрать Джулию в правом верхнем углу записной книжки (см. Изображение)

Подготовка данных набора данных Iris в Julia

Прежде чем перейти к реальной части машинного обучения, необходимо импортировать и подготовить данные. Здесь я рассмотрю только три основных шага: импорт файла csv, одно горячее кодирование категориальной переменной и создание разделения на поезд-тест.

Подготовка данных 1 - Импорт файла CSV в Julia

Первым шагом к началу работы в Julia является импорт данных. В этом случае мы используем файл csv с данными Iris. Для импорта файла CSV в качестве фрейма данных вам необходимо добавить библиотеки «CSV» и «DataFrames», как показано ниже. Затем вы используете функцию «CSV.File» для чтения файла csv и функцию DataFrame для преобразования его во фрейм данных.

Подготовка данных 2 - One Hot Encode зависимой переменной (разновидности)

Для некоторых моделей вам понадобится одна горячая кодировка категориальных переменных. Для этого можно использовать библиотеку «Токарный станок». Он имеет функцию OneHotEncode, которая преобразует фрейм данных в фрейм данных OneHotEncoded. После этого вы можете удалить исходный столбец с помощью функции «выбрать».

Подготовка данных 3 - разделение теста на обучение

Для оценки модели вам понадобится тестовый сплит поезда. Следующий код делает это с помощью библиотеки «Random». По сути, он выбирает случайное подмножество индексов и обрабатывает их как набор поездов, в то время как невыбранные индексы будут набором тестов:

Машинное обучение в Юлии

Ресурсы для машинного обучения в Julia по-прежнему относительно распределены по разным пакетам. Поскольку Джулия (пока) не так популярна, как другие языки программирования для машинного обучения, иногда бывает непросто найти конкретные модели. Также может потребоваться больше усилий для поиска (или написания) определенных базовых функций подготовки данных, которые легко доступны в Python и R.

Хорошая новость заключается в том, что существуют инициативы по перегруппировке моделей машинного обучения в более крупных библиотеках. На данный момент есть две библиотеки, которые серьезно конкурируют за то, чтобы стать популярной библиотекой машинного обучения в Julia: MLJ и Scikit Learn.

Эти две инициативы прекрасны, но они еще не полностью завершены. В результате для некоторых моделей они просто предоставляют оболочки для других, гораздо меньших, библиотек машинного обучения. Из-за этого я считаю важным также охватить две из этих меньших библиотек: «GLM» для обобщенных линейных моделей и «DecisionTree» для многих древовидных моделей. Я начну с небольших библиотек и закончу более крупными инициативами.

Логистическая регрессия в Julia с использованием библиотеки GLM

В следующем примере подходят три модели логистической регрессии, использующие библиотеку GLM для данных Iris. GLM использует интерфейс «формулы», который часто встречается в библиотеках, ориентированных на статистику. Мы можем указать семейство (в данном случае Binomial) и тип связи (в данном случае Logit Link), чтобы создать желаемый тип GLM. Это делается в первой части приведенного ниже фрагмента кода.

В конце этого фрагмента прогнозы трех моделей объединяются по горизонтали, чтобы подготовиться к применению мультиклассовой классификации «один против всех».

Вот распечатанные объединенные предсказанные вероятности (это то, что находится в переменной «preds»):

В следующем фрагменте мы конвертируем три предсказанные вероятности для каждой строки в предсказание одного класса для каждой строки. Это решение основано на наивысшей прогнозируемой вероятности между каждой из трех прогнозируемых вероятностей:

Вот как выглядит реклассифицированный массив «preds_cat»:

В качестве последнего шага вот как вычислить точность нашего прогноза GLM на тестовом наборе, используя короткий цикл for:

Дерево решений в Julia с использованием библиотеки DecisionTree.jl

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

Затем модель создается как экземпляр DecisionTreeClassifier. Мы можем указать несколько гиперпараметров, например, max_depth, используемый в этом примере. Подходящий синтаксис отличается особенным восклицательным знаком.

Последние два шага - это прогнозирование на тестовом наборе с использованием функции прогнозирования и вычисление точности, как в предыдущей модели.

Случайный лес в Юлии с использованием библиотеки DecisionTree.jl

Как вы увидите, модель случайного леса применяется почти так же, как дерево решений. Сначала это может сбивать с толку, но модель случайного леса также является частью библиотеки дерева решений!

Основные пакеты для машинного обучения в Юлии

Теперь, когда мы увидели, как использовать две большие, но небольшие библиотеки для машинного обучения в Julia, перейдем к более крупным библиотекам. Как было сказано ранее, есть два основных пакета, которые соревнуются за то, чтобы стать популярной библиотекой машинного обучения в Julia: Scikit Learn и MLJ. Давай проверим их обоих.

Scikit Learn для машинного обучения в Julia

Многие из вас знают Scikit Learn из Python. Это пакет для машинного обучения на Python, и здорово, что он есть и в Julia. Это потребует гораздо меньше усилий, если мы сможем использовать тот же синтаксис, что и Python!

Давайте посмотрим на пример Scikit Learn в Julia. Этот фрагмент кода начинается с импорта библиотеки Scikit Learn. Следующим шагом является загрузка модели, которую вы хотите использовать (в данном случае логистической регрессии). Используя "fit!" синтаксис (внимание к восклицательному знаку), модель обучена.

После этого функция прогнозирования используется для прогнозирования набора тестов с помощью обученной модели. Наконец, вычисляется точность.

Использование Scikit Learn в Julia также имеет свои недостатки. Например, большая часть библиотеки Scikit Learn, которую мы можем использовать в Julia, на самом деле является просто оболочкой вокруг Python. Помимо нескольких моделей, реализованных в Julia, модели Julia фактически используют Pycall для вызова кода Python.

Однако, если мы хотим переключиться на Джулию, это должно быть связано с преимуществами Джулии. Одним из основных преимуществ Julia является преимущество в скорости по сравнению с Python, вызов кода Python - это не то, что мы должны здесь делать. Если это просто оболочка Python, мы могли бы остаться с Scikit Learn напрямую на Python.

Еще один недостаток заключается в том, что модели Python в Scikit Learn не поддерживают категориальные переменные. Помимо их кодирования, в Scikit Learn мало что можно сделать, и это действительно отрицательный момент (особенно для древовидных моделей). Как вы видели в примерах, Джулия позволяет нам обрабатывать категориальную переменную как одну переменную, а не как набор из одного горячего закодированного манекена. Так что это преимущество Julia также исчезнет, ​​когда мы будем использовать Julia как простую оболочку Python.

MLJ для машинного обучения в Юлии

Конкурентом машинного обучения в Julia является пакет MLJ. Он обещает решить проблему категориальных переменных, и это чисто по-Джулии. Это делает его очень интересным для изучения. Она также имеет серьезную поддержку со стороны Фонда Алана Тьюринга, что заставляет меня поверить в то, что эта библиотека может остаться здесь и надолго.

Давайте теперь посмотрим на пример MLJ для машинного обучения в Julia в приведенном ниже фрагменте. Есть несколько вещей, которые отличаются от обычных. В частности, создание машины - это выбор синтаксиса, который для многих будет новым. Что еще более необычно, так это то, что нужно загружать модель, а не импортировать пакет.

Но после этих синтаксических различий использование библиотеки MLJ принципиально не отличается. Синтаксис MLJ легко изучить, и на веб-сайте документации MLJ есть хорошая документация.

Заключение

В этой статье мы увидели четыре библиотеки для машинного обучения в Julia. Две из этих библиотек (MLJ и Scikit Learn) кажутся реальными конкурентами за власть в сфере машинного обучения в Julia.

Scikit Learn имеет большое преимущество в виде знакомого синтаксиса из реализации Python и пользуется доверием со стороны своего сообщества. С другой стороны, Scikit Learn часто просто вызывает код Python, что в первую очередь лишает большинства преимуществ использования Julia.

У MLJ есть большое преимущество в том, что это настоящий проект Джулии. Его синтаксис немного новый, но различия кажутся незначительными. Настоящая проблема для MLJ - завоевать доверие и популярность в более широком сообществе.

Я надеюсь, что эта статья дала вам все необходимое для начала работы в Julia, и желаю вам удачи в этом!