Analyse Python en base de données pour les développeurs SQL
Étape 4: Extraction de fonctionnalités des données à l'aide de T-SQL
Étape 6: Manipulation du modèle
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.
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).
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
```
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
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).
Dans l'Explorateur d'objets de Management Studio, développez Programmation> Procédures stockées.
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
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);
Assurez-vous qu'un nouvel enregistrement est ajouté à la table nyc_taxi_models et que le modèle sérialisé est enregistré.
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.
Dans l'Explorateur d'objets de Management Studio, développez Programmation> Procédures stockées.
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
logitObj
est sérialisé et renvoyé en tant que paramètre de sortie. En enregistrant cette sortie dans la table nyc_taxi_models, elle peut être utilisée à plusieurs reprises pour de futures prédictions.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)
Assurez-vous qu'un nouvel enregistrement est ajouté à la table nyc_taxi_models et que le modèle sérialisé est enregistré.
L'étape suivante consiste à créer une prédiction à l'aide du modèle entraîné.
Étape 6: Manipulation du modèle
Étape 4: Extraction de fonctionnalités des données à l'aide de T-SQL
Analyse Python en base de données pour les développeurs SQL
Step 5: Train and save a model using T-SQL
Machine Learning Services with Python
Recommended Posts