Интегрируйте машинное обучение внутри баз данных с помощью MindsDB.

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

Однако одним из наиболее важных вариантов использования моделей машинного обучения в реальном мире является прогнозирование табличных данных на основе табличных данных, которые мы уже сохранили в базе данных. Так что, если бы мы могли просто применить модель непосредственно к самой таблице? Что ж, это именно то, что представляет собой таблица AI.

Таблицы ИИ

Таблицы ИИ интегрируют модель машинного обучения непосредственно в виде виртуальных таблиц внутри вашей базы данных. Это позволяет нам создавать предикторы, которые можно запрашивать с помощью операторов SQL.

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

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

Для этого мы будем использовать инструмент под названием MindsDB. MindsDB — это встроенный в базу данных инструмент машинного обучения, который помогает нам расширить язык SQL, чтобы модели машинного обучения можно было создавать, запрашивать и поддерживать, как если бы они были таблицами базы данных. Давайте посмотрим на это в действии.

Пример: прогнозы доходов переписи населения

Весь код, использованный в этом примере, можно найти в этом репозитории.

Данные

В этом примере мы будем использовать набор данных Доход переписи. Цель состоит в том, чтобы предсказать, превышает ли доход человека 50 тысяч долларов в год на основе данных переписи. Набор данных можно найти по этой ссылке, извлеченной из репозитория UCI ML.

Загруженный файл содержит 3 файла:

  • Adult.data: файл, содержащий 32561 запись данных переписи для обучения.
  • Adult.test: файл, содержащий 16281 запись данных переписи для тестирования.
  • Adult.names: файл с описанием набора данных, информацией, лицензией и т. д.

Каждая запись в данных состоит из 14 столбцов, в которых мы можем найти такие атрибуты, как возраст, рабочий класс, образование и другие. Последний столбец соответствует столбцу target, независимо от того, превышает ли зарплата 50 000 долларов США в год.

Предварительная обработка данных

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

Shape: (32561, 15)

Список названий каждого столбца можно найти в файле aduls.name вместе с другой информацией о наборе данных.

Как мы видим, у нас есть обычный фрейм данных pandas с некоторыми категориальными данными и некоторыми числовыми данными. Мы могли бы работать с категориальными данными, нормализовать значения, очищать набор данных и т. д., но модель будет работать с данными как есть, и поскольку цель статьи — объяснить концепцию таблиц ИИ пока оставим данные.

Единственный столбец, который мы собираемся изменить, — последний. Мы заменим значения «‹=50K» и «‹50K» на 0 и 1 соответственно, чтобы проблема выглядела как обычная задача классификации.

Это вся предварительная обработка, которую нам нужно выполнить в наборе данных. Теперь мы можем экспортировать фрейм данных в файл csv. Он нам скоро понадобится.

Файл называется data.csv, и мы не будем сохранять индексный столбец в новом файле.

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

Shape: (16281, 15)

В этом случае при загрузке dataframe нам нужно использовать атрибут skiprows, так как первая строка тестового набора не является записью сама по себе.

Теперь мы также можем сохранить dataframe в CSV-файле. Назовем его test.csv.

MindsDB

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

Во-первых, нам понадобится учетная запись и вход в облако.

У нас будет редактор для выполнения обычных SQL-запросов. Теперь нам нужно импортировать данные, которые мы сгенерировали на последнем шаге. Для этого перейдите на страницу «Добавить данные», выберите вкладку «Файлы» и перейдите к «Импорт файла».

Здесь нам нужно импортировать два CSV-файла, которые мы создали ранее (data.csv и test.csv). Мы назовем их «train_data» и «test_test» соответственно.

После того, как мы импортировали наши файлы, мы можем проверить, правильно ли они загружены, выполнив следующий запрос в редакторе.

Tables_in_files
-------------------
test_data
train_data

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

Создание предиктора

Теперь, когда мы загрузили наши данные, пришло время создать предиктор. Мы собираемся использовать оператор «создать предиктор».

  • salary_predictor — имя предиктора.
  • files — имя таблицы по умолчанию для загруженных файлов.
  • target — это имя столбца, который мы хотим предсказать.

Этот запрос создаст предиктор для наших данных. Теперь предиктор должен быть обучен на данных. Мы можем проверить его статус с помощью следующего запроса.

Все созданные нами предикторы будут храниться в таблице mindsdb.predictors.

Вывод запроса примерно такой.

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

Процесс обучения займет около 5–10 минут. Как только он будет завершен, мы можем снова запустить предыдущий запрос, чтобы увидеть результаты.

Теперь мы видим, что статус — «complete», а точность — 0,832. Это означает, что наш предиктор имеет точность около 83% в обучающих данных.

Вот и все! Мы обучили модель непосредственно в нашей таблице с помощью SQL-запросов. Теперь мы можем протестировать предиктор с тестовыми данными.

Делать прогнозы

MindsDB дает нам два возможных способа делать прогнозы. Первый — это запуск SQL-запроса с единственной новой записью в параметрах запроса. Это идеально, если мы хотим предсказать пунктуальные новые данные.

Другой способ — сделать пакетный прогноз для большого набора данных в нашей базе данных. Это наш сценарий, так как у нас есть полный файл (test_data) с новыми записями, и переход по одному займет слишком много времени.

Мы можем запускать прогнозы для набора данных с помощью следующего запроса.

С оператором SELECT мы собираемся использовать все поля записи, доступные в данных. Затем мы воспользуемся оператором JOIN, чтобы сделать прогнозы, используя только что обученную модель. Наконец, мы создадим новый столбец под названием «predicted_salary» с прогнозами.

Если мы запустим запрос, он выведет новый фрейм данных с дополнительным столбцом прогнозов. Давайте оценим модель с помощью python. Над выводом справа есть кнопка для экспорта результатов в файл .csv. Я отметил его на картинке зеленым цветом.

Нажмите на него, и он загрузит результат запроса. Я изменю имя файла на «predictions.csv», чтобы следующий код использовал это имя. Теперь давайте воспользуемся pandas, чтобы проверить производительность модели. Помните, что точность предиктора составила около 83% на основе процесса обучения.

Мы будем использовать seaborn для визуализации результатов и confusion_matrix для создания метрик модели.

(16281, 16)

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

Давайте используем интересующие нас столбцы и вычисляем матрицу путаницы.

Теперь у нас есть метрики в формате массива, давайте создадим для них визуализацию.

И мы также можем взглянуть на показатели.

Precision: 0.8420587052673905
Recall: 0.9418907978771252
F1: 0.8891813858695653

Как мы видим, точность в тестовом наборе составляет около 84%, что очень близко к той, которую дают метрики предиктора.

Помните, что весь код находится в этом репозитории.

Заключение

Вот и все для этого урока. Мы увидели, что такое таблица ИИ, и запустили пример, чтобы увидеть, как она работает. Но это далеко не все возможности, которые может дать этот инструмент. Я ссылаюсь здесь на официальную документацию MindsDB, чтобы вы могли ознакомиться со всеми другими возможностями.

Я предлагаю вам попробовать это с вашим набором данных или попробовать провести новый эксперимент. Также вы можете создать регрессионную модель вместо классификационной. Еще одна идея, которую я оставляю вам, заключается в том, чтобы улучшить производительность этой модели. Вы можете попробовать очистить и обработать данные обучения и проверить, улучшает ли предиктор свою метрику или нет. Это может быть забавным вызовом!

Я надеюсь, что вы нашли этот урок полезным. Если у вас есть дополнительные вопросы, не стесняйтесь оставлять комментарии. Увидимся в следующий раз! 👋🏻​​