Sdílet prostřednictvím


Kurz jazyka R: Trénování a ukládání modelu

Platí pro: SQL Server 2016 (13.x) a novější verze Azure SQL Managed Instance

Ve čtvrté části této pětidílné série kurzů se naučíte trénovat model strojového učení pomocí jazyka R. Model vytrénujete pomocí datových funkcí, které jste vytvořili v předchozí části, a pak uložíte natrénovaný model do tabulky SQL Serveru. V tomto případě jsou balíčky R již nainstalovány se službami R (In-Database), takže všechno je možné provést z SQL.

V tomto článku:

  • Vytvoření a trénování modelu pomocí uložené procedury SQL
  • Uložení natrénovaného modelu do tabulky SQL

V první části jste nainstalovali požadavky a obnovili ukázkovou databázi.

Ve druhé části jste zkontrolovali ukázková data a vygenerovali několik grafů.

Ve třetí části jste se naučili vytvářet funkce z nezpracovaných dat pomocí funkce Transact-SQL. Potom jste tuto funkci volali z uložené procedury a vytvořili tabulku obsahující hodnoty funkcí.

V 5. části se dozvíte, jak zprovoznit modely, které jste natrénovali a uložili ve čtvrté části.

Vytvoření uložené procedury

Při volání jazyka R z T-SQL použijete systémovou uloženou proceduru sp_execute_external_script. U procesů, které často opakujete, například opětovné trénování modelu, je však jednodušší zapouzdření volání sp_execute_external_script do jiné uložené procedury.

  1. V sadě Management Studio otevřete nové okno dotazu .

  2. Spuštěním následujícího příkazu vytvořte uloženou proceduru RTrainLogitModel. Tato uložená procedura definuje vstupní data a pomocí glm vytvoří logistický regresní model.

    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
    
    • Aby se zajistilo, že některá data zůstanou na testování modelu, 70% dat jsou náhodně vybrány z tabulky dat taxislužby pro účely trénování.

    • Dotaz SELECT používá vlastní skalární funkci fnCalculateDistance k výpočtu přímé vzdálenosti mezi umístěními vyzvednutí a odkládacím umístěním. Výsledky dotazu jsou uloženy ve výchozí vstupní proměnné jazyka R. InputDataset

    • Skript jazyka R volá funkci R glm k vytvoření modelu logistické regrese.

      Binární proměnná tipped se používá jako popisek nebo sloupec výsledku a model je přizpůsoben pomocí těchto sloupců vlastností: passenger_count, trip_distance, trip_time_in_secs a direct_distance.

    • Trénovaný model uložený v proměnné logitObjR je serializován a vrácen jako výstupní parametr.

Trénování a nasazení modelu R pomocí uložené procedury

Protože uložená procedura již obsahuje definici vstupních dat, nemusíte zadávat vstupní dotaz.

  1. Pokud chcete vytrénovat a nasadit model R, zavolejte uloženou proceduru a vložte ji do databázové tabulky nyc_taxi_models, abyste ji mohli použít pro budoucí předpovědi:

    DECLARE @model VARBINARY(MAX);
    EXEC RTrainLogitModel @model OUTPUT;
    INSERT INTO nyc_taxi_models (name, model) VALUES('RTrainLogit_model', @model);
    
  2. Podívejte se na okno Zprávy v sadě Management Studio pro zprávy, které by se směrovaly do datového proudu stdout jazyka R, jako je tato zpráva:

    "Zprávy STDOUT z externího skriptu: Řádky přečtené: 1193025, celkový počet zpracovaných řádků: 1193025, celkový čas bloku dat: 0,093 sekund"

  3. Po dokončení příkazu otevřete tabulku nyc_taxi_models. Zpracování dat a přizpůsobení modelu může nějakou dobu trvat.

    Můžete vidět, že byl přidán jeden nový řádek, který obsahuje serializovaný model ve sloupcovém modelu a název modelu RTrainLogit_model v názvu sloupce.

    model                        name
    ---------------------------- ------------------
    0x580A00000002000302020....  RTrainLogit_model
    

V další části tohoto kurzu použijete natrénovaný model ke generování předpovědí.

Další kroky

V tomto článku:

  • Vytvoření a trénování modelu pomocí uložené procedury SQL
  • Uložili jste natrénovaný model do tabulky SQL.