Apprentissage automatique dans SQL Server





ML Toolkit Inside SQL Server



Cet article décrit les étapes de création d'une procédure qui utilise le jeu de données mtcars inclus dans R pour créer un modèle linéaire généralisé simple (GLM) qui peut prédire la probabilité qu'un véhicule soit équipé d'une transmission manuelle. La deuxième procédure est pour l'estimation - elle appelle le modèle créé dans la première procédure pour produire un ensemble de prédictions basées sur les nouvelles données.



Explication des termes



SQL est un langage de requêtes structurées envoyées à la base de données.



SQL Server est une base de données relationnelle de Microsoft.



Machine Learning Services est un composant de SQL Server qui vous permet d'exécuter des scripts Python et R sur des données.



Un déclencheur en SQL est un mécanisme pour réagir à un changement d'état d'une base de données.



Les scripts sont de petits programmes conçus pour une gamme restreinte, le plus souvent périodique, de tâches.



R est un langage de programmation créé spécifiquement pour le traitement des données.



Raisons pour lesquelles SQL Server est bénéfique pour l'apprentissage automatique Discutons



de la liste des avantages disponibles de l'utilisation du ML dans SQL Server.



L'une des raisons les plus importantes est la commodité de stocker les commandes SQL et le code ML dans une zone de visibilité commune, ce qui vous permet de tirer pleinement parti des deux technologies.



Une autre raison importante est la sécurité, car si le serveur de base de données conditionnelle est situé à un endroit et que les demandes qui lui sont adressées proviennent d'un autre endroit, les données peuvent être interceptées. Si le noyau du SGBD stocke à la fois les données et appelle le code, ce problème peut être évité.



Entre autres choses, SQL Server prend en charge le langage de programmation R, à la fois en termes de bibliothèques fournies et en termes de performances. Selon les benchmarks les plus récents, le moteur de base de données est capable de calculer environ un million de R prédictions par seconde ( lien ).



Vérification de l'intégrité de SQL Server



Tout d'abord, assurons-nous que le service d'apprentissage automatique et les extensions pour R fonctionnent comme prévu. Pour ce faire, exécutez le code suivant.



EXEC sp_execute_external_script @language = N'R'
, @script = N'
OutputDataSet <- data.frame(installed.packages()[,c("Package", ...;'
WITH result sets((Package NVARCHAR(255)
, Version NVARCHAR(100)...));


Résultat:







analysons brièvement la commande SQL:



1.  EXEC sp_execute_external_script @language = N'R'
Ici, nous définissons que le noyau doit gérer le langage R



2.  @script = N'OutputDataSet <- data.frame(installed...'
scénario il s'agit d'une variable spéciale qui peut être traitée dans une requête ultérieure, égale au résultat de la commande R



3.  WITH result sets((Package NVARCHAR(255)..
L'opération d'affichage de contenu récursif est utilisée scénariosous la forme d'un tableau.



Un exemple d'utilisation de ML dans SQL Server ( lien )



Créez une table pour stocker les données avec lesquelles nous allons entraîner le modèle:



CREATE TABLE dbo.MTCars(
hp int NOT NULL,
...
wt decimal(10, 3) NOT NULL,
am int NOT NULL);


Nous y introduisons des données:



INSERT INTO dbo.MTCars
EXEC sp_execute_external_script @language = N'R'
    , @script = N'MTCars <- mtcars;'
    , @input_data_1 = N''
    , @output_data_1_name = N'MTCars';


Résultat:







créez et entraînez le modèle:



CREATE PROCEDURE generate_GLM
... , @script = N'carsModel <- carsModel <- glm(... data = MTCarsData, ...;
        trained_model <- ...'
    , @input_data_1 = N'SELECT hp, wt, am FROM MTCars'
    , @input_data_1_name = N'MTCarsData'
    ...;


À ce stade, je voudrais me concentrer sur la façon dont R reçoit des données sur le moteur SQL Server: @ input_data_1 sont les colonnes de table qui sont représentées dans le code comme la variable @ input_data_1_name



Créez une table pour le modèle:



CREATE TABLE GLM_models (
    model_name varchar(30) not null default('default model') primary key,
    model varbinary(max) not null
);


Nous sauvegardons le modèle:



INSERT INTO GLM_models(model)
EXEC generate_GLM;


Résultat:







SQL Server est capable de charger des modèles entraînés dans des tables afin qu'ils puissent être rapidement réutilisés ultérieurement.



Nous créons un tableau dans lequel les données à analyser seront stockées:



CREATE TABLE dbo.NewMTCars(
    hp INT NOT NULL
    , wt DECIMAL (10,3) NOT NULL
    , am INT NULL)


Nous remplissons avec des données aléatoires dans la plage requise:




INSERT INTO dbo.NewMTCars(hp, wt) VALUES (110, 2.634)
INSERT INTO dbo.NewMTCars(hp, wt) VALUES (72, 3.435)
INSERT INTO dbo.NewMTCars(hp, wt) VALUES (220, 5.220)
INSERT INTO dbo.NewMTCars(hp, wt) VALUES (120, 2.800)


Résultat: nous







prédisons le résultat pour les nouvelles données:



DECLARE @glmmodel varbinary(max) = ...
    ...    , @script = N'
            --     
            '
   --    ;


Résultat:







plus le predicated_am est proche de un, plus il y a de chances que la voiture ait une transmission manuelle.



Conclusion



En plus de cet exemple, l'apprentissage automatique dans le traitement des données peut être utilisé pour séparer les informations utiles du bruit, trouver des dépendances entre les colonnes, et bien plus encore.



En plus des fonctionnalités présentées ci-dessus, vous pouvez appliquer des méthodes de prédiction plus avancées et configurer des déclencheurs qui se déclenchent chaque fois que de nouvelles informations arrivent comme:



CREATE TRIGGER `add_car` AFTER INSERT ON `NewMTCars `


… Appliquer la procédure de prévision.



All Articles