Aprendizado de máquina no SQL Server





ML Toolkit dentro do SQL Server



Este artigo descreve as etapas para criar um procedimento que usa o conjunto de dados mtcars incluído em R para criar um modelo linear generalizado simples (GLM) que pode prever a probabilidade de um veículo ser equipado com uma transmissão manual. O segundo procedimento é para estimativa - ele chama o modelo criado no primeiro procedimento para gerar um conjunto de previsões com base nos novos dados.



Explicação dos termos



SQL é uma linguagem de consultas estruturadas enviadas ao banco de dados.



SQL Server é um banco de dados relacional da Microsoft.



O Machine Learning Services é um componente do SQL Server que permite executar scripts Python e R nos dados.



Um gatilho em SQL é um mecanismo para reagir a uma mudança no estado de um banco de dados.



Scripts são pequenos programas projetados para uma gama limitada de tarefas, na maioria das vezes periódica.



R é uma linguagem de programação criada especificamente para processamento de dados.



Razões pelas quais o SQL Server é benéfico para o aprendizado de máquina



Vamos discutir a lista de benefícios disponíveis do uso de ML no SQL Server.



Um dos motivos mais importantes é a conveniência de armazenar comandos SQL e código ML em uma área comum de visibilidade, o que permite aproveitar ao máximo as duas tecnologias.



Outro motivo importante é a segurança, porque se o servidor de banco de dados condicional estiver localizado em um local e as solicitações para ele vierem de outro local, os dados podem ser interceptados. Se o kernel do DBMS armazena dados e chama o código, esse problema pode ser evitado.



Entre outras coisas, o SQL Server tem um bom suporte para a linguagem de programação R, tanto em termos de bibliotecas fornecidas quanto em termos de desempenho. De acordo com os benchmarks mais recentes, o mecanismo de banco de dados é capaz de calcular cerca de um milhão de previsões R por segundo ( link ).



Verificando a integridade do SQL Server



Primeiro, vamos ter certeza de que o serviço de aprendizado de máquina e as extensões para R estão funcionando conforme o esperado. Para fazer isso, execute o seguinte 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:







vamos analisar brevemente o comando SQL:



1.  EXEC sp_execute_external_script @language = N'R'
Aqui nós definimos que o kernel deve lidar com a linguagem R



2.  @script = N'OutputDataSet <- data.frame(installed...'
roteiro esta é uma variável especial que pode ser processada em uma solicitação subsequente, igual ao resultado do comando R



3.  WITH result sets((Package NVARCHAR(255)..
Operação recursiva de exibição de conteúdo é usada roteirona forma de uma mesa.



Um exemplo de uso de ML no SQL Server ( link )



Crie uma tabela para armazenar os dados com os quais treinaremos o modelo:



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


Nós inserimos dados nele:



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:







Crie e treine o 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'
    ...;


Neste estágio, gostaria de me concentrar em como R recebe dados no mecanismo do SQL Server: @ input_data_1 são as colunas da tabela, que são representadas no código como uma variável @ input_data_1_name



Crie uma tabela para o modelo:



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


Salvamos o modelo:



INSERT INTO GLM_models(model)
EXEC generate_GLM;


Resultado: o







SQL Server é capaz de carregar modelos treinados em tabelas para que possam ser reutilizados rapidamente mais tarde.



Criamos uma tabela onde os dados para análise serão armazenados:



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


Preenchemos com dados aleatórios dentro do intervalo exigido:




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:







prevemos o resultado para novos dados:



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


Resultado:







quanto mais próximo predicated_am de um, maior a chance de o carro ter transmissão manual.



Conclusão



Além deste exemplo, o aprendizado de máquina no processamento de dados pode ser usado para separar informações úteis de ruído, localizar dependências entre colunas e muito mais.



Além da funcionalidade apresentada acima, você pode aplicar métodos de previsão mais avançados e configurar gatilhos que disparam sempre que novas informações chegam, como:



CREATE TRIGGER `add_car` AFTER INSERT ON `NewMTCars `


… Aplique o procedimento de previsão.



All Articles