Интегрируйте машинное обучение внутри баз данных с помощью 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, чтобы вы могли ознакомиться со всеми другими возможностями.
Я предлагаю вам попробовать это с вашим набором данных или попробовать провести новый эксперимент. Также вы можете создать регрессионную модель вместо классификационной. Еще одна идея, которую я оставляю вам, заключается в том, чтобы улучшить производительность этой модели. Вы можете попробовать очистить и обработать данные обучения и проверить, улучшает ли предиктор свою метрику или нет. Это может быть забавным вызовом!
Я надеюсь, что вы нашли этот урок полезным. Если у вас есть дополнительные вопросы, не стесняйтесь оставлять комментарии. Увидимся в следующий раз! 👋🏻