[In-Database Python Analysis Tutorial mit SQL Server 2017] Schritt 5: Training und Speichern von Modellen mit T-SQL

Vom Anfang des Tutorials

In-Database Python Analysis für SQL-Entwickler

Vorheriger Schritt

Schritt 4: Feature-Extraktion von Daten mit T-SQL

Nächster Schritt

Schritt 6: Manipulieren des Modells

Schritt 5: Training und Speichern des Modells mit T-SQL

In diesem Schritt lernen Sie, wie Sie ein Modell für maschinelles Lernen mit den Python-Paketen scicit-learn und revoscalepy trainieren. Diese Python-Pakete sind bereits mit SQL Server Machine Learning Services installiert, sodass Sie Module laden und die erforderlichen Funktionen in gespeicherten Prozeduren aufrufen können. Trainieren Sie Ihr Modell mit den Datenfunktionen, die Sie erstellen, und speichern Sie das trainierte Modell in einer SQL Server-Tabelle.

Teilen Sie die Beispieldaten mit der gespeicherten Prozedur "TrainTestSplit" in Trainingssatz und Testsatz auf

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

  1. Erweitern Sie im Objekt-Explorer von Management Studio die Option Programmierung> Gespeicherte Prozeduren.
  2. Klicken Sie mit der rechten Maustaste auf "TrainTestSplit" und wählen Sie "Ändern", um das Transact-SQL-Skript in einem neuen Abfragefenster zu öffnen.

TrainTestSplit teilt die Daten in der Tabelle nyctaxi_sample in zwei Tabellen auf, nyctaxi_sample_training und nyctaxi_sample_testing.

```SQL:TrainTestSplit
CREATE PROCEDURE [dbo].[TrainTestSplit](@pct int)
AS

DROP TABLE IF EXISTS dbo.nyctaxi_sample_training
SELECT * into nyctaxi_sample_training FROM nyctaxi_sample WHERE (ABS(CAST(BINARY_CHECKSUM(medallion,hack_license)  as int)) % 100) < @pct

DROP TABLE IF EXISTS dbo.nyctaxi_sample_testing
SELECT * into nyctaxi_sample_testing FROM nyctaxi_sample
WHERE (ABS(CAST(BINARY_CHECKSUM(medallion,hack_license)  as int)) % 100) > @pct
GO
```
  1. Führen Sie die gespeicherte Prozedur aus und geben Sie eine Ganzzahl ein, die den Prozentsatz darstellt, den Sie dem Trainingssatz zuweisen möchten. In der folgenden Anweisung werden beispielsweise 60% der Daten einem Trainingssatz zugewiesen. Trainings- und Testdaten werden in zwei separaten Tabellen gespeichert.

    EXEC TrainTestSplit 60
    GO
    

    sqldev-python-step5-1-gho9o9.png

Erstellen Sie mit scikit-learn ein logistisches Regressionsmodell

In diesem Abschnitt erstellen Sie eine gespeicherte Prozedur, die Ihr Modell anhand der von Ihnen erstellten Trainingsdaten trainiert. Diese gespeicherte Prozedur verwendet die Scicit-Learn-Funktion, um ein logistisches Regressionsmodell zu trainieren. Dies wird mithilfe der gespeicherten Systemprozedur sp_execute_external_script implementiert, um die mit SQL Server installierte Python-Laufzeit aufzurufen.

Die Umschulung des Modells wird erleichtert, indem neue Trainingsdaten als Parameter definiert und eine gespeicherte Prozedur erstellt werden, die den Aufruf der gespeicherten Systemprozedur sp_execute_exernal_script umschließt.

Die gespeicherte Prozedur "TrainTipPredictionModelSciKitPy" 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 "TrainTipPredictionModelSciKitPy" und wählen Sie "Ändern", um das Transact-SQL-Skript in einem neuen Abfragefenster zu öffnen.

    DROP PROCEDURE IF EXISTS TrainTipPredictionModelSciKitPy;
    GO
    
    CREATE PROCEDURE [dbo].[TrainTipPredictionModelSciKitPy](@trained_model varbinary(max) OUTPUT)
    AS
    BEGIN
      EXEC sp_execute_external_script
      @language = N'Python',
      @script = N'
    import numpy
    import pickle
    # import pandas
    from sklearn.linear_model import LogisticRegression
    
    ##Create SciKit-Learn logistic regression model
    X = InputDataSet[["passenger_count", "trip_distance", "trip_time_in_secs", "direct_distance"]]
    y = numpy.ravel(InputDataSet[["tipped"]])
    
    SKLalgo = LogisticRegression()
    logitObj = SKLalgo.fit(X, y)
    
    ##Serialize model
    trained_model = pickle.dumps(logitObj)
    ',
      @input_data_1 = N'
      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_training
      ',
      @input_data_1_name = N'InputDataSet',
      @params = N'@trained_model varbinary(max) OUTPUT',
      @trained_model = @trained_model OUTPUT;
      ;
    END;
    GO
    
  3. Führen Sie die folgende SQL-Anweisung aus, um das trainierte Modell in der Tabelle nyc_taxi_models zu registrieren.

    DECLARE @model VARBINARY(MAX);
    EXEC TrainTipPredictionModelSciKitPy @model OUTPUT;
    INSERT INTO nyc_taxi_models (name, model) VALUES('SciKit_model', @model);
    

    sqldev-python-step5-2-gho9o9.png

  4. Stellen Sie sicher, dass der Tabelle nyc_taxi_models ein neuer Datensatz hinzugefügt und das serialisierte Modell registriert wird.

    sqldev-python-step5-3-gho9o9.png

Erstellen Sie mit dem revoscalepy-Paket ein logistisches Regressionsmodell

Trainieren Sie anschließend das logistische Regressionsmodell mit der gespeicherten Prozedur "TrainTipPredictionModelRxPy" unter Verwendung des neuen RevoScalePy-Pakets. Das RevoScalePy-Paket von Python enthält Algorithmen für die Objektdefinition, Datenverarbeitung und das maschinelle Lernen, die denen des RevoScaleR-Pakets von R ähneln. Mit dieser Bibliothek können Sie Vorhersagemodelle mit gängigen Algorithmen wie logistischen, linearen Regressions- und Entscheidungsbäumen trainieren, Rechenkontexte erstellen, Daten zwischen Rechenkontexten verschieben und Daten verarbeiten. Weitere Informationen zu RevoScalePy finden Sie unter Einführung in RevoScalePy.

Die gespeicherte Prozedur "TrainTipPredictionModelRxPy" wird in SQL Server über Schritt 2: Importieren von Daten in SQL Server mit PowerShell definiert.

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

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

    DROP PROCEDURE IF EXISTS TrainTipPredictionModelRxPy;
    GO
    
    CREATE PROCEDURE [dbo].[TrainTipPredictionModelRxPy](@trained_model varbinary(max) OUTPUT)
    AS
    BEGIN
    EXEC sp_execute_external_script 
      @language = N'Python',
      @script = N'
    import numpy
    import pickle
    # import pandas
    from revoscalepy.functions.RxLogit import rx_logit
    
    ## Create a logistic regression model using rx_logit function from revoscalepy package
    logitObj = rx_logit("tipped ~ passenger_count + trip_distance + trip_time_in_secs + direct_distance", data = InputDataSet);
    
    ## Serialize model
    trained_model = pickle.dumps(logitObj)
    ',
    @input_data_1 = N'
    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_training
    ',
    @input_data_1_name = N'InputDataSet',
    @params = N'@trained_model varbinary(max) OUTPUT',
    @trained_model = @trained_model OUTPUT;
    ;
    END;
    GO
    
  1. Führen Sie die folgende SQL-Anweisung aus, um das trainierte Modell in der Tabelle nyc_taxi_models zu registrieren.

    DECLARE @model VARBINARY(MAX);
    EXEC TrainTipPredictionModelRxPy @model OUTPUT;
    INSERT INTO nyc_taxi_models (name, model) VALUES('revoscalepy_model', @model);
    

Die Datenverarbeitung und Modellanpassung kann einige Minuten dauern. Nachrichten, die an den Python-Standard-Stream weitergeleitet werden, werden im Management Studio-Nachrichtenfenster angezeigt.

![sqldev-python-step5-4-gho9o9.png](https://qiita-image-store.s3.amazonaws.com/0/195839/ed97cdcb-3322-c5c2-c24d-e7d5d71bcf21.png)
  1. Stellen Sie sicher, dass der Tabelle nyc_taxi_models ein neuer Datensatz hinzugefügt und das serialisierte Modell registriert wird.

    sqldev-python-step5-5-gho9o9.png

Der nächste Schritt besteht darin, eine Vorhersage unter Verwendung des trainierten Modells zu erstellen.

Verknüpfung

Nächster Schritt

Schritt 6: Manipulieren des Modells

Vorheriger Schritt

Schritt 4: Feature-Extraktion von Daten mit T-SQL

Vom Anfang des Tutorials

In-Database Python Analysis für SQL-Entwickler

Quelle

Step 5: Train and save a model using T-SQL

Verwandte Artikel

Machine Learning Services with Python

Recommended Posts

[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 6: Verwenden des Modells
[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
[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]
[In-Database Python Analysis Tutorial mit SQL Server 2017] Schritt 1: Laden Sie Beispieldaten herunter
Starten Sie einen Webserver mit Python und Flask
Bibliothek zur Angabe eines Nameservers in Python und Dig
Zeitreihenanalyse durch allgemeines Gaußsches Zustandsraummodell unter Verwendung von Python [Implementierungsbeispiel unter Berücksichtigung von Extrinsik und Saisonalität]
Ich habe einen Pokerspielserver Chat-Holdem mit Websocket mit Python erstellt
Ich habe Chatbot mit der LINE Messaging API und Python (2) ~ Server ~ erstellt
Stellen Sie das in Python unter SQL Server erstellte Vorhersagemodell bereit und verwenden Sie es
Ein Memo mit Python2.7 und Python3 in CentOS
Empfehlungs-Tutorial mit Assoziationsanalyse (Python-Implementierung)
Tweet-Analyse mit Python, Mecab und CaboCha
Ich verwende Tox und Python 3.3 mit Travis-CI
Implementieren Sie ein Modell mit Status und Verhalten
Stellen Sie Docker in Windows Home und führen Sie einen einfachen Webserver mit Python aus
Führen Sie Raw SQL mit Redash unter Verwendung der Python-Datenquelle aus und zeigen Sie das Ergebnis an
Bis Python mit Pythonbrew installiert ist und Flask auf dem WSGI-Server ausgeführt wird
[Python] So erstellen Sie eine lokale Webserverumgebung mit SimpleHTTPServer und CGIHTTPServer
Python: Zeitreihenanalyse: Erstellen eines SARIMA-Modells
Erstellen einer Python-Umgebung mit virtualenv und direnv
Erstellen Sie eine Webmap mit Python und GDAL
Lösen des Lorenz 96-Modells mit Julia und Python
Holen Sie sich mit Python eine große Menge von Starbas Twitter-Daten und probieren Sie die Datenanalyse Teil 1 aus
Erstellen Sie mit Streamlit schnell ein Python-Datenanalyse-Dashboard und stellen Sie es in AWS bereit
Verfahren zum Generieren und Speichern eines Lernmodells durch maschinelles Lernen, Erstellen eines API-Servers und Kommunizieren mit JSON über einen Browser