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

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

Линейная регрессия

Линейная регрессия - один из наиболее широко используемых методов прогнозной аналитики в машинном обучении. Он использует исторические данные для прогнозирования будущих значений выходной переменной. Например, чтобы спрогнозировать цену дома, продажи компании на ближайшие месяцы и т. Д.

Статья в Википедии о состояниях линейной регрессии:

В статистике линейная регрессия - это линейный подход к моделированию взаимосвязи между скалярным откликом и одной или несколькими независимыми переменными. Случай одной объясняющей переменной называется простой линейной регрессией. Для более чем одной независимой переменной процесс называется множественной линейной регрессией. - Википедия

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

y = mx + b

где x - независимая переменная, b - точка пересечения, а m - наклон прямой. С учетом всего этого цель состоит в том, чтобы предсказать значение y, которое является зависимой переменной.

График этого математического уравнения выглядит так:

Хорошо, это небольшое введение о линейной регрессии. Более подробную информацию о линейной регрессии можно найти здесь и здесь. Или вы можете сами поискать в Интернете.

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

Программное обеспечение и инструменты

Anaconda Navigator - это приложение объединяет Jupyter Notebook и ядро ​​Python, а также все необходимые библиотеки для машинного обучения с использованием Python. Однако поддержки нет - по умолчанию для запуска ноутбуков с кодом Ruby.

IRuby. Хорошие новости: Jupyter Notebook поддерживает ядро ​​Ruby. Итак, следующим шагом была установка гем IRuby, как описано на странице репозитория гемов. IRuby требует, чтобы в системе был установлен Ruby, который я уже настроил с помощью rvm.

Когда оба этих инструмента были настроены, я протестировал ядра как Python, так и Ruby, запустив Jupyter Notebook в Anaconda Navigator. Все работало идеально. Теперь я могу запускать код Python и Ruby в Jupyter Notebook.

Затем я провел небольшое исследование, чтобы найти некоторые драгоценные камни Ruby, которые могут работать аналогично некоторым популярным библиотекам Python. Это была самая сложная часть, так как было очень мало ресурсов и статей о Ruby gems для машинного обучения. Однако после нескольких дней исследований я с удивлением обнаружил так много замечательных жемчужин машинного обучения в Ruby, и некоторые из них активно поддерживаются.

Ниже приведен список библиотек Python и синонимов Ruby, которые я использовал для реализации простой линейной регрессии на обоих языках программирования:

Загрузка набора данных: pandas (Python), daru или rover-df (Ruby)
Операция с матрицей: numpy (Python), Numo-narray, numo-linalg (Ruby)
Модель машинного обучения: scikit-learn (Python), rumale (Ruby)
Построение / Визуализация: matplotlib (Python), numo-gnuplot (Ruby)

В Anaconda Navigator все библиотеки Python уже были объединены, поэтому мне не нужно было ничего делать для этого. Однако мне пришлось вручную установить все драгоценные камни Ruby, о которых я упоминал выше, вместе с их зависимостями.

Линейная регрессия в Python

Ниже приведен пример Jupyter Notebook на Python для прогнозирования заработной платы на основе корреляции между годами опыта и зарплатой каждого сотрудника.

Щелкните, чтобы открыть Jupyter Notebook of Linear Regression in Python

Код:

Код довольно понятен. Я использую все вышеупомянутые библиотеки Python для импорта набора данных Salary vs Years of Experience, конвертирую его в массивы numpy, а затем разбиваю набор данных на обучающий набор и набор тестов. Затем обучите модель машинного обучения с данными обучающего набора и спрогнозируйте результат для набора тестов. Прогноз (y_pred) должен точно совпадать с набором выходных тестов (y_test).

В визуализациях мы можем видеть, как обучающий или тестовый набор разбросан и как модель находит линейную зависимость, чтобы нарисовать наиболее подходящую линию из обучающих или тестовых данных. Наконец, я попытался спрогнозировать зарплату за 10 и 12 лет опыта. Получил ~ 120380 и ~ 139100 соответственно.

Линейная регрессия в Ruby

Хорошо, теперь пора написать ту же программу на Ruby. Вот как это выглядит в Ruby с упомянутыми выше драгоценными камнями Ruby.

Щелкните, чтобы открыть Jupyter Notebook of Linear Regression in Ruby

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

Код:

Я реализовал в Ruby те же шаги, что и в программе Python. На удивление это оказалось не так уж и сложно. Я загрузил набор данных с помощью Daru :: DataFrame из csv. Затем преобразовал набор данных в массив Numo и разделил набор данных на обучающий набор и тестовый набор. После этого обучите модель с данными обучающей выборки и спрогнозируйте зарплату по данным тестовой выборки.

Затем постройте визуализации как для обучающего набора, так и для тестового набора. Напоследок спрогнозируем зарплату за 10 и 12 лет опыта. Получил ~ 121009 и 139802 соответственно. Я могу сказать, что это несколько похоже на то, что я получил от модели машинного обучения Python.

Могу сказать, что модели машинного обучения Python и Ruby дали мне очень похожие результаты. Я рад это видеть.

Следует отметить, что при запуске программы Ruby я получал некоторые предупреждения из-за устаревшего кода, который был обесценен в Ruby 2.7.0. Мне пришлось дважды запустить один и тот же блок кода, и при следующем запуске предупреждений не было. Также Ruby отображает вывод почти для каждого блока, а Python - нет.

Заключение

Определенно, Python и R являются наиболее распространенными языками для машинного обучения. Такие языки программирования, как Java, Scala и JavaScript, также широко используются различными учеными и компаниями. Руби медленно набирает темп в этой гонке. Щелкните здесь, чтобы увидеть список драгоценных камней Ruby, отображаемых в библиотеки Python. Также проверьте здесь, чтобы увидеть список всех ресурсов по машинному обучению и искусственному интеллекту для языка Ruby. В активной разработке находится несколько хороших драгоценных камней Ruby, связанных с машинным обучением и искусственным интеллектом (ИИ).

Ruby еще предстоит пройти долгий путь по сравнению с Python в машинном обучении. Однако с таким количеством драгоценных камней, находящихся в активной разработке, я ясно вижу лучшее будущее в сообществе Ruby!

Ваше здоровье!!