[Didacticiel d'analyse Python dans la base de données avec SQL Server 2017] Étape 5: Formation et enregistrement des modèles à l'aide de T-SQL

Dès le début du tutoriel

Analyse Python en base de données pour les développeurs SQL

Étape précédente

Étape 4: Extraction de fonctionnalités des données à l'aide de T-SQL

L'étape suivante

Étape 6: Manipulation du modèle

Étape 5: Formation et enregistrement du modèle à l'aide de T-SQL

Dans cette étape, vous apprendrez à entraîner un modèle d'apprentissage automatique à l'aide des packages Python scicit-learn et revoscalepy. Ces packages Python sont déjà installés avec SQL Server Machine Learning Services, vous pouvez donc charger des modules et appeler les fonctions requises à partir d'une procédure stockée. Entraînez votre modèle avec les fonctionnalités de données que vous créez et stockez le modèle entraîné dans une table SQL Server.

Divisez les données d'échantillon en ensemble d'apprentissage et ensemble de test avec la procédure stockée TrainTestSplit

La procédure stockée «TrainTestSplit» est définie dans SQL Server à l'étape 2: importer des données dans SQL Server à l'aide de PowerShell (http://qiita.com/qio9o9/items/98df36982f1fbecdf5e7).

  1. Dans l'Explorateur d'objets de Management Studio, développez Programmation> Procédures stockées.
  2. Cliquez avec le bouton droit sur TrainTestSplit et sélectionnez Modifier pour ouvrir le script Transact-SQL dans une nouvelle fenêtre de requête.

TrainTestSplit divise les données de la table nyctaxi_sample en deux tables, nyctaxi_sample_training et 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. Exécutez la procédure stockée et entrez un entier qui représente le pourcentage que vous souhaitez affecter à l'ensemble d'apprentissage. Par exemple, l'instruction suivante affecte 60% des données à un ensemble d'apprentissage. Les données d'entraînement et de test sont stockées dans deux tables séparées.

    EXEC TrainTestSplit 60
    GO
    

    sqldev-python-step5-1-gho9o9.png

Construire un modèle de régression logistique à l'aide de scikit-learn

Dans cette section, vous allez créer une procédure stockée qui entraîne votre modèle à l'aide des données d'entraînement que vous créez. Cette procédure stockée utilise la fonction scicit-learn pour entraîner un modèle de régression logistique. Ceci est implémenté à l'aide de la procédure stockée système sp_execute_external_script pour appeler le runtime Python installé avec SQL Server.

Nous facilitons le recyclage du modèle en définissant de nouvelles données d'apprentissage en tant que paramètres et en créant une procédure stockée qui encapsule l'appel à la procédure stockée système sp_execute_exernal_script.

La procédure stockée TrainTipPredictionModelSciKitPy est définie dans SQL Server à l'étape 2: importer des données dans SQL Server à l'aide de PowerShell (http://qiita.com/qio9o9/items/98df36982f1fbecdf5e7).

  1. Dans l'Explorateur d'objets de Management Studio, développez Programmation> Procédures stockées.

  2. Cliquez avec le bouton droit sur TrainTipPredictionModelSciKitPy et sélectionnez Modifier pour ouvrir le script Transact-SQL dans une nouvelle fenêtre de requête.

    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. Exécutez l'instruction SQL suivante pour enregistrer le modèle entraîné dans la table nyc_taxi_models.

    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. Assurez-vous qu'un nouvel enregistrement est ajouté à la table nyc_taxi_models et que le modèle sérialisé est enregistré.

    sqldev-python-step5-3-gho9o9.png

Construire un modèle de régression logistique à l'aide du package revoscalepy

Entraînez ensuite le modèle de régression logistique avec la procédure stockée TrainTipPredictionModelRxPy à l'aide du nouveau package RevoScalePy. Le package RevoScalePy de Python contient des algorithmes pour la définition d'objets, le traitement des données et l'apprentissage automatique similaires à ceux fournis par le package RevoScaleR de R. Cette bibliothèque vous permet d'entraîner des modèles prédictifs à l'aide d'algorithmes courants tels que la logistique, la régression linéaire et les arbres de décision, de créer des contextes de calcul, de déplacer des données entre des contextes de calcul et de traiter des données. Pour plus d'informations sur RevoScalePy, consultez Présentation de RevoScalePy.

La procédure stockée TrainTipPredictionModelRxPy est définie dans SQL Server via Étape 2: Importation de données dans SQL Server à l'aide de PowerShell.

  1. Dans l'Explorateur d'objets de Management Studio, développez Programmation> Procédures stockées.

  2. Cliquez avec le bouton droit sur TrainTipPredictionModelRxPy et sélectionnez Modifier pour ouvrir le script Transact-SQL dans une nouvelle fenêtre de requête.

    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. Exécutez l'instruction SQL suivante pour enregistrer le modèle entraîné dans la table nyc_taxi_models.

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

Le traitement des données et l'ajustement du modèle peuvent prendre quelques minutes. Les messages envoyés au flux stdout Python sont affichés dans la fenêtre de messages de Management Studio.

![sqldev-python-step5-4-gho9o9.png](https://qiita-image-store.s3.amazonaws.com/0/195839/ed97cdcb-3322-c5c2-c24d-e7d5d71bcf21.png)
  1. Assurez-vous qu'un nouvel enregistrement est ajouté à la table nyc_taxi_models et que le modèle sérialisé est enregistré.

    sqldev-python-step5-5-gho9o9.png

L'étape suivante consiste à créer une prédiction à l'aide du modèle entraîné.

Lien

L'étape suivante

Étape 6: Manipulation du modèle

Étape précédente

Étape 4: Extraction de fonctionnalités des données à l'aide de T-SQL

Dès le début du tutoriel

Analyse Python en base de données pour les développeurs SQL

La source

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

Article connexe

Machine Learning Services with Python

Recommended Posts

[Didacticiel d'analyse Python dans la base de données avec SQL Server 2017] Étape 5: Formation et enregistrement des modèles à l'aide de T-SQL
[Didacticiel d'analyse Python dans la base de données avec SQL Server 2017] Étape 6: Utilisation du modèle
[Didacticiel d'analyse Python dans la base de données avec SQL Server 2017] Étape 4: Extraction de fonctionnalités de données à l'aide de T-SQL
[Didacticiel d'analyse Python dans la base de données avec SQL Server 2017] Étape 3: Exploration et visualisation des données
[Didacticiel d'analyse Python dans la base de données avec SQL Server 2017] Étape 2: importer des données dans SQL Server à l'aide de PowerShell
[Didacticiel d'analyse Python en base de données avec SQL Server 2017]
[Didacticiel d'analyse Python dans la base de données avec SQL Server 2017] Étape 1: Télécharger des exemples de données
Lancer un serveur Web avec Python et Flask
Bibliothèque pour spécifier un serveur de noms en python et dig
Analyse de séries temporelles par modèle général d'espace d'états gaussien à l'aide de Python [Exemple d'implémentation considérant extrinsèque et saisonnalité]
J'ai créé un chat-holdem de serveur de jeu de poker en utilisant websocket avec python
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python (2) ~ Server ~
Déployer et utiliser le modèle de prédiction créé en Python sur SQL Server
Un mémo contenant Python2.7 et Python3 dans CentOS
Tutoriel de recommandation utilisant l'analyse d'association (implémentation python)
Analyse des tweets avec Python, Mecab et CaboCha
J'utilise tox et Python 3.3 avec Travis-CI
Implémenter un modèle avec état et comportement
Mettez Docker dans Windows Home et exécutez un serveur Web simple avec Python
Exécuter du SQL brut avec redash à l'aide de la source de données Python et afficher le résultat
Jusqu'à ce que Python soit installé avec pythonbrew et que Flask s'exécute sur le serveur WSGI
[Python] Comment créer un environnement de serveur Web local avec SimpleHTTPServer et CGIHTTPServer
Python: analyse des séries temporelles: création d'un modèle SARIMA
Construire un environnement python avec virtualenv et direnv
Créer une carte Web en utilisant Python et GDAL
Résolution du modèle Lorenz 96 avec Julia et Python
Obtenez une grande quantité de données Twitter de Starba avec python et essayez l'analyse de données Partie 1
Créez rapidement un tableau de bord d'analyse de données Python avec Streamlit et déployez-le sur AWS
Procédure de génération et d'enregistrement d'un modèle d'apprentissage par machine learning, en faisant un serveur API et en communiquant avec JSON depuis un navigateur