Краткое руководство. Функции R с использованием машинного обучения SQL

Применимо к: SQL Server 2016 (13.x) и более поздние Управляемый экземпляр SQL Azure

В этом кратком руководстве вы узнаете, как использовать математические и служебные функции R в Службах машинного обучения SQL Server или Кластерах больших данных. Зачастую статистические функции, которые сложно реализовать в T-SQL, выполняются в R всего парой строк кода.

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

В этом кратком руководстве вы узнаете, как использовать математические и служебные функции R в службах SQL Server R Services. Зачастую статистические функции, которые сложно реализовать в T-SQL, выполняются в R всего парой строк кода.

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

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

Для работы с этим кратким руководством необходимо следующее.

  • Инструмент для выполнения SQL-запросов, содержащих сценарии R. В этом кратком руководстве используется Azure Data Studio.

Создание хранимой процедуры для формирования случайных чисел

Для простоты давайте воспользуемся пакетом R stats, который устанавливается и загружается по умолчанию. Он содержит сотню функций для общих статистических задач, в том числе функцию rnorm, которая формирует указанное количество случайных чисел с нормальным распределением при заданном среднем значении и стандартном отклонении.

Например, следующий код R возвращает 100 чисел со средним значением 50 и стандартным отклонением 3.

as.data.frame(rnorm(100, mean = 50, sd = 3));

Чтобы вызвать строку кода R из T-SQL, добавьте функцию R в параметр скрипта R sp_execute_external_script, как показано ниже:

EXECUTE sp_execute_external_script
      @language = N'R'
    , @script = N'
         OutputDataSet <- as.data.frame(rnorm(100, mean = 50, sd =3));'
    , @input_data_1 = N'   ;'
      WITH RESULT SETS (([Density] float NOT NULL));

Как упростить формирование другого набора случайных чисел?

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

CREATE PROCEDURE MyRNorm (
    @param1 INT
    , @param2 INT
    , @param3 INT
    )
AS
EXECUTE sp_execute_external_script @language = N'R'
    , @script = N'
	     OutputDataSet <- as.data.frame(rnorm(mynumbers, mymean, mysd));'
    , @input_data_1 = N'   ;'
    , @params = N' @mynumbers int, @mymean int, @mysd int'
    , @mynumbers = @param1
    , @mymean = @param2
    , @mysd = @param3
WITH RESULT SETS(([Density] FLOAT NOT NULL));
  • В первой строке определяется каждый из входных параметров SQL, необходимых при выполнении хранимой процедуры.

  • Строка, начинающаяся с @params, определяет все переменные, используемые в коде R, и соответствующие типы данных SQL.

  • Следующие строки сопоставляют имена параметров SQL с соответствующими именами переменных R.

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

EXECUTE MyRNorm @param1 = 100,@param2 = 50, @param3 = 3

Использование служебных функций R для устранения неполадок

Установленный по умолчанию пакет utils предоставляет широкий набор служебных функций для изучения текущей среды R. Они могут оказаться полезными, если вы нашли несоответствия в выполнении кода R в SQL Server и внешних средах.

Например, можно использовать функции системного времени в R, такие как system.time и proc.time, чтобы фиксировать время, затрачиваемое процессами R, и анализировать проблемы производительности. Например, см. руководство Создание характеристик данных, где функции времени R внедрены в решение.

EXECUTE sp_execute_external_script
      @language = N'R'
    , @script = N'
        library(utils);
        start.time <- proc.time();
        
        # Run R processes
        
        elapsed_time <- proc.time() - start.time;'

Сведения о других полезных функциях см. в статье Использование функций профилирования кода R для повышения производительности.

Дальнейшие действия

Сведения о создании модели машинного обучения с использованием R и машинного обучения SQL приведены в следующем кратком руководстве: