Schnellstart: Erstellen und Bewerten eines Vorhersagemodells in Python mit SQL-Machine-LearningQuickstart: Create and score a predictive model in Python with SQL machine learning

Anwendungsbereich:Applies to: JaSQL Server 2017 (14.x)SQL Server 2017 (14.x)yesSQL Server 2017 (14.x)SQL Server 2017 (14.x) und höher JaVerwaltete Azure SQL-InstanzAzure SQL Managed InstanceYesVerwaltete Azure SQL-InstanzAzure SQL Managed InstanceAnwendungsbereich:Applies to: JaSQL Server 2017 (14.x)SQL Server 2017 (14.x)yesSQL Server 2017 (14.x)SQL Server 2017 (14.x) and later JaVerwaltete Azure SQL-InstanzAzure SQL Managed InstanceYesVerwaltete Azure SQL-InstanzAzure SQL Managed Instance

In dieser Schnellstartanleitung erfahren Sie, wie Sie ein Vorhersagemodell mithilfe von Python erstellen und trainieren.In this quickstart, you'll create and train a predictive model using Python. Sie lernen, wie Sie das Modell in Ihrer SQL Server-Instanz in einer Tabelle speichern und es anschließend verwenden, um Werte aus neuen Daten mithilfe von SQL Server Machine Learning Services oder in Big Data-Clustern vorherzusagen.You'll save the model to a table in your SQL Server instance, and then use the model to predict values from new data using SQL Server Machine Learning Services or on Big Data Clusters.

In dieser Schnellstartanleitung erfahren Sie, wie Sie ein Vorhersagemodell mithilfe von Python erstellen und trainieren.In this quickstart, you'll create and train a predictive model using Python. Sie lernen, wie Sie das Modell in Ihrer SQL Server-Instanz in einer Tabelle speichern und es anschließend verwenden, um Werte aus neuen Daten mithilfe von SQL Server Machine Learning Services vorherzusagen.You'll save the model to a table in your SQL Server instance, and then use the model to predict values from new data using SQL Server Machine Learning Services.

In dieser Schnellstartanleitung erfahren Sie, wie Sie ein Vorhersagemodell mithilfe von Python erstellen und trainieren.In this quickstart, you'll create and train a predictive model using Python. Außerdem lernen Sie, wie Sie das Modell in einer Tabelle in Ihrer Datenbank speichern und anschließend dazu verwenden, Werte aus neuen Daten mithilfe von Machine Learning Services in Azure SQL Managed Instance vorherzusagen.You'll save the model to a table in your database, and then use the model to predict values from new data using Azure SQL Managed Instance Machine Learning Services.

Hierzu erstellen Sie zwei gespeicherte Prozeduren, die in SQL ausgeführt werden.You'll create and execute two stored procedures running in SQL. Die erste verwendet das klassische Irisblüten-Datenset und generiert ein Naïve Bayes-Modell, um eine Irisart anhand der Blumenmerkmale vorherzusagen.The first one uses the classic Iris flower data set and generates a Naïve Bayes model to predict an Iris species based on flower characteristics. Die zweite Prozedur ist für die Bewertung vorgesehen: Sie ruft das in der ersten Prozedur generierte Modell auf, um mehrere Vorhersagen basierend auf neuen Daten auszugeben.The second procedure is for scoring - it calls the model generated in the first procedure to output a set of predictions based on new data. Durch das Platzieren von Python-Code in einer gespeicherten SQL-Prozedur sind Vorgänge in SQL enthalten. Sie sind wiederverwendbar und können von anderen gespeicherten Prozeduren und Clientanwendungen aufgerufen werden.By placing Python code in a SQL stored procedure, operations are contained in SQL, are reusable, and can be called by other stored procedures and client applications.

In diesem Schnellstart lernen Sie Folgendes:By completing this quickstart, you'll learn:

  • Einbetten von Python-Code in eine gespeicherte ProzedurHow to embed Python code in a stored procedure
  • Übergeben von Eingaben an Ihren Code mithilfe von Eingaben in der gespeicherten ProzedurHow to pass inputs to your code through inputs on the stored procedure
  • Verwenden von gespeicherten Prozeduren zum Operationalisieren von ModellenHow stored procedures are used to operationalize models

VoraussetzungenPrerequisites

Zum Durchführen dieser Schnellstartanleitung benötigen Sie folgende Voraussetzungen.You need the following prerequisites to run this quickstart.

  • Ein Tool zum Ausführen von SQL-Abfragen, die Python-Skripts enthalten.A tool for running SQL queries that contain Python scripts. In dieser Schnellstartanleitung wird Azure Data Studio verwendet.This quickstart uses Azure Data Studio.

  • Für Beispiele in dieser Übung wird das Iris-Beispieldataset verwendet.The sample data used in this exercise is the Iris sample data. Befolgen Sie die Anweisungen in den Iris-Demodaten, um die Beispieldatenbank irissql zu erstellen.Follow the instructions in Iris demo data to create the sample database irissql.

Erstellen einer gespeicherten Prozedur zum Generieren von ModellenCreate a stored procedure that generates models

In diesem Schritt erstellen Sie eine gespeicherte Prozedur, die ein Modell zur Vorhersage von Ergebnissen generiert.In this step, you'll create a stored procedure that generates a model for predicting outcomes.

  1. Öffnen Sie Azure Data Studio, stellen Sie eine Verbindung mit Ihrer SQL-Instanz her, und öffnen Sie ein neues Abfragefenster.Open Azure Data Studio, connect to your SQL instance, and open a new query window.

  2. Stellen Sie eine Verbindung mit der irissql-Datenbank her.Connect to the irissql database.

    USE irissql
    GO
    
  3. Kopieren Sie den folgenden Code, um eine neue gespeicherte Prozedur zu erstellen.Copy in the following code to create a new stored procedure.

    Bei der Ausführung ruft diese Prozedur sp_execute_external_script auf, um eine Python-Sitzung zu starten.When executed, this procedure calls sp_execute_external_script to start a Python session.

    Eingaben, die vom Python-Code benötigt werden, werden als Eingabeparameter in dieser gespeicherten Prozedur übergeben.Inputs needed by your Python code are passed as input parameters on this stored procedure. Als Ergebnis wird ein trainiertes Modell ausgegeben, das auf der Python-Bibliothek scikit-learn für den Machine Learning-Algorithmus basiert.Output will be a trained model, based on the Python scikit-learn library for the machine learning algorithm.

    In diesem Code wird pickle verwendet, um das Modell zu serialisieren.This code uses pickle to serialize the model. Das Modell wird mit den Daten aus den Spalten 0 bis 4 der Tabelle iris_data trainiert.The model will be trained using data from columns 0 through 4 from the iris_data table.

    Die Parameter, die Sie im zweiten Teil der Prozedur sehen, formulieren Dateneingaben und Modellausgaben.The parameters you see in the second part of the procedure articulate data inputs and model outputs. Sie möchten, dass der Python-Code weitestgehend in einer gespeicherten Prozedur ausgeführt wird, die klar definierte Ein- und Ausgaben hat, die den zur Laufzeit übergebenen Ein- und Ausgaben der gespeicherten Prozeduren zugeordnet sind.As much as possible, you want the Python code running in a stored procedure to have clearly defined inputs and outputs that map to stored procedure inputs and outputs passed in at run time.

    CREATE PROCEDURE generate_iris_model (@trained_model VARBINARY(max) OUTPUT)
    AS
    BEGIN
        EXECUTE sp_execute_external_script @language = N'Python'
            , @script = N'
    import pickle
    from sklearn.naive_bayes import GaussianNB
    GNB = GaussianNB()
    trained_model = pickle.dumps(GNB.fit(iris_data[["Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width"]], iris_data[["SpeciesId"]].values.ravel()))
    '
            , @input_data_1 = N'select "Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width", "SpeciesId" from iris_data'
            , @input_data_1_name = N'iris_data'
            , @params = N'@trained_model varbinary(max) OUTPUT'
            , @trained_model = @trained_model OUTPUT;
    END;
    GO
    
  4. Prüfen Sie, ob die gespeicherte Prozedur vorhanden ist.Verify the stored procedure exists.

    Wenn das T-SQL-Skript aus dem vorherigen Schritt fehlerfrei ausgeführt wurde, wird eine neue gespeicherte Prozedur namens generate_iris_model erstellt und der Datenbank irissql hinzugefügt.If the T-SQL script from the previous step ran without error, a new stored procedure called generate_iris_model is created and added to the irissql database. Gespeicherte Prozeduren finden Sie im Objekt-Explorer von Azure Data Studio unter Programmability.You can find stored procedures in the Azure Data Studio Object Explorer, under Programmability.

Ausführen der Prozedur zum Erstellen und Trainieren von ModellenExecute the procedure to create and train models

In diesem Schritt führen Sie den eingebetteten Code mithilfe der Prozedur aus und erstellen ein trainiertes und serialisiertes Modell als Ausgabe.In this step, you execute the procedure to run the embedded code, creating a trained and serialized model as an output.

Modelle, die zur Wiederverwendung in Ihrer Datenbank gespeichert werden, werden als Bytestream serialisiert und in einer „VARBINARY(MAX)“-Spalte einer Datenbanktabelle gespeichert.Models that are stored for reuse in your database are serialized as a byte stream and stored in a VARBINARY(MAX) column in a database table. Sobald das Modell erstellt, trainiert, serialisiert und in einer Datenbank gespeichert ist, kann es durch andere Prozeduren oder durch die PREDICT-T-SQL-Funktion zur Bewertung von Workloads aufgerufen werden.Once the model is created, trained, serialized, and saved to a database, it can be called by other procedures or by the PREDICT T-SQL function in scoring workloads.

  1. Führen Sie das folgende Skript aus, um die Prozedur auszuführen.Run the following script to execute the procedure. Die spezifische Anweisung zum Ausführen einer gespeicherten Prozedur finden Sie in der vierten Zeile: EXECUTE.The specific statement for executing a stored procedure is EXECUTE on the fourth line.

    Dieses spezielle Skript löscht ein bestehendes Modell mit dem gleichen Namen („Naïve Bayes“), um Platz für neue zu schaffen, die durch erneutes Ausführen derselben Prozedur erstellt wurden.This particular script deletes an existing model of the same name ("Naive Bayes") to make room for new ones created by rerunning the same procedure. Ohne das Löschen von Modellen tritt ein Fehler auf, wenn das Objekt bereits vorhanden ist.Without model deletion, an error occurs stating the object already exists. Das Modell wird in einer Tabelle iris_models gespeichert, die bei der Erstellung der irissql-Datenbank bereitgestellt wurde.The model is stored in a table called iris_models, provisioned when you created the irissql database.

    DECLARE @model varbinary(max);
    DECLARE @new_model_name varchar(50)
    SET @new_model_name = 'Naive Bayes'
    EXECUTE generate_iris_model @model OUTPUT;
    DELETE iris_models WHERE model_name = @new_model_name;
    INSERT INTO iris_models (model_name, model) values(@new_model_name, @model);
    GO
    
  2. Stellen Sie sicher, dass das Modell eingefügt wurde.Verify that the model was inserted.

    SELECT * FROM dbo.iris_models
    

    ErgebnisseResults

    model_namemodel_name modelmodel
    Naive BayesNaive Bayes 0x800363736B6C6561726E2E6E616976655F62617965730A...0x800363736B6C6561726E2E6E616976655F62617965730A...

Erstellen und Ausführen einer gespeicherten Prozedur zum Generieren von VorhersagenCreate and execute a stored procedure for generating predictions

Nachdem Sie nun ein Modell erstellt, trainiert und gespeichert haben, fahren Sie mit dem nächsten Schritt fort: dem Erstellen einer gespeicherten Prozedur, die Vorhersagen generiert.Now that you have created, trained, and saved a model, move on to the next step: creating a stored procedure that generates predictions. Hierzu rufen Sie sp_execute_external_script auf, um ein Python-Skript auszuführen, das das serialisierte Modell lädt und ihm neue Dateneingaben zur Bewertung gibt.You'll do this by calling sp_execute_external_script to run a Python script that loads the serialized model and gives it new data inputs to score.

  1. Führen Sie den folgenden Code aus, um die gespeicherte Prozedur zu erstellen, die die Bewertung ausführt.Run the following code to create the stored procedure that performs scoring. Zur Laufzeit lädt diese Prozedur ein Binärmodell, verwendet die Spalten [1,2,3,4] als Eingaben und gibt die Spalten [0,5,6] als Ausgabe an.At run time, this procedure will load a binary model, use columns [1,2,3,4] as inputs, and specify columns [0,5,6] as output.

    CREATE PROCEDURE predict_species (@model VARCHAR(100))
    AS
    BEGIN
        DECLARE @nb_model VARBINARY(max) = (
                SELECT model
                FROM iris_models
                WHERE model_name = @model
                );
    
        EXECUTE sp_execute_external_script @language = N'Python'
            , @script = N'
    import pickle
    irismodel = pickle.loads(nb_model)
    species_pred = irismodel.predict(iris_data[["Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width"]])
    iris_data["PredictedSpecies"] = species_pred
    OutputDataSet = iris_data[["id","SpeciesId","PredictedSpecies"]] 
    print(OutputDataSet)
    '
            , @input_data_1 = N'select id, "Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width", "SpeciesId" from iris_data'
            , @input_data_1_name = N'iris_data'
            , @params = N'@nb_model varbinary(max)'
            , @nb_model = @nb_model
        WITH RESULT SETS((
                    "id" INT
                  , "SpeciesId" INT
                  , "SpeciesId.Predicted" INT
                    ));
    END;
    GO
    
  2. Führen Sie die gespeicherte Prozedur aus, und geben Sie den Modellnamen „Naïve Bayes“ an, damit die Prozedur das richtige Modell verwendet.Execute the stored procedure, giving the model name "Naive Bayes" so that the procedure knows which model to use.

    EXECUTE predict_species 'Naive Bayes';
    GO
    

    Sobald Sie die gespeicherte Prozedur ausgeführt haben, wird ein Python-data.frame-Ergebnis zurückgegeben.When you run the stored procedure, it returns a Python data.frame. Diese T-SQL-Zeile gibt das Schema für die zurückgegebenen Ergebnisse an: WITH RESULT SETS ( ("id" int, "SpeciesId" int, "SpeciesId.Predicted" int));.This line of T-SQL specifies the schema for the returned results: WITH RESULT SETS ( ("id" int, "SpeciesId" int, "SpeciesId.Predicted" int));. Sie können die Ergebnisse in eine neue Tabelle einfügen oder an eine Anwendung zurückgeben.You can insert the results into a new table, or return them to an application.

    Ergebnisse aus der Ausführung einer gespeicherten Prozedur

    Als Ergebnisse werden 150 Vorhersagen über Arten, die florale Merkmale als Eingabe verwenden.The results are 150 predictions about species using floral characteristics as inputs. Bei den meisten Beobachtungen stimmen die vorhergesagten Arten mit den tatsächlichen Arten überein.For the majority of the observations, the predicted species matches the actual species.

    In diesem Beispiel wurde die Verwendung des Iris-Datasets in Python sowohl für das Training als auch für die Bewertung vereinfacht.This example has been made simple by using the Python iris dataset for both training and scoring. Bei einem typischen Ansatz würde eine SQL-Abfrage durchgeführt, um die neuen Daten abzurufen und diese als InputDataSet an Python zu übergeben.A more typical approach would involve running a SQL query to get the new data, and passing that into Python as InputDataSet.

ZusammenfassungConclusion

In dieser Übung haben Sie gelernt, wie Sie gespeicherte Prozeduren erstellen, die für verschiedene Tasks vorgesehen sind. Dabei wurde von jeder gespeicherten Prozedur die gespeicherte Systemprozedur sp_execute_external_script verwendet, um einen Python-Prozess zu starten.In this exercise, you learned how to create stored procedures dedicated to different tasks, where each stored procedure used the system stored procedure sp_execute_external_script to start a Python process. Eingaben für den Python-Prozess werden an sp_execute_external als Parameter übergeben.Inputs to the Python process are passed to sp_execute_external as parameters. Sowohl das Python-Skript selbst als auch Datenvariablen in einer Datenbank werden als Eingaben übergeben.Both the Python script itself and data variables in a database are passed as inputs.

Grundsätzlich sollten Sie nur Azure Data Studio mit hoch entwickeltem Python-Code verwenden, oder aber einfachen Python-Code, der zeilenbasierte Ausgaben zurückgibt.Generally, you should only plan on using Azure Data Studio with polished Python code, or simple Python code that returns row-based output. Als Tool unterstützt Azure Data Studio Abfragesprachen wie T-SQL und gibt flache Rowsets zurück.As a tool, Azure Data Studio supports query languages like T-SQL and returns flattened rowsets. Wenn Ihr Code eine visuelle Ausgabe wie ein Punktdiagramm oder Histogramm erzeugt, benötigen Sie ein eigenständiges Tool oder eine Endbenutzeranwendung, die das Bild außerhalb der gespeicherten Prozedur darstellen kann.If your code generates visual output like a scatterplot or histogram, you need a separate tool or end-user application that can render the image outside of the stored procedure.

Für einige Python-Entwickler, die es gewohnt sind, allumfassende Skripts zu schreiben, die eine Reihe von Vorgängen ausführen, mag die Organisation von Tasks in separate Prozeduren unnötig erscheinen.For some Python developers who are used to writing all-inclusive script handling a range of operations, organizing tasks into separate procedures might seem unnecessary. Training und Bewertung haben jedoch unterschiedliche Anwendungsfälle.But training and scoring have different use cases. Indem Sie diese trennen, können Sie jede Task in einem anderen Zeitplan und in Bereichsberechtigungen für jeden Vorgang platzieren.By separating them, you can put each task on a different schedule and scope permissions to each operation.

Letztendlich ist es von Vorteil, dass die Prozesse über Parameter geändert werden können.A final benefit is that the processes can be modified using parameters. In dieser Übung wurde der Python-Code, mit dem das Modell erstellt wurde (in diesem Beispiel „Naïve Bayes“ genannt), als Eingabe für eine zweite gespeicherte Prozedur übergeben, die das Modell in einem Bewertungsprozess aufruft.In this exercise, Python code that created the model (named "Naive Bayes" in this example) was passed as an input to a second stored procedure calling the model in a scoring process. Für diese Übung wird nur ein Modell verwendet, aber Sie können sich vorstellen, wie dieses Skript bei der Parametrisierung des Modells in einer Bewertungstask sinnvoller eingesetzt werden kann.This exercise only uses one model, but you can imagine how parameterizing the model in a scoring task would make that script more useful.

Nächste SchritteNext steps

Weitere Informationen zu Tutorials für Python mit SQL Machine Learning finden Sie unter:For more information on tutorials for Python with SQL machine learning, see: