Tutorial do R: Treinar e salvar o modelo
Aplica-se a: SQL Server 2016 (13.x) e versões posteriores Instância Gerenciada de SQL do Azure
Na parte quatro desta série de tutoriais de cinco partes, você aprenderá a treinar um modelo de machine learning usando o R. Você treinará o modelo usando os recursos de dados criados na parte anterior e salvará o modelo treinado em uma tabela SQL Server. Neste caso, os pacotes do R já estão instalados com o R Services (no Banco de Dados), portanto, tudo pode ser feito do SQL.
Neste artigo você vai:
- Criar e treinar um modelo usando um procedimento armazenado do SQL
- Salvar o modelo treinado em uma tabela SQL
Na parte um, você instalou os pré-requisitos e restaurou o banco de dados de exemplo.
Na parte dois, você examinou os dados de exemplo e gerou alguns gráficos.
Na parte três, você aprendeu a criar recursos de dados brutos usando uma função Transact-SQL. Em seguida, você chamou essa função por meio de um procedimento armazenado para criar uma tabela que contém os valores do recurso.
Na parte cinco, você aprenderá a operacionalizar os modelos treinados e salvos na parte quatro.
Criar o procedimento armazenado
Ao chamar o R do T-SQL, você usa o procedimento armazenado do sistema, sp_execute_external_script. No entanto, para processos que você repete com frequência, como treinar novamente um modelo, é mais fácil encapsular a chamada para sp_execute_external_script
em outro procedimento armazenado.
No Management Studio, abra uma nova janela de Consulta.
Execute a instrução a seguir para criar o procedimento armazenado RTrainLogitModel. Esse procedimento define os dados de entrada e usa glm para criar um modelo de regressão logística.
CREATE PROCEDURE [dbo].[RTrainLogitModel] (@trained_model varbinary(max) OUTPUT) AS BEGIN DECLARE @inquery nvarchar(max) = N' select tipped, fare_amount, passenger_count,trip_time_in_secs,trip_distance, pickup_datetime, dropoff_datetime, dbo.fnCalculateDistance(pickup_latitude, pickup_longitude, dropoff_latitude, dropoff_longitude) as direct_distance from nyctaxi_sample tablesample (70 percent) repeatable (98052) ' EXEC sp_execute_external_script @language = N'R', @script = N' ## Create model logitObj <- glm(tipped ~ passenger_count + trip_distance + trip_time_in_secs + direct_distance, data = InputDataSet, family = binomial) summary(logitObj) ## Serialize model trained_model <- as.raw(serialize(logitObj, NULL)); ', @input_data_1 = @inquery, @params = N'@trained_model varbinary(max) OUTPUT', @trained_model = @trained_model OUTPUT; END GO
Para garantir que há alguns dados para testar o modelo, 70% dos dados são selecionados aleatoriamente da tabela de dados de táxi para fins de treinamento.
A consulta SELECT usa a função escalar personalizada fnCalculateDistance para calcular a distância direta entre os locais de embarque e desembarque de passageiros. Os resultados da consulta são armazenados na variável de entrada padrão do R,
InputDataset
.O script R chama a função glm do R para criar o modelo de regressão logística.
A variável binária tipped é usada como a coluna label ou de resultado e o modelo é ajustado com o uso destas colunas de recursos: passenger_count, trip_distance, trip_time_in_secs e direct_distance.
O modelo treinado, salvo no
logitObj
da variável do R, é serializado e retornado como um parâmetro de saída.
Treinar e implantar o modelo do R usando o procedimento armazenado
Como o procedimento armazenado já inclui uma definição dos dados de entrada, você não precisa fornecer uma consulta de entrada.
Para treinar e implantar o modelo do R, chame o procedimento armazenado e insira-o na tabela de banco de dados nyc_taxi_models para que você possa usá-lo para previsões futuras:
DECLARE @model VARBINARY(MAX); EXEC RTrainLogitModel @model OUTPUT; INSERT INTO nyc_taxi_models (name, model) VALUES('RTrainLogit_model', @model);
Assista à janela Mensagens de Management Studio para mensagens que seriam canalizadas para o fluxo stdout do R, como esta mensagem:
"Mensagem(ns) STDOUT do script externo: Linhas lidas: 1193025, Total de Linhas Processadas: 1193025, Tempo Total da Parte: 0,093 segundos"
Quando a instrução tiver sido concluída, abra a tabela nyc_taxi_models. O processamento dos dados e o ajuste do modelo poderão levar algum tempo.
Você pode ver que foi adicionada uma nova linha que contém o modelo serializado na coluna modelo e o nome do modelo RTrainLogit_model na coluna nome.
model name ---------------------------- ------------------ 0x580A00000002000302020.... RTrainLogit_model
Na próxima parte deste tutorial, você usará o modelo treinado para gerar previsões.
Próximas etapas
Neste artigo você:
- Criou e treinou um modelo usando um procedimento armazenado do SQL
- Salvou o modelo treinado em uma tabela SQL