Aprendizaje automático en SQL Server





ML Toolkit Inside SQL Server



Este artículo describe los pasos para crear un procedimiento que usa el conjunto de datos mtcars incluido en R para crear un modelo lineal generalizado (GLM) simple que puede predecir la probabilidad de que un vehículo esté equipado con una transmisión manual. El segundo procedimiento es para la estimación: llama al modelo creado en el primer procedimiento para generar un conjunto de predicciones basadas en los nuevos datos.



Explicación de términos



SQL es un lenguaje de consultas estructuradas que se envían a la base de datos.



SQL Server es una base de datos relacional de Microsoft.



Machine Learning Services es un componente de SQL Server que le permite ejecutar scripts de Python y R en datos.



Un disparador en SQL es un mecanismo para reaccionar ante un cambio en el estado de una base de datos.



Los scripts son pequeños programas diseñados para una gama limitada de tareas, a menudo periódicas.



R es un lenguaje de programación creado específicamente para el procesamiento de datos.



Razones por las que SQL Server es beneficioso para el aprendizaje automático



Analicemos la lista de beneficios disponibles de usar ML en SQL Server.



Una de las razones más importantes es la conveniencia de almacenar comandos SQL y código ML en un área común de visibilidad, lo que le permite aprovechar al máximo las dos tecnologías.



Otra razón importante es la seguridad, porque si el servidor de base de datos condicional está ubicado en un lugar y las solicitudes provienen de otro lugar, los datos pueden ser interceptados. Si el kernel DBMS almacena datos y llama al código, este problema se puede evitar.



Entre otras cosas, SQL Server tiene un buen soporte para el lenguaje de programación R, tanto en términos de bibliotecas suministradas como en términos de rendimiento. Según los puntos de referencia más recientes, el motor de la base de datos es capaz de calcular alrededor de un millón de predicciones R por segundo ( enlace ).



Comprobando el estado de SQL Server



Primero, asegurémonos de que el servicio de aprendizaje automático y las extensiones para R funcionen como se esperaba. Para hacer esto, ejecutemos el siguiente código.



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)...));


Resultado:







Analicemos brevemente el comando SQL:



1.  EXEC sp_execute_external_script @language = N'R'
Aquí definimos que el kernel debe manejar el lenguaje R



2.  @script = N'OutputDataSet <- data.frame(installed...'
guión esta es una variable especial que se puede procesar en una solicitud posterior, igual al resultado del comando R



3.  WITH result sets((Package NVARCHAR(255)..
Se utiliza la operación de visualización de contenido recursivo guiónen forma de mesa.



Un ejemplo de uso de ML en SQL Server ( enlace )



Crea una tabla para almacenar los datos con los que entrenaremos el modelo:



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


Ingresamos datos en él:



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';


Resultado:







cree y entrene el modelo:



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'
    ...;


En esta etapa, me gustaría centrarme en cómo R recibe datos en el motor de SQL Server: @ input_data_1 son las columnas de la tabla, que están representadas en el código como una variable @ input_data_1_name



Crea una tabla para el modelo:



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


Guardamos el modelo:



INSERT INTO GLM_models(model)
EXEC generate_GLM;


Resultado:







SQL Server puede cargar modelos entrenados en tablas para que puedan reutilizarse rápidamente más tarde.



Creamos una tabla donde se almacenarán los datos para el análisis:



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


Completamos con datos aleatorios dentro del rango requerido:




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)


Resultado:







predecimos el resultado para nuevos datos:



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


Resultado: cuanto







más cerca de uno esté el valor predicated_am, mayor será la probabilidad de que el automóvil tenga transmisión manual.



Conclusión



Además de este ejemplo, el aprendizaje automático en el procesamiento de datos se puede usar para separar información útil del ruido, encontrar dependencias entre columnas y mucho más.



Además de la funcionalidad presentada anteriormente, puede aplicar métodos de predicción más avanzados y configurar activadores que se activan cada vez que ingresa nueva información como:



CREATE TRIGGER `add_car` AFTER INSERT ON `NewMTCars `


… Aplicar el procedimiento de previsión.



All Articles