Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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.
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 ); GOSpara 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: