Aracılığıyla paylaş


Öğretici: SQL makine öğrenmesi ile R'de tahmine dayalı model dağıtma

Şunlar için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümleri Azure SQL Yönetilen Örnek

Bu dört bölümden oluşan öğretici serisinin dördüncü bölümünde, R'de geliştirilen bir makine öğrenmesi modelini SQL Server Machine Learning Services'e veya Büyük Veri Kümelerine dağıtacaksınız.

Bu dört bölümden oluşan öğretici serisinin dördüncü bölümünde, R'de geliştirilen bir makine öğrenmesi modelini Machine Learning Services kullanarak SQL Server'a dağıtacaksınız.

Bu dört bölümden oluşan öğretici serisinin dördüncü bölümünde, R'de geliştirilen bir makine öğrenmesi modelini SQL Server R Services kullanarak SQL Server'a dağıtacaksınız.

Bu dört bölümden oluşan öğretici serisinin dördüncü bölümünde, Machine Learning Services kullanarak R'de geliştirilen bir makine öğrenmesi modelini Azure SQL Yönetilen Örneği'ne dağıtacaksınız.

Bu makalede şunları nasıl yapacağınızı öğreneceksiniz:

  • Makine öğrenmesi modelini oluşturan saklı yordam oluşturma
  • Modeli veritabanı tablosunda depolama
  • Modeli kullanarak tahmin yapan bir saklı yordam oluşturma
  • Modeli yeni verilerle yürütme

Birinci bölümde örnek veritabanını geri yüklemeyi öğrendinsiniz.

İkinci bölümde, bir örnek veritabanını içeri aktarmayı ve ardından verileri R'de tahmine dayalı bir modeli eğitmek için kullanılacak şekilde hazırlamayı öğrendinsiniz.

Üçüncü bölümde, R'de birden çok makine öğrenmesi modeli oluşturmayı ve eğitmeyi ve ardından en doğru olanı seçmeyi öğrendiniz.

Önkoşullar

Bu öğreticinin dördüncü bölümünde birinci bölümün önkoşullarını yerine getirdiğiniz ve ikinci ve üçüncübölümdeki adımları tamamladığınız varsayılır.

Modeli üreten saklı yordam oluşturun

Bu öğretici serisinin üçüncü bölümünde karar ağacı (dtree) modelinin en doğru olduğuna karar verdiniz. Şimdi, geliştirdiğiniz R betiklerini kullanarak R paketinden rpart ile dtree modelini eğiten ve oluşturan bir saklı prosedür (generate_rental_model) oluşturun.

Azure Data Studio'da aşağıdaki komutları çalıştırın.

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

Modeli veritabanı tablosunda depolama

TutorialDB veritabanında bir tablo oluşturun ve modeli tabloya kaydedin.

  1. Modeli depolamak için bir tablo (rental_models) oluşturun.

    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. Modeli tabloya "DTree" model adıyla ikili nesne olarak kaydedin.

    -- 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;
    

Tahminler yapan bir saklı yordam oluşturun

"Eğitilmiş modeli ve bir dizi yeni veriyi kullanarak tahmin yapan bir saklı yordam (predict_rentalcount_new) oluşturun."

-- 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

Modeli yeni verilerle yürütme

Artık yeni verilerden kiralama sayısını tahmin etmek için saklı yordamı predict_rentalcount_new kullanabilirsiniz.

-- 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

Aşağıdakine benzer bir sonuç görmeniz gerekir.

RentalCount_Predicted
332.571428571429

Veritabanında bir modeli başarıyla oluşturdunuz, eğittiniz ve dağıttınız. Ardından bu modeli, yeni verilere göre değerleri tahmin etmek için saklı bir yordamda kullandınız.

Kaynakları temizle

TutorialDB veritabanını kullanmayı bitirdiğinizde sunucunuzdan silin.

Sonraki Adımlar

Bu öğretici serisinin dördüncü bölümünde şunların nasıl yapılacağını öğrendiniz:

  • Makine öğrenmesi modelini oluşturan saklı yordam oluşturun
  • Modeli veritabanı tablosunda depolama
  • Modeli kullanarak tahminde bulunan bir saklı yordam oluşturun
  • Modeli yeni verilerle yürütme

Machine Learning Services'de R kullanma hakkında daha fazla bilgi edinmek için bkz: