Руководство по R. Обучение и сохранение модели
Область применения: SQL Server 2016 (13.x) и более поздних версий Управляемый экземпляр SQL Azure
В первой части этой серии учебников из пяти частей вы узнаете, как обучить модель машинного обучения с помощью R. Вы обучите модель с помощью функций данных, созданных в предыдущей части, а затем сохраните обученную модель в таблице SQL Server. В этом случае пакеты R уже установлены со службами R (в базе данных), поэтому все можно сделать из SQL.
Работая с этой статьей, вы узнаете о следующем.
- Создание и обучение модели с помощью хранимой процедуры SQL
- Сохранение обученной модели в таблице SQL
В первой части были установлены необходимые компоненты и восстановлена демонстрационная база данных.
Во второй части вы узнали, как проверить пример данных и создать несколько графиков.
В третьей части вы узнали, как создавать функции из необработанных данных с помощью функции Transact-SQL. Затем вы вызвали эту функцию из хранимой процедуры, чтобы создать таблицу, содержащую значения характеристик.
Из пятой части вы узнаете, как ввести в эксплуатацию модели, которые были обучены и сохранены в соответствии с инструкциями в четвертой части.
Создание хранимой процедуры
При вызове R из T-SQL используется системная хранимая процедура sp_execute_external_script. Однако для часто повторяемых процессов (например, повторное обучение модели) проще инкапсулировать вызов процедуры sp_execute_external_script
в другую хранимую процедуру.
В Management Studio откройте новое окно запроса .
Выполните следующую инструкцию, чтобы создать хранимую процедуру RTrainLogitModel. Эта хранимая процедура определяет входные данные и использует glm для создания модели логистической регрессии.
CREATE PROCEDURE [dbo].[RTrainLogitModel] (@trained_model varbinary(max) OUTPUT) AS BEGIN DECLARE @inquery nvarchar(max) = N' select tipped, fare_amount, passenger_count,trip_time_in_secs,trip_distance, pickup_datetime, dropoff_datetime, dbo.fnCalculateDistance(pickup_latitude, pickup_longitude, dropoff_latitude, dropoff_longitude) as direct_distance from nyctaxi_sample tablesample (70 percent) repeatable (98052) ' EXEC sp_execute_external_script @language = N'R', @script = N' ## Create model logitObj <- glm(tipped ~ passenger_count + trip_distance + trip_time_in_secs + direct_distance, data = InputDataSet, family = binomial) summary(logitObj) ## Serialize model trained_model <- as.raw(serialize(logitObj, NULL)); ', @input_data_1 = @inquery, @params = N'@trained_model varbinary(max) OUTPUT', @trained_model = @trained_model OUTPUT; END GO
Чтобы оставить часть данных для тестирования модели, из таблицы данных по работе такси случайным образом выбирается 70 % данных, которые будут использованы для обучения.
Запрос SELECT использует пользовательскую скалярную функцию fnCalculateDistance для вычисления прямого расстояния между местами посадки и высадки. Результаты выполнения запроса сохраняются во входной переменной R по умолчанию
InputDataset
.Этот скрипт R вызывает функцию R glm для создания модели логистической регрессии.
Двоичная переменная tipped применяется в качестве столбца меток или результатов, и модель компонуется с использованием следующих столбцов характеристик: passenger_count, trip_distance, trip_time_in_secs и direct_distance.
Модель обучения, сохраненная в переменной R
logitObj
, сериализуется и возвращается в качестве выходного параметра.
Обучение и развертывание модели R с помощью хранимой процедуры
Поскольку хранимая процедура уже включает в себя определение входных данных, указывать входной запрос не требуется.
Для обучения и развертывания модели R вызовите хранимую процедуру и вставьте ее в таблицу базы данных nyc_taxi_models, чтобы ее можно было использовать для будущих прогнозов:
DECLARE @model VARBINARY(MAX); EXEC RTrainLogitModel @model OUTPUT; INSERT INTO nyc_taxi_models (name, model) VALUES('RTrainLogit_model', @model);
Просмотрите окно "Сообщения" в Среде Management Studio для сообщений, которые будут переданы в поток stdout R, как показано в следующем сообщении:
"Сообщения STDOUT из внешнего скрипта: строки считываются: 1193025, всего обработанных строк: 1193025, общее время блока: 0,093 секунды"
После выполнения инструкции откройте таблицу nyc_taxi_models. Обработка данных и компоновка модели может занять некоторое время.
Вы увидите, что была добавлена одна новая строка, которая содержит сериализованную модель в столбце model и имя модели RTrainLogit_model в столбце name.
model name ---------------------------- ------------------ 0x580A00000002000302020.... RTrainLogit_model
В следующей части этого учебника обученная модель будет использоваться для создания прогнозов.
Следующие шаги
Работая с этой статьей, вы выполните следующие задачи:
- Создание и обучение модели с помощью хранимой процедуры SQL
- Обученная модель сохранена в таблице SQL