SQL + ML = магия
Что такое BQML?
Одной из менее интуитивно понятных частей построения моделей машинного обучения является сортировка и выборка данных (например, с использованием Pandas). Было бы неплохо, если бы вы могли просто использовать SQL?
Да, хорошо, что с Google Cloud Platform (GCP) BigQuery ML (BQML) вы можете сочетать лучшее от ML и лучшее от SQL. Должен признаться, когда я впервые увидел SQL, создающий регрессионную модель, я был поражен.
Как насчет примера?
Образец, который я собираюсь использовать, основан на наборе данных о бриллиантах, который я использовал для других статей. Данные состоят из восьми столбцов (после исследовательского анализа данных и разработки признаков), а столбец price (число с плавающей запятой, представляющее цену бриллианта) является целевой переменной.
В BigQuery (BQ) я создал набор данных с именем diamonds_clean, а затем таблицу с именем diamonds_table, после чего загрузил CSV-файл с моими «чистыми» данными о бриллиантах. Вот как эти данные выглядят в BQ:
Если вы лучше знакомы с исходным набором данных о бриллиантах, вы заметите, что все категориальные переменные были преобразованы с использованием кодирования меток. Вы также увидите, что функции X, Y и Z были объединены (с помощью PCA) в одну функцию с именем dim_index. Эти данные готовы к работе, даже если они несовершенны (например, метки должны быть целыми числами, а не числами с плавающей запятой). Я мог бы выполнить эти шаги в BQML, но решил не делать этого, потому что хочу выделить создание модели в этой статье.
Создание модели с помощью SQL
Создать регрессионную модель с помощью BQML очень просто — вы пишете «SQL» в BQ. На несколько более техническом уровне в BQ используются специализированные SQL-подобные команды для запуска процесса создания модели в BQML.
Вот «SQL» для создания регрессионной модели с использованием данных о бриллиантах; модель заканчивается моделью BQML с именем diamonds_model:
Вы быстро заметите, что SQL далек от обычного SQL и действительно сбивает с толку тех из нас, кто написал много SQL:
- СОЗДАТЬ ИЛИ ЗАМЕНИТЬ МОДЕЛЬ — эта очень специфичная для BQML команда выполняет обучение модели и указывает, куда она пойдет.
- ОПЦИИ — список параметров модели, которую нужно построить, включая model_type, который сообщает BQML, какую модель нужно построить; это один из довольно длинного списка параметров, включая (но не ограничиваясь) LINEAR_REG, LOGISTIC_REG, AUTOML_CLASSIFIER и TENSORFLOW. Параметр input_label_cols сообщает BQML целевые объекты из набора данных.
После предложения CREATE OR REPLACE MODEL обратите внимание на обычный SQL — это оператор выбора для набора данных. Важным следствием здесь является то, что этот SQL может быть любым SQL, поэтому я могу легко сортировать или выбирать свои данные, как захочу, используя SQL. Это та часть, которую мы обычно делаем, используя странный (для меня) синтаксис Python Pandas DataFrame.
Модель — представление пользовательского интерфейса
Выполнение «запроса» CREATE OR REPLACE MODEL приводит к модели, которая похожа на модель, созданную с помощью Python, но результаты оценки обрабатываются как таблица для каждой сборки (что-то, что можно запросить с помощью SQL). Модель также имеет пользовательский интерфейс консоли GCP. Пользовательский интерфейс имеет четыре вкладки следующим образом:
Вкладка ДЕТАЛИ содержит сводную информацию о модели, включая тип (LINEAR_REGRESSION). Вкладка ОБУЧЕНИЕ содержит график или таблицу (для каждой сборки модели), показывающую потерю данных для обучения, потерю данных для оценки и продолжительность построения модели в секундах.
Вкладка ОЦЕНКА, пожалуй, самая информативная для пользовательского интерфейса:
Здесь вы можете увидеть метрики оценки модели. Эти показатели различаются в зависимости от типа модели (например, у классификации есть показатели, связанные с точностью). Вкладка СХЕМА — это просто схема самих обучающих данных, которая ничем не отличается от схемы, которую вы видите для таблицы.
Модель — представление запроса
Модель также можно запросить, в результате чего будет таблица, содержащая те же показатели, что и на вкладке ОЦЕНКА. На следующем изображении показаны запрос и результаты в BQML. Представьте себе следующее со многими сборками моделей; каждый из них будет строкой в таблице. Опять же, вы можете использовать SQL для выбора данных.
Заключительные мысли
Эта статья только начинает показывать значительный набор функций, доступных в BQML. Например, обратите внимание, что мои данные никогда не были разделены на тестовые и обучающие, и я никогда не выполнял прогнозирование. Все это возможно вместе с намного (много) больше.
Я настоятельно рекомендую вам ознакомиться с документацией Google BigQuery ML, чтобы узнать (много) больше о BQML.