Aracılığıyla paylaş


Python Öğreticisi: SQL makine öğrenmesi ile doğrusal regresyon modeli dağıtma

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

Bu dört bölümden oluşan öğretici serisinin dördüncü bölümünde, Machine Learning Services veya Büyük Veri Kümeleri kullanarak Python'da geliştirilen bir doğrusal regresyon modelini SQL Server veritabanına 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 Python'da geliştirilen bir doğrusal regresyon modelini SQL Server veritabanına 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 Python'da geliştirilen bir doğrusal regresyon modelini Azure SQL Yönetilen Örneği veritabanına dağıtacaksınız.

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

  • Makine öğrenmesi modeli oluşturan bir saklı yordam oluşturun
  • Modeli veritabanı tablosunda depolama
  • Tahmin yapmak için modeli kullanan bir saklı yordam oluşturun.
  • Modeli yeni verilerle yürütme

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

İkinci bölümde, veritabanındaki verileri Python veri çerçevesine yüklemeyi ve Verileri Python'da hazırlamayı öğrendinsiniz.

Üçüncü bölümde Python'da doğrusal regresyon makine öğrenmesi modelini eğitmeyi öğrendinsiniz.

Önkoşullar

  • Bu öğreticinin dördüncü bölümü, birinci bölümü ve o bölümün önkoşullarını tamamladığınızı varsayar.

Modeli oluşturacak saklı bir yordam oluşturun.

Şimdi, geliştirdiğiniz Python betiklerini kullanarak, scikit-learn'den LinearRegression kullanarak doğrusal regresyon modelini eğiten ve oluşturan bir saklı yordam generate_rental_py_model oluşturun.

Modeli eğitmek için saklı yordamı oluşturmak amacıyla aşağıdaki T-SQL deyimini Azure Data Studio'da çalıştırın.

-- Stored procedure that trains and generates a Python model using the rental_data and a linear regression algorithm
DROP PROCEDURE IF EXISTS generate_rental_py_model;
go
CREATE PROCEDURE generate_rental_py_model (@trained_model varbinary(max) OUTPUT)
AS
BEGIN
    EXECUTE sp_execute_external_script
      @language = N'Python'
    , @script = N'
from sklearn.linear_model import LinearRegression
import pickle

df = rental_train_data

# Get all the columns from the dataframe.
columns = df.columns.tolist()

# Store the variable well be predicting on.
target = "RentalCount"

# Initialize the model class.
lin_model = LinearRegression()

# Fit the model to the training data.
lin_model.fit(df[columns], df[target])

# Before saving the model to the DB table, convert it to a binary object
trained_model = pickle.dumps(lin_model)'

, @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 kullanılan dbo.rental_py_models adlı bir tablo oluşturmak için Azure Data Studio'da aşağıdaki T-SQL deyimini çalıştırın.

    USE TutorialDB;
    DROP TABLE IF EXISTS dbo.rental_py_models;
    GO
    CREATE TABLE dbo.rental_py_models (
        model_name VARCHAR(30) NOT NULL DEFAULT('default model') PRIMARY KEY,
        model VARBINARY(MAX) NOT NULL
    );
    GO
    
  2. Modeli tabloya ikili nesne olarak kaydedin ve model adı linear_model.

    DECLARE @model VARBINARY(MAX);
    EXECUTE generate_rental_py_model @model OUTPUT;
    
    INSERT INTO rental_py_models (model_name, model) VALUES('linear_model', @model);
    

Tahminler yapan bir saklı yordam oluşturun

  1. Eğitilen modeli ve bir dizi yeni veriyi kullanarak tahmin yapan bir saklı işlem py_predict_rentalcount oluşturun. Aşağıdaki T-SQL'i Azure Data Studio'da çalıştırın.

    DROP PROCEDURE IF EXISTS py_predict_rentalcount;
    GO
    CREATE PROCEDURE py_predict_rentalcount (@model varchar(100))
    AS
    BEGIN
        DECLARE @py_model varbinary(max) = (select model from rental_py_models where model_name = @model);
    
        EXECUTE sp_execute_external_script
                    @language = N'Python',
                    @script = N'
    
    # Import the scikit-learn function to compute error.
    from sklearn.metrics import mean_squared_error
    import pickle
    import pandas
    
    rental_model = pickle.loads(py_model)
    
    df = rental_score_data
    
    # Get all the columns from the dataframe.
    columns = df.columns.tolist()
    
    # Variable you will be predicting on.
    target = "RentalCount"
    
    # Generate the predictions for the test set.
    lin_predictions = rental_model.predict(df[columns])
    print(lin_predictions)
    
    # Compute error between the test predictions and the actual values.
    lin_mse = mean_squared_error(lin_predictions, df[target])
    #print(lin_mse)
    
    predictions_df = pandas.DataFrame(lin_predictions)
    
    OutputDataSet = pandas.concat([predictions_df, df["RentalCount"], df["Month"], df["Day"], df["WeekDay"], df["Snow"], df["Holiday"], df["Year"]], axis=1)
    '
    , @input_data_1 = N'Select "RentalCount", "Year" ,"Month", "Day", "WeekDay", "Snow", "Holiday"  from rental_data where Year = 2015'
    , @input_data_1_name = N'rental_score_data'
    , @params = N'@py_model varbinary(max)'
    , @py_model = @py_model
    with result sets (("RentalCount_Predicted" float, "RentalCount" float, "Month" float,"Day" float,"WeekDay" float,"Snow" float,"Holiday" float, "Year" float));
    
    END;
    GO
    
  2. Tahminleri depolamak için bir tablo oluşturun.

    DROP TABLE IF EXISTS [dbo].[py_rental_predictions];
    GO
    
    CREATE TABLE [dbo].[py_rental_predictions](
     [RentalCount_Predicted] [int] NULL,
     [RentalCount_Actual] [int] NULL,
     [Month] [int] NULL,
     [Day] [int] NULL,
     [WeekDay] [int] NULL,
     [Snow] [int] NULL,
     [Holiday] [int] NULL,
     [Year] [int] NULL
    ) ON [PRIMARY]
    GO
    
  3. Kiralama sayılarını tahmin etmek için saklı yordamını yürütün

    --Insert the results of the predictions for test set into a table
    INSERT INTO py_rental_predictions
    EXEC py_predict_rentalcount 'linear_model';
    
    -- Select contents of the table
    SELECT * FROM py_rental_predictions;
    

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

    Saklı yordamdan tahmin sonuçları

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 amacıyla saklı bir prosedürde kullandınız.

Sonraki Adımlar

Bu öğretici serisinin dördüncü bölümünde şu adımları tamamladınız:

  • Makine öğrenmesi modelini oluşturacak bir saklı yordam oluşturun
  • Modeli veritabanı tablosunda depolama
  • Bir model kullanarak tahminlerde bulunan bir saklı yordam oluştur.
  • Modeli yeni verilerle yürütme

PYTHON'ı SQL makine öğrenmesi ile kullanma hakkında daha fazla bilgi edinmek için bkz: