[In-Database Python Analysis-Lernprogramm mit SQL Server 2017] Schritt 6: Verwenden des Modells

Vom Anfang des Tutorials

In-Database Python-Analyse für SQL-Entwickler

Vorheriger Schritt

Schritt 5: Trainieren und Speichern eines Modells mit T-SQL

Schritt 6: Verwenden Sie das Modell

In diesem Schritt lernen Sie, wie Sie das im vorherigen Schritt trainierte Modell verwenden. "Verwenden" bedeutet hier "Bereitstellen des Modells für die Bewertung in der Produktion". Dies ist einfach zu erweitern, da der Python-Code in der gespeicherten Prozedur enthalten ist. Rufen Sie einfach die gespeicherte Prozedur auf, um neue Beobachtungsvorhersagen aus Ihrer Anwendung zu treffen.

Es gibt zwei Möglichkeiten, das Python-Modell von einer gespeicherten Prozedur aus aufzurufen:

Bewertung mit dem Scikit-Learn-Modell

Die gespeicherte Prozedur "PredictTipSciKitPy" verwendet das Scikit-Learn-Modell.

Die gespeicherte Prozedur "PredictTipSciKitPy" wird in SQL Server in Schritt 2 definiert: Importieren von Daten mit PowerShell in SQL Server (http://qiita.com/qio9o9/items/98df36982f1fbecdf5e7).

  1. Erweitern Sie im Objekt-Explorer von Management Studio die Option Programmierung> Gespeicherte Prozeduren.

  2. Klicken Sie mit der rechten Maustaste auf "PredictTipSciKitPy" und wählen Sie "Ändern", um das Transact-SQL-Skript in einem neuen Abfragefenster zu öffnen.

    DROP PROCEDURE IF EXISTS PredictTipSciKitPy;
    GO
    
    CREATE PROCEDURE [dbo].[PredictTipSciKitPy](@model varchar(50), @inquery nvarchar(max))
    AS
    BEGIN
      DECLARE @lmodel2 varbinary(max) = (select model from nyc_taxi_models where name = @model);
    
      EXEC sp_execute_external_script 
    	@language = N'Python',
        @script = N'
    import pickle
    import numpy
    # import pandas
    from sklearn import metrics
    
    mod = pickle.loads(lmodel2)
    
    X = InputDataSet[["passenger_count", "trip_distance", "trip_time_in_secs", "direct_distance"]]
    y = numpy.ravel(InputDataSet[["tipped"]])
    
    prob_array = mod.predict_proba(X)
    prob_list = [item[1] for item in prob_array]
    
    prob_array = numpy.asarray(prob_list)
    fpr, tpr, thresholds = metrics.roc_curve(y, prob_array)
    auc_result = metrics.auc(fpr, tpr)
    print("AUC on testing data is:", auc_result)
    
    OutputDataSet = pandas.DataFrame(data=prob_list, columns=["predictions"])
    ',	
    	@input_data_1 = @inquery,
    	@input_data_1_name = N'InputDataSet',
    	@params = N'@lmodel2 varbinary(max)',
    	@lmodel2 = @lmodel2
      WITH RESULT SETS ((Score float));
    
    END
    GO
    

Bewertung mit dem Revoscalepy-Modell

Die gespeicherte Prozedur "PredictTipRxPy" verwendet ein Modell, das mit der revoscalepy-Bibliothek erstellt wurde. Dies funktioniert ähnlich wie die Prozedur "PredictTipSciKitPy", jedoch mit einigen Änderungen an der Revoscalepy-Funktion.

Die gespeicherte Prozedur "PredictTipRxPy" wird in SQL Server durch Schritt 2 definiert: Importieren von Daten in SQL Server mithilfe von PowerShell (http://qiita.com/qio9o9/items/98df36982f1fbecdf5e7).

  1. Erweitern Sie im Objekt-Explorer von Management Studio die Option Programmierung> Gespeicherte Prozeduren.

  2. Klicken Sie mit der rechten Maustaste auf "PredictTipRxPy" und wählen Sie "Ändern", um das Transact-SQL-Skript in einem neuen Abfragefenster zu öffnen.

    DROP PROCEDURE IF EXISTS PredictTipRxPy;
    GO
    
    CREATE PROCEDURE [dbo].[PredictTipRxPy](@model varchar(50), @inquery nvarchar(max))
    AS
    BEGIN
      DECLARE @lmodel2 varbinary(max) = (select model from nyc_taxi_models where name = @model);
    
      EXEC sp_execute_external_script 
    	@language = N'Python',
        @script = N'
    import pickle
    import numpy
    # import pandas
    from sklearn import metrics
    from revoscalepy.functions.RxPredict import rx_predict
    
    mod = pickle.loads(lmodel2)
    X = InputDataSet[["passenger_count", "trip_distance", "trip_time_in_secs", "direct_distance"]]
    y = numpy.ravel(InputDataSet[["tipped"]])
    
    prob_array = rx_predict(mod, X)
    prob_list = prob_array["tipped_Pred"].values
    
    prob_array = numpy.asarray(prob_list)
    fpr, tpr, thresholds = metrics.roc_curve(y, prob_array)
    auc_result = metrics.auc(fpr, tpr)
    print("AUC on testing data is:", auc_result)
    OutputDataSet = pandas.DataFrame(data=prob_list, columns=["predictions"])
    ',	
    	@input_data_1 = @inquery,
    	@input_data_1_name = N'InputDataSet',
    	@params = N'@lmodel2 varbinary(max)',
    	@lmodel2 = @lmodel2
      WITH RESULT SETS ((Score float));
    
    END
    GO
    

Führen Sie eine Chargenbewertung durch

Die gespeicherten Prozeduren "PredictTipSciKitPy" und "PredictTipRxPy" erfordern zwei Eingabeparameter.

--Abfrage zum Extrahieren der zu bewertenden Daten

In diesem Abschnitt erfahren Sie, wie Sie diese Argumente an eine gespeicherte Prozedur übergeben, um sowohl das Modell als auch die für die Bewertung verwendeten Daten einfach zu ändern.

  1. Definieren Sie die Eingabedaten und rufen Sie die gespeicherte Prozedur zur Bewertung wie folgt auf: In diesem Beispiel wird die gespeicherte Prozedur "PredictTipSciKitPy" für die Bewertung verwendet und der Modellname und die Abfragezeichenfolge übergeben.

    DECLARE @query_string nvarchar(max) -- Specify input query
      SET @query_string='
      select tipped, fare_amount, passenger_count, trip_time_in_secs, trip_distance,
      dbo.fnCalculateDistance(pickup_latitude, pickup_longitude,  dropoff_latitude, dropoff_longitude) as direct_distance
      from nyctaxi_sample_testing'
    EXEC [dbo].[PredictTipSciKitPy] 'SciKit_model', @query_string;
    

    sqldev-python-step6-1-gho9o9.png

    sqldev-python-step6-2-gho9o9.png

Die gespeicherte Prozedur gibt einen vorhergesagten Wert der Wahrscheinlichkeit des Empfangs eines Chips für jeden Operationsdatensatz zurück, der als Teil einer Eingabeabfrage übergeben wird. Die vorhergesagten Werte werden im Ergebnisbereich von Management Studio angezeigt. Zusätzlich wird die Genauigkeitsmetrik "AUC (Bereich unter der Kurve)" im Nachrichtenbereich ausgegeben.

  1. Um das Revoscalepy-Modell für die Bewertung zu verwenden, rufen Sie die gespeicherte Prozedur PredictTipRxPy auf.

    DECLARE @query_string nvarchar(max) -- Specify input query
      SET @query_string='
      select tipped, fare_amount, passenger_count, trip_time_in_secs, trip_distance,
      dbo.fnCalculateDistance(pickup_latitude, pickup_longitude,  dropoff_latitude, dropoff_longitude) as direct_distance
      from nyctaxi_sample_testing'
    EXEC [dbo].[PredictTipRxPy] 'revoscalepy_model', @query_string;
    

    sqldev-python-step6-3-gho9o9.png

    sqldev-python-step6-4-gho9o9.png

Individuelle Wertung durchführen

In einigen Fällen möchten Sie anstelle der Stapelbewertung einen einzelnen Fall übergeben und ein einzelnes Ergebnis basierend auf diesem Wert erhalten. Konfigurieren Sie beispielsweise ein Excel-Arbeitsblatt, eine Webanwendung oder einen Reporting Services-Bericht so, dass eine gespeicherte Prozedur basierend auf Benutzereingaben aufgerufen wird.

In diesem Abschnitt erfahren Sie, wie Sie die gespeicherten Prozeduren "PredictTipSingleModeSciKitPy" und "PredictTipSingleModeRxPy" aufrufen, um eine einzelne Vorhersage zu erstellen.

Die gespeicherten Prozeduren "PredictTipSingleModeSciKitPy" und "PredictTipSingleModeRxPy" werden in SQL Server über Schritt 2: Daten mit PowerShell in SQL Server importieren definiert.

  1. Erweitern Sie im Objekt-Explorer von Management Studio die Option Programmierung> Gespeicherte Prozeduren.

  2. Klicken Sie mit der rechten Maustaste auf "PredictTipSingleModeSciKitPy" oder "PredictTipSingleModeRxPy" und wählen Sie "Ändern", um das Transact-SQL-Skript in einem neuen Abfragefenster zu öffnen.

Diese gespeicherten Prozeduren verwenden die Modelle scicit-learn und revoscalepy und führen die Bewertung wie folgt durch:

Unten finden Sie die gespeicherte Prozedur "PredictTipSingleModeSciKitPy", die das Scoring mit dem Scikit-Learn-Modell durchführt.

```SQL:PredictTipSingleModeSciKitPy
CREATE PROCEDURE [dbo].[PredictTipSingleModeSciKitPy](@model varchar(50), @passenger_count int = 0,
@trip_distance float = 0,
@trip_time_in_secs int = 0,
@pickup_latitude float = 0,
@pickup_longitude float = 0,
@dropoff_latitude float = 0,
@dropoff_longitude float = 0)
AS
BEGIN
    DECLARE @inquery nvarchar(max) = N'
    SELECT * FROM [dbo].[fnEngineerFeatures]( 
    @passenger_count,
    @trip_distance,
    @trip_time_in_secs,
    @pickup_latitude,
    @pickup_longitude,
    @dropoff_latitude,
    @dropoff_longitude)
    '
    DECLARE @lmodel2 varbinary(max) = (select model from nyc_taxi_models where name = @model);
    EXEC sp_execute_external_script 
        @language = N'Python',
        @script = N'
import pickle
import numpy
# import pandas

# Load model and unserialize
mod = pickle.loads(model)

# Get features for scoring from input data
X = InputDataSet[["passenger_count", "trip_distance", "trip_time_in_secs", "direct_distance"]]

# Score data to get tip prediction probability as a list (of float)
prob = [mod.predict_proba(X)[0][1]]

# Create output data frame
OutputDataSet = pandas.DataFrame(data=prob, columns=["predictions"])
',
    @input_data_1 = @inquery,
    @params = N'@model varbinary(max),@passenger_count int,@trip_distance float,
        @trip_time_in_secs int ,
        @pickup_latitude float ,
        @pickup_longitude float ,
        @dropoff_latitude float ,
        @dropoff_longitude float',
    @model = @lmodel2,
        @passenger_count =@passenger_count ,
        @trip_distance=@trip_distance,
        @trip_time_in_secs=@trip_time_in_secs,
        @pickup_latitude=@pickup_latitude,
        @pickup_longitude=@pickup_longitude,
        @dropoff_latitude=@dropoff_latitude,
        @dropoff_longitude=@dropoff_longitude
    WITH RESULT SETS ((Score float));
END
GO
```

Unten finden Sie die gespeicherte Prozedur "PredictTipSingleModeRxPy", die die Bewertung mithilfe des Revoscalepy-Modells durchführt.

```SQL
CREATE PROCEDURE [dbo].[PredictTipSingleModeRxPy](@model varchar(50), @passenger_count int = 0,
@trip_distance float = 0,
@trip_time_in_secs int = 0,
@pickup_latitude float = 0,
@pickup_longitude float = 0,
@dropoff_latitude float = 0,
@dropoff_longitude float = 0)
AS
BEGIN
    DECLARE @inquery nvarchar(max) = N'
    SELECT * FROM [dbo].[fnEngineerFeatures]( 
    @passenger_count,
    @trip_distance,
    @trip_time_in_secs,
    @pickup_latitude,
    @pickup_longitude,
    @dropoff_latitude,
    @dropoff_longitude)
    '
    DECLARE @lmodel2 varbinary(max) = (select model from nyc_taxi_models where name = @model);
    EXEC sp_execute_external_script 
        @language = N'Python',
        @script = N'
import pickle
import numpy
# import pandas
from revoscalepy.functions.RxPredict import rx_predict

# Load model and unserialize
mod = pickle.loads(model)

# Get features for scoring from input data
x = InputDataSet[["passenger_count", "trip_distance", "trip_time_in_secs", "direct_distance"]]

# Score data to get tip prediction probability as a list (of float)

prob_array = rx_predict(mod, x)

prob_list = prob_array["tipped_Pred"].values

# Create output data frame
OutputDataSet = pandas.DataFrame(data=prob_list, columns=["predictions"])
',
    @input_data_1 = @inquery,
    @params = N'@model varbinary(max),@passenger_count int,@trip_distance float,
        @trip_time_in_secs int ,
        @pickup_latitude float ,
        @pickup_longitude float ,
        @dropoff_latitude float ,
        @dropoff_longitude float',
    @model = @lmodel2,
        @passenger_count =@passenger_count ,
        @trip_distance=@trip_distance,
        @trip_time_in_secs=@trip_time_in_secs,
        @pickup_latitude=@pickup_latitude,
        @pickup_longitude=@pickup_longitude,
        @dropoff_latitude=@dropoff_latitude,
        @dropoff_longitude=@dropoff_longitude
    WITH RESULT SETS ((Score float));
END
GO
```
  1. Öffnen Sie in Management Studio ein neues Abfragefenster und geben Sie die Spalte mit den erklärenden Variablen ein, um die gespeicherte Prozedur aufzurufen.

    -- Call stored procedure PredictTipSingleModeSciKitPy to score using SciKit-Learn model
    EXEC [dbo].[PredictTipSingleModeSciKitPy] 'SciKit_model', 1, 2.5, 631, 40.763958,-73.973373, 40.782139,-73.977303
    -- Call stored procedure PredictTipSingleModeRxPy to score using revoscalepy model
    EXEC [dbo].[PredictTipSingleModeRxPy] 'revoscalepy_model', 1, 2.5, 631, 40.763958,-73.973373, 40.782139,-73.977303
    

Die sieben erklärenden Variablenwerte sind in der folgenden Reihenfolge aufgeführt: - passenger_count - trip_distance - trip_time_in_secs - pickup_latitude - pickup_longitude - dropoff_latitude - dropoff_longitude

Infolgedessen wird die Wahrscheinlichkeit zurückgegeben, dass der Chip in der Operation mit den obigen Parametern bezahlt wird.

![sqldev-python-step6-5-gho9o9.png](https://qiita-image-store.s3.amazonaws.com/0/195839/27bc40a6-07ae-595d-fec1-4c030e6c04ab.png)

Zusammenfassung

In diesem Tutorial haben Sie gelernt, wie Sie mit Python-Code arbeiten, der in gespeicherte Prozeduren eingebettet ist. Wir haben festgestellt, dass die Integration in Transact-SQL es noch einfacher macht, Python-Modelle zur Vorhersage bereitzustellen und die Modellumschulung als Teil eines Unternehmensdaten-Workflows einzubeziehen.

Verknüpfung

Vorheriger Schritt

Schritt 5: Trainieren und Speichern eines Modells mit T-SQL

Vom Anfang des Tutorials

In-Database Python-Analyse für SQL-Entwickler

Quelle

Step 6: Operationalize the Model

Verwandte Artikel

Machine Learning Services with Python

Recommended Posts

[In-Database Python Analysis-Lernprogramm mit SQL Server 2017] Schritt 6: Verwenden des Modells
[In-Database Python Analysis Tutorial mit SQL Server 2017]
[In-Database Python Analysis Tutorial mit SQL Server 2017] Schritt 5: Training und Speichern von Modellen mit T-SQL
[In-Database Python Analysis-Lernprogramm mit SQL Server 2017] Schritt 2: Importieren Sie Daten mit PowerShell in SQL Server
[In-Database Python Analysis Tutorial mit SQL Server 2017] Schritt 1: Laden Sie Beispieldaten herunter
[In-Database Python Analysis Tutorial mit SQL Server 2017] Schritt 4: Feature-Extraktion von Daten mit T-SQL
[In-Database Python Analysis-Lernprogramm mit SQL Server 2017] Schritt 3: Erkunden und Visualisieren von Daten
Hinter dem Flyer: Docker mit Python verwenden
Empfehlungs-Tutorial mit Assoziationsanalyse (Python-Implementierung)
Arbeiten mit OpenStack mit dem Python SDK
Stellen Sie das in Python unter SQL Server erstellte Vorhersagemodell bereit und verwenden Sie es
Lösen des Lorenz 96-Modells mit Julia und Python
Führen Sie Raw SQL mit Redash unter Verwendung der Python-Datenquelle aus und zeigen Sie das Ergebnis an
Datenanalyse mit Python 2
Erläuterung des Konzepts der Regressionsanalyse mit Python Teil 2
Sprachanalyse mit Python
Berechnen Sie den Regressionskoeffizienten der einfachen Regressionsanalyse mit Python
Erläuterung des Konzepts der Regressionsanalyse mit Python Teil 1
Hauptkomponentenanalyse mit Python von nim mit nimpy
Erläuterung des Konzepts der Regressionsanalyse mit Python Extra 1
Sprachanalyse mit Python
Datenanalyse mit Python
Lokaler Server mit Python
ODBC-Zugriff auf SQL Server von Linux mit Python
Ich habe versucht, die Python-Bibliothek von Ruby mit PyCall zu verwenden
[Python] LASSO-Regression mit Gleichungsbeschränkung unter Verwendung der Multiplikatormethode
Genießen Sie das Gray-Scott-Modell mit Kurzcode mithilfe der Matrixberechnung
Berühren Sie NoSQL mit Python mithilfe des Oracle NoSQL Database Cloud Simulators
Morphologische Analyse mit Igo + mecab-ipadic-neologd in Python (mit Ruby-Bonus)
[Python] Morphologische Analyse mit MeCab
[S3] CRUD mit S3 unter Verwendung von Python [Python]
[Analyse des gemeinsamen Auftretens] Einfache Analyse des gemeinsamen Auftretens mit Python! [Python]
Verwenden von Quaternion mit Python ~ numpy-quaternion ~
[Python] Verwenden von OpenCV mit Python (Basic)
Emotionsanalyse von Python (word2vec)
Planare Skelettanalyse mit Python
Japanische morphologische Analyse mit Python
Einfacher HTTP-Server mit Python
Kalibrieren Sie das Modell mit PyCaret
Rufen Sie die API mit python3 auf.
Datenanalyse mit Python-Pandas
Muskel-Ruck-Analyse mit Python
Verwenden von OpenCV mit Python @Mac
Senden Sie mit Python mit Google Mail
Steuern Sie den Motor mit einem Motortreiber mit Python auf Raspberry Pi 3!
Von der Einführung von JUMAN ++ bis zur morphologischen Analyse von Japanisch mit Python
Ich habe einen Pokerspielserver Chat-Holdem mit Websocket mit Python erstellt
Vervollständigung von Python mit Emacs mit Company-Jedi
Harmonischer Mittelwert von Python (mit SciPy)
Extrahieren Sie die xz-Datei mit Python
[Python] Verwenden von OpenCV mit Python (Bildfilterung)
Dreidimensionale Skelettstrukturanalyse mit Python
Verwenden von Rstan aus Python mit PypeR
[Python] Verwenden von OpenCV mit Python (Bildtransformation)
Impedanzanalyse (EIS) mit Python [impedance.py]
[Python] Verwenden von OpenCV mit Python (Kantenerkennung)
Web Scraping mit Python Erster Schritt