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.