Microsoft SQl Server ML Services: Пакет RevoScaleR

Tags: Microsoft, machine learning, SQL Server

Пакет RevoScaleR

RevoScaleR - это пакеты, созданные Revolution Analytics (собственности Microsoft) с целью импорта, преобразования и анализа данных по шкале. Существуют различные категории функций для хранения данных, импорта и сохранения, преобразования данных, рисования некоторых графиков, таких как гистограмма, строка, описательный анализ, интеллектуальный анализ, управление пакетами и т. д.

В этом разделе мы расскажем о некоторых функциях, которые можно использовать. Пример будет показан в SQL Server 2017.

rxLinMod

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

Как вы можете видеть ниже, первая строка - «EXECUTE sp_execute_external_script @ language = N'R», которая вызывает хранимую процедуру, позволяющую пользователю писать R-скрипт.

1
2
3
4
5
6
7
8
9
EXECUTE sp_execute_external_script @language=N'R'
,@script = N'require("RevoScaleR")
formula=strength~cement+ash+age+water
Model_1=rxLinMod(formula,data=inputDataSet)
Model=data.frame(payload = as.raw(serialize(Model_1, connection=NULL)))'
  ,@input_data_1 = N'Select strength,cement,ash,age,water from [dbo].[concrete]; '
, @output_data_1_name = N'Model'
,@input_data_1_name = N'inputDataSet'
  WITH RESULT SETS (([concreteModel] varbinary(max) NOT NULL  ));

От второй до пятой строки расположен соответствующий код R, который хранится в параметре @script. Код содержит ссылку на пакет RevoScaler с использованием функции require. Нет необходимости устанавливать этот пакет, поскольку он существует в службах ML / R. Вторая строка кода R - это создание формулы. Наша цель - предсказать силу взаимодействия относительно некоторых других переменных. Формула, которая может создать это, - это формула = прочность ~ цемент + зола + возраст + вода, которая хранит формулу в переменной «формула». В третьей строке создайте модель, используя функцию rxLinMod, чтобы создать линейную модель из формулы. Наконец, последняя строка сохраняет формулу в выходной переменной с именем «Model».

@ input_data_1 хранит данные, собранные из базы данных SQL, используя SQL-запрос «N’Select strength,cement,ash,age,water from [dbo].[concrete]». Наконец, выходная переменная «Model» будет хранить линейную модель.

После создания модели мы хотим сохранить модель для будущего, чтобы повторно использовать ее для прогнозирования новых данных. Чтобы сохранить модель, мы используем следующие коды:

1

2

3

4

5

6

7

8

IF NOT EXISTS (SELECT 1 FROM sys.objects

                                                               WHERE object_id = OBJECT_ID(N'[dbo].[LinearModel]')

                                                                               AND [type] IN (N'U'))

BEGIN

               CREATE TABLE [dbo].[LinearModel](

                               [Model] [varbinary](MAX) NULL

               );

END

Затем нам нужно вставить модель в таблицу «LinearModel».

1

2

3

4

5

6

7

8

9

Insert into [dbo].[LinearModel]

EXECUTE sp_execute_external_script @language=N'R'

,@script = N'require("RevoScaleR")

formula=strength~cement+ash+age+water

Model_1=rxLinMod(formula,data=inputDataSet)

Model=data.frame(payload = as.raw(serialize(Model_1, connection=NULL)))'

 ,@input_data_1 = N'Select strength,cement,ash,age,water from [dbo].[concrete]; '

, @output_data_1_name = N'Model'

,@input_data_1_name = N'inputDataSet'

Модель уже сохранена в базе данных. Теперь в другой хранимой процедуре мы будем использовать модель.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

declare @rx_model varbinary(max) = (select [Model] from [dbo].[LinearModel] );

  exec sp_execute_external_script

                                                                               @language = N'R'

                                                                 , @script = N'

                                                                 require("RevoScaleR");

                                                                 cdr_model<-unserialize(rx_model);

                                                                 predictions <- rxPredict(modelObject = cdr_model,

                     data = PredictionData)

                                                                 prediction <-as.data.frame(predictions);'

               , @input_data_1 = N'Select strength,cement,ash,age,water from [dbo].[concrete]'

               , @input_data_1_name = N'PredictionData'

               , @output_data_1_name=N'prediction'

               , @params = N'@rx_model varbinary(max)'

               , @rx_model = @rx_model

               with result sets (("prediction" float not null ))  ;

Существует еще один вход для процедуры хранения, который не является только набором данных, он содержит входные данные для моделей, которые мы уже сохранили в базе данных.

При запуске хранимой процедуры был показан следующий результат:

Существуют и другие модели регрессионного анализа цели, такие как rxLogit, которые используют для логистической регрессии, rxGlm, которые обобщают линейную модель на данные и т. д. Более того, для других типов анализа, такого как прогнозирование группы (классификации), существуют некоторые алгоритмы, такие как rxDTree, rxBTree, rxDForest и rxNaiveBayes

No Comments

Add a Comment