Partilhar via


Tutorial R: Treinar e salvar modelo

Aplica-se a: SQL Server 2016 (13.x) e versões posteriores Instância Gerenciada SQL do Azure

Na quarta parte desta série de tutoriais de cinco partes, você aprenderá como treinar um modelo de aprendizado de máquina usando R. Você treinará o modelo usando os recursos de dados criados na parte anterior e, em seguida, salvará o modelo treinado em uma tabela do SQL Server. Neste caso, os pacotes R já estão instalados com R Services (In-Database), então tudo pode ser feito a partir de SQL.

Neste artigo, você:

  • Criar e treinar um modelo usando um procedimento armazenado SQL
  • Salvar o modelo treinado em uma tabela SQL

Na primeira parte, você instalou os pré-requisitos e restaurou o banco de dados de exemplo.

Na segunda parte, você revisou os dados de amostra e gerou alguns gráficos.

Na terceira parte, você aprendeu como criar recursos a partir de dados brutos usando uma função Transact-SQL. Em seguida, você chamou essa função de um procedimento armazenado para criar uma tabela que contém os valores de recurso.

Na quinta parte, você aprenderá a operacionalizar os modelos que treinou e salvou na quarta parte.

Criar o procedimento armazenado

Ao chamar R do T-SQL, você usa o procedimento armazenado do sistema, sp_execute_external_script. No entanto, para processos que repete com frequência, como o retreinamento de um modelo, é mais fácil encapsular a chamada a sp_execute_external_script dentro de outro procedimento armazenado.

  1. No Management Studio, abra uma nova janela Consulta .

  2. Execute a instrução a seguir para criar o procedimento armazenado RTrainLogitModel. Este procedimento armazenado 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 alguns dados sobrem para testar o modelo, 70% dos dados são selecionados aleatoriamente na 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. Os resultados da consulta são armazenados na variável de entrada R padrão, InputDataset.

    • O script R chama a função R glm para criar o modelo de regressão logística.

      A variável binária inclinada é usada como o rótulo ou coluna de resultado, e o modelo é ajustado usando estas colunas de recurso: passenger_count, trip_distance, trip_time_in_secs e direct_distance.

    • O modelo treinado, salvo na variável logitObjR, é serializado e retornado como um parâmetro de saída.

Treinar e implantar o modelo R usando o procedimento armazenado

Como o procedimento armazenado já inclui uma definição dos dados de entrada, não é necessário fornecer uma consulta de entrada.

  1. Para treinar e implantar o modelo R, chame o procedimento armazenado e insira-o na tabela do 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);
    
  2. Observe a janela Mensagens do Management Studio para ver as mensagens que seriam canalizadas para o fluxo stdout de R, como esta mensagem:

    "Mensagem(ões) STDOUT do script externo: Linhas lidas: 1193025, Total de linhas processadas: 1193025, Tempo total de blocos: 0,093 segundos"

  3. Quando a instrução estiver concluída, abra a tabela nyc_taxi_models. O processamento dos dados e o ajuste do modelo podem demorar um pouco.

    Você pode ver que uma nova linha foi adicionada, 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óximos passos

Neste artigo, você:

  • Criou e treinou um modelo usando um procedimento armazenado SQL
  • Salvo o modelo treinado em uma tabela SQL