Dela via


Självstudie: Distribuera en förutsägelsemodell i R med SQL-maskininlärning

Gäller för: SQL Server 2016 (13.x) och senare versioner Azure SQL Managed Instance

I del fyra i den här självstudieserien i fyra delar distribuerar du en maskininlärningsmodell som utvecklats i R till SQL Server Machine Learning Services eller i Big Data Clusters.

I del fyra i den här självstudieserien i fyra delar distribuerar du en maskininlärningsmodell som utvecklats i R till SQL Server med hjälp av Machine Learning Services.

I del fyra i den här självstudieserien i fyra delar distribuerar du en maskininlärningsmodell som utvecklats i R till SQL Server med SQL Server R Services.

I del fyra i den här självstudieserien i fyra delar distribuerar du en maskininlärningsmodell som utvecklats i R till Azure SQL Managed Instance med hjälp av Machine Learning Services.

I den här artikeln får du lära dig att:

  • Skapa en lagrad procedur som genererar maskininlärningsmodellen
  • Lagra modellen i en databastabell
  • Skapa en lagrad procedur som gör förutsägelser med hjälp av modellen
  • Köra modellen med nya data

I del ett lärde du dig hur du återställer exempeldatabasen.

I del två lärde du dig hur du importerar en exempeldatabas och sedan förbereder de data som ska användas för träning av en förutsägelsemodell i R.

I del tre lärde du dig att skapa och träna flera maskininlärningsmodeller i R och sedan välja den mest exakta.

Förutsättningar

Del fyra i den här självstudien förutsätter att du uppfyller förutsättningarna för del ett och slutfört stegen i del två och del tre.

Skapa en lagrad procedur som genererar modellen

I del tre av den här självstudieserien bestämde du dig för att en modell för beslutsträd (dtree) var den mest exakta. Nu, med hjälp av de R-skript du utvecklat, skapar du en lagrad procedur (generate_rental_model) som tränar och genererar dtree-modellen med rpart från R-paketet.

Kör följande kommandon i Azure Data Studio.

USE [TutorialDB]
DROP PROCEDURE IF EXISTS generate_rental_model;
GO
CREATE PROCEDURE generate_rental_model (@trained_model VARBINARY(max) OUTPUT)
AS
BEGIN
    EXECUTE sp_execute_external_script @language = N'R'
        , @script = N'
rental_train_data$Month   <- factor(rental_train_data$Month);
rental_train_data$Day     <- factor(rental_train_data$Day);
rental_train_data$Holiday <- factor(rental_train_data$Holiday);
rental_train_data$Snow    <- factor(rental_train_data$Snow);
rental_train_data$WeekDay <- factor(rental_train_data$WeekDay);

#Create a dtree model and train it using the training data set
library(rpart);
model_dtree <- rpart(RentalCount ~ Month + Day + WeekDay + Snow + Holiday, data = rental_train_data);
#Serialize the model before saving it to the database table
trained_model <- as.raw(serialize(model_dtree, connection=NULL));
'
        , @input_data_1 = N'
            SELECT RentalCount
                 , Year
                 , Month
                 , Day
                 , WeekDay
                 , Snow
                 , Holiday
            FROM dbo.rental_data
            WHERE Year < 2015
            '
        , @input_data_1_name = N'rental_train_data'
        , @params = N'@trained_model varbinary(max) OUTPUT'
        , @trained_model = @trained_model OUTPUT;
END;
GO

Lagra modellen i en databastabell

Skapa en tabell i Databasen TutorialDB och spara sedan modellen i tabellen.

  1. Skapa en tabell (rental_models) för lagring av modellen.

    USE TutorialDB;
    DROP TABLE IF EXISTS rental_models;
    GO
    CREATE TABLE rental_models (
          model_name VARCHAR(30) NOT NULL DEFAULT('default model') PRIMARY KEY
        , model VARBINARY(MAX) NOT NULL
        );
    GO
    
  2. Spara modellen i tabellen som ett binärt objekt med modellnamnet "DTree".

    -- Save model to table
    TRUNCATE TABLE rental_models;
    
    DECLARE @model VARBINARY(MAX);
    
    EXECUTE generate_rental_model @model OUTPUT;
    
    INSERT INTO rental_models (
          model_name
        , model
        )
    VALUES (
         'DTree'
        , @model
        );
    
    SELECT *
    FROM rental_models;
    

Skapa en lagrad procedur som gör förutsägelser

Skapa en lagrad procedur (predict_rentalcount_new) som gör förutsägelser med hjälp av den tränade modellen och en uppsättning nya data.

-- Stored procedure that takes model name and new data as input parameters and predicts the rental count for the new data
USE [TutorialDB]
DROP PROCEDURE IF EXISTS predict_rentalcount_new;
GO
CREATE PROCEDURE predict_rentalcount_new (
      @model_name VARCHAR(100)
    , @input_query NVARCHAR(MAX)
    )
AS
BEGIN
    DECLARE @model VARBINARY(MAX) = (
            SELECT model
            FROM rental_models
            WHERE model_name = @model_name
            );

    EXECUTE sp_execute_external_script @language = N'R'
        , @script = N'
#Convert types to factors
rentals$Month   <- factor(rentals$Month);
rentals$Day     <- factor(rentals$Day);
rentals$Holiday <- factor(rentals$Holiday);
rentals$Snow    <- factor(rentals$Snow);
rentals$WeekDay <- factor(rentals$WeekDay);

#Before using the model to predict, we need to unserialize it
rental_model <- unserialize(model);

#Call prediction function
rental_predictions <- predict(rental_model, rentals);
rental_predictions <- data.frame(rental_predictions);
'
        , @input_data_1 = @input_query
        , @input_data_1_name = N'rentals'
        , @output_data_1_name = N'rental_predictions'
        , @params = N'@model varbinary(max)'
        , @model = @model
    WITH RESULT SETS(("RentalCount_Predicted" FLOAT));
END;
GO

Köra modellen med nya data

Nu kan du använda den lagrade proceduren predict_rentalcount_new för att förutsäga antalet uthyrningar från nya data.

-- Use the predict_rentalcount_new stored procedure with the model name and a set of features to predict the rental count
EXECUTE dbo.predict_rentalcount_new @model_name = 'DTree'
    , @input_query = '
        SELECT CONVERT(INT,  3) AS Month
             , CONVERT(INT, 24) AS Day
             , CONVERT(INT,  4) AS WeekDay
             , CONVERT(INT,  1) AS Snow
             , CONVERT(INT,  1) AS Holiday
        ';
GO

Du bör se ett resultat som liknar följande.

RentalCount_Predicted
332.571428571429

Du har skapat, tränat och distribuerat en modell i en databas. Du använde sedan modellen i en lagrad procedur för att förutsäga värden baserat på nya data.

Rensa resurser

När du har använt databasen TutorialDB tar du bort den från servern.

Nästa steg

I del fyra i den här självstudieserien lärde du dig att:

  • Skapa en lagrad procedur som genererar maskininlärningsmodellen
  • Lagra modellen i en databastabell
  • Skapa en lagrad procedur som gör förutsägelser med hjälp av modellen
  • Köra modellen med nya data

Mer information om hur du använder R i Machine Learning Services finns i: