Megosztás:


R-oktatóanyag: Modell betanítása és mentése

A következőkre vonatkozik: Sql Server 2016 (13.x) és újabb verziók felügyelt Azure SQL-példány

Az ötrészes oktatóanyag-sorozat negyedik részében megtanulhatja, hogyan taníthat be gépi tanulási modellt R használatával. Betanítsa a modellt az előző részben létrehozott adatfunkciókkal, majd mentse a betanított modellt egy SQL Server-táblába. Ebben az esetben az R-csomagok már telepítve vannak az R-szolgáltatásokkal (In-Database), így minden elvégezhető az SQL-ből.

Ebben a cikkben a következőket fogja megismerni:

  • Modell létrehozása és betanítása TÁROLT SQL-eljárással
  • A betanított modell mentése SQL-táblába

Az első részben telepítette az előfeltételeket, és visszaállította a mintaadatbázist.

A második részben áttekintette a mintaadatokat, és létrehozott néhány diagramot.

A harmadik részben megtanulta, hogyan hozhat létre funkciókat nyers adatokból egy Transact-SQL függvény használatával. Ezt követően egy tárolt eljárásból meghívta ezt a függvényt, hogy létrehozhasson egy táblát, amely tartalmazza a funkcióértékeket.

Az ötödik részben megtanulhatja, hogyan lehet üzembe helyezni a negyedik részben betanított és mentett modelleket.

A tárolt eljárás létrehozása

Amikor T-SQL-ből R-t hív meg, a rendszerben tárolt eljárást, sp_execute_external_script használja. A gyakran ismétlődő folyamatok, például egy modell újratanítása esetén azonban egyszerűbb a hívás sp_execute_external_script beágyazása egy másik tárolt eljárásba.

  1. A Management Studióban nyisson meg egy új Lekérdezés ablakot.

  2. Futtassa a következő utasítást a tárolt RTrainLogitModel eljárás létrehozásához. Ez a tárolt eljárás határozza meg a bemeneti adatokat, és a glm használatával hoz létre logisztikai regressziós modellt.

    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
    
    • Annak érdekében, hogy bizonyos adatok megmaradjanak a modell teszteléséhez, az adatok 70% véletlenszerűen vannak kiválasztva a taxi adattáblából betanítási célokra.

    • A SELECT lekérdezés az fnCalculateDistance egyéni skaláris függvényt használja a felvételi és a leadási helyek közötti közvetlen távolság kiszámításához. A lekérdezés eredményei az alapértelmezett R bemeneti változóban vannak tárolva. InputDataset

    • Az R-szkript meghívja a glm R függvényt a logisztikai regressziós modell létrehozásához.

      A billentett bináris változót címke - vagy eredményoszlopként használja a rendszer, és a modell a következő funkcióoszlopok használatával illeszkedik: passenger_count, trip_distance, trip_time_in_secs és direct_distance.

    • Az R változóban logitObjmentett betanított modell szerializálva van, és kimeneti paraméterként adja vissza.

Az R-modell betanítása és üzembe helyezése a tárolt eljárással

Mivel a tárolt eljárás már tartalmazza a bemeneti adatok definícióját, nem kell bemeneti lekérdezést megadnia.

  1. Az R-modell betanítása és üzembe helyezése érdekében hívja meg a tárolt eljárást, és szúrja be az adatbázistáblába nyc_taxi_models, hogy későbbi előrejelzésekhez használhassa:

    DECLARE @model VARBINARY(MAX);
    EXEC RTrainLogitModel @model OUTPUT;
    INSERT INTO nyc_taxi_models (name, model) VALUES('RTrainLogit_model', @model);
    
  2. Tekintse meg a Management Studio Üzenetek ablakát az R stdout streambe csövezett üzenetekhez, például az alábbi üzenethez:

    "STDOUT-üzenet külső szkriptből: Sorok olvasása: 1193025, Feldolgozott sorok teljes száma: 1193025, Teljes adattömbidő: 0,093 másodperc"

  3. Amikor az utasítás befejeződött, nyissa meg a táblát nyc_taxi_models. Az adatok feldolgozása és a modell illesztése eltarthat egy ideig.

    Láthatja, hogy egy új sor lett hozzáadva, amely tartalmazza az oszlop model szerializált modelljét, és a modell nevét RTrainLogit_model az oszlop name-ban.

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

Az oktatóanyag következő részében a betanított modell használatával fog előrejelzéseket generálni.

Következő lépések

Ebben a cikkben a következőt találja:

  • Modell létrehozása és betanítása tárolt SQL-eljárással
  • A betanított modell mentése SQL-táblába