Sdílet prostřednictvím


Kurz Pythonu: Nasazení modelu lineární regrese pomocí strojového učení SQL

Platí pro: SQL Server 2017 (14.x) a novější verze Azure SQL Managed Instance

Ve čtvrté části této čtyřdílné série kurzů nasadíte model lineární regrese vyvinutý v Pythonu do databáze SQL Serveru pomocí služby Machine Learning Services nebo clusterů s velkými objemy dat.

Ve čtvrté části této čtyřdílné série kurzů nasadíte model lineární regrese vyvinutý v Pythonu do databáze SQL Serveru pomocí služby Machine Learning Services.

Ve čtvrté části této čtyřdílné série kurzů nasadíte model lineární regrese vyvinutý v Pythonu do databáze azure SQL Managed Instance pomocí služby Machine Learning Services.

V tomto článku se naučíte:

  • Vytvoření uložené procedury, která vygeneruje model strojového učení
  • Uložení modelu v tabulce databáze
  • Vytvoření uložené procedury, která vytváří předpovědi pomocí modelu
  • Spuštění modelu s novými daty

V první části jste zjistili, jak obnovit ukázkovou databázi.

V druhé části jste zjistili, jak načíst data z databáze do datového rámce Pythonu a připravit data v Pythonu.

Ve třetí části jste se dozvěděli, jak v Pythonu trénovat model lineární regrese strojového učení.

Požadavky

  • Část 4 tohoto kurzu předpokládá, že jste dokončili první část a její požadavky.

Vytvoření uložené procedury, která vygeneruje model

Teď pomocí skriptů Pythonu, které jste vytvořili, vytvořte uloženou proceduru generate_rental_py_model , která trénuje a generuje model lineární regrese pomocí LinearRegression ze scikit-learn.

Spuštěním následujícího příkazu T-SQL v Nástroji Azure Data Studio vytvořte uloženou proceduru pro trénování modelu.

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

Uložení modelu v tabulce databáze

Vytvořte tabulku v databázi TutorialDB a pak model uložte do tabulky.

  1. Spuštěním následujícího příkazu T-SQL v Nástroji Azure Data Studio vytvořte tabulku s názvem dbo.rental_py_models , která se používá k uložení modelu.

    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. Uložte model do tabulky jako binární objekt s názvem modelu 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);
    

Vytvoření uložené procedury, která vytváří předpovědi

  1. Vytvořte uloženou proceduru py_predict_rentalcount , která vytváří předpovědi pomocí natrénovaného modelu a sady nových dat. V nástroji Azure Data Studio spusťte níže uvedený jazyk T-SQL.

    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. Vytvořte tabulku pro ukládání předpovědí.

    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. Spusťte uloženou proceduru a predikujte počty pronájmů.

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

    Měly by se zobrazit výsledky podobné následujícímu.

    Výsledky předpovědi z uložené procedury

Úspěšně jste vytvořili, natrénovali a nasadili model. Pak jste tento model použili v uložené proceduře k predikci hodnot na základě nových dat.

Další kroky

Ve čtvrté části této série kurzů jste dokončili tyto kroky:

  • Vytvoření uložené procedury, která vygeneruje model strojového učení
  • Uložení modelu v tabulce databáze
  • Vytvoření uložené procedury, která vytváří předpovědi pomocí modelu
  • Spuštění modelu s novými daty

Další informace o používání Pythonu se strojovým učením SQL najdete tady: