Megosztás a következőn keresztül:


Rövid útmutató: Prediktív modell létrehozása és pontszáma az R-ben SQL Machine Learning használatával

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

Ebben a rövid útmutatóban létrehoz és betanít egy prediktív modellt T használatával. A modellt menti az SQL Server-példány egy táblájába, majd a modellel előrejelzi az új adatok értékeit az SQL Server Machine Learning Services vagy a Big Data klaszterekben.

Ebben a rövid útmutatóban létrehoz és betanít egy prediktív modellt a T használatával. A modellt az SQL Server-példány egy táblájához menti, majd a modell használatával előrejelzi az új adatok értékeit SQL Server Machine Learning Services.

Ebben a rövid útmutatóban létrehoz és betanít egy prediktív modellt a T használatával. A modellt az SQL Server-példány egy táblájához menti, majd a modell használatával előrejelzi az új adatok értékeit SQL Server R Services.

Ebben a rövid útmutatóban létrehoz és betanít egy prediktív modellt a T használatával. A modellt az SQL Server-példány egy táblájához menti, majd a modell használatával előrejelzi az új adatok értékeit Azure SQL Managed Instance Machine Learning Services.

Két, SQL-ben futó tárolt eljárást fog létrehozni és végrehajtani. Az első az R-hez mellékelt mtcarokat adatkészletet használja, és létrehoz egy egyszerű, általánosított lineáris modellt (GLM), amely előrejelzi annak valószínűségét, hogy a jármű kézi sebességváltóval van felszerelve. A második eljárás a pontozás – meghívja az első eljárásban létrehozott modellt, hogy új adatokon alapuló előrejelzéseket adjon ki. Az R-kód SQL-ben tárolt eljárásban való elhelyezésével a műveletek az SQL-ben találhatók, újrafelhasználhatók, és más tárolt eljárások és ügyfélalkalmazások is meghívhatók.

Borravaló

Ha lineáris modelleken frissítőre van szüksége, próbálja ki ezt az oktatóanyagot, amely leírja a modell rxLinMod használatával történő illesztésének folyamatát: Lineáris modellek illesztése

A rövid útmutató végrehajtásával a következőt fogja elsajátítani:

  • R-kód beágyazása tárolt eljárásba
  • Hogyan adhatók át a bemenetek a kódnak a tárolt eljárás bemenetein keresztül
  • Hogyan használják a tárolt eljárásokat a modellek üzembe helyezésekor?

Előfeltételek

A gyors kezdés futtatásához a következő előfeltételekre van szüksége.

  • R-szkripteket tartalmazó SQL-lekérdezések futtatására szolgáló eszköz. Ez a rövid útmutató Azure Data Studiohasznál.

A modell létrehozása

A modell létrehozásához forrásadatokat fog létrehozni a betanításhoz, létrehozza a modellt, és betanítja az adatokkal, majd egy adatbázisban tárolja a modellt, ahol új adatokkal hozhat létre előrejelzéseket.

A forrásadatok létrehozása

  1. Nyissa meg az Azure Data Studiót, csatlakozzon a példányához, és nyisson meg egy új lekérdezési ablakot.

  2. Hozzon létre egy táblázatot a betanítási adatok mentéséhez.

    CREATE TABLE dbo.MTCars(
        mpg decimal(10, 1) NOT NULL,
        cyl int NOT NULL,
        disp decimal(10, 1) NOT NULL,
        hp int NOT NULL,
        drat decimal(10, 2) NOT NULL,
        wt decimal(10, 3) NOT NULL,
        qsec decimal(10, 2) NOT NULL,
        vs int NOT NULL,
        am int NOT NULL,
        gear int NOT NULL,
        carb int NOT NULL
    );
    
  3. Szúrja be az adatokat a beépített adatkészlet mtcars-ból.

    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';
    

    Borravaló

    Az R futtatókörnyezet számos, kicsi és nagy adatkészletet tartalmaz. Az R-vel telepített adathalmazok listájának lekéréséhez írja be library(help="datasets") egy R parancssorból.

A modell létrehozása és betanítása

Az autó sebességadatai két oszlopot tartalmaznak, mindkettő numerikus: lóerő (hp) és súly (wt). Ezekből az adatokból létrehoz egy általános lineáris modellt (GLM), amely megbecsüli annak valószínűségét, hogy egy jármű manuális átvitelsel lett felszerelve.

A modell létrehozásához meg kell határoznia az R-kódban található képletet, és bemeneti paraméterként kell átadnia az adatokat.

DROP PROCEDURE IF EXISTS generate_GLM;
GO
CREATE PROCEDURE generate_GLM
AS
BEGIN
    EXEC sp_execute_external_script
    @language = N'R'
    , @script = N'carsModel <- glm(formula = am ~ hp + wt, data = MTCarsData, family = binomial);
        trained_model <- data.frame(payload = as.raw(serialize(carsModel, connection=NULL)));'
    , @input_data_1 = N'SELECT hp, wt, am FROM MTCars'
    , @input_data_1_name = N'MTCarsData'
    , @output_data_1_name = N'trained_model'
    WITH RESULT SETS ((model VARBINARY(max)));
END;
GO
  • A glm első argumentuma a képlet paramétere, amely meghatározza, hogy am a hp + wt-től függ.
  • A bemeneti adatokat az SQL-lekérdezés által kitöltött MTCarsDataváltozó tárolja. Ha nem rendel hozzá konkrét nevet a bemeneti adatokhoz, az alapértelmezett változó neve InputDataSetlesz.

A modell tárolása az adatbázisban

Ezután tárolja a modellt egy adatbázisban, hogy előrejelzéshez vagy újratanításhoz használhassa.

  1. Hozzon létre egy táblát a modell tárolásához.

    A modellt létrehozó R-csomag kimenete általában bináris objektum. Ezért a modell tárolására szolgáló táblának varbinary(max) típusú oszlopot kell megadnia.

    CREATE TABLE GLM_models (
        model_name varchar(30) not null default('default model') primary key,
        model varbinary(max) not null
    );
    
  2. Futtassa a következő Transact-SQL utasítást a tárolt eljárás meghívásához, a modell létrehozásához és a létrehozott táblába mentéséhez.

    INSERT INTO GLM_models(model)
    EXEC generate_GLM;
    

    Borravaló

    Ha másodszor futtatja ezt a kódot, a következő hibaüzenet jelenik meg: "Az ELSŐDLEGES KULCS kényszerének megsértése... Nem lehet duplikált kulcsot beszúrni az objektum dbo.stopping_distance_models". A hiba elkerülésének egyik lehetősége az egyes új modellek nevének frissítése. Módosíthatja például a nevet leíróbbra, és belefoglalhatja a modell típusát, a létrehozás napját és így tovább.

    UPDATE GLM_models
    SET model_name = 'GLM_' + format(getdate(), 'yyyy.MM.HH.mm', 'en-gb')
    WHERE model_name = 'default model'
    

Az új adatok értékelése a betanított modell használatával

Értékelés az adatelemzésben használt kifejezés, amely előrejelzések, valószínűségek vagy más értékek generálását jelenti a betanított modellbe újonnan bevitt adatok alapján. Az előző szakaszban létrehozott modellt fogja használni az új adatokkal kapcsolatos előrejelzések pontozására.

Új adattáblázat létrehozása

Először hozzon létre egy új adatokat tartalmazó táblát.

CREATE TABLE dbo.NewMTCars(
	hp INT NOT NULL
	, wt DECIMAL(10,3) NOT NULL
	, am INT NULL
)
GO

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)
GO

Manuális átvitel előrejelzése

Ha a modell alapján szeretne előrejelzéseket lekérni, írjon egy SQL-szkriptet, amely a következőket teszi:

  1. Megkapja a kívánt modellt
  2. Lekéri az új bemeneti adatokat
  3. A modellel kompatibilis R-előrejelzési függvény meghívása

A táblázat idővel több R-modellt is tartalmazhat, amelyek mindegyike különböző paraméterekkel vagy algoritmusokkal készült, vagy különböző adathalmazokra van betanítve. Ebben a példában a default modelnevű modellt fogjuk használni.

DECLARE @glmmodel varbinary(max) = 
    (SELECT model FROM dbo.GLM_models WHERE model_name = 'default model');

EXEC sp_execute_external_script
    @language = N'R'
    , @script = N'
            current_model <- unserialize(as.raw(glmmodel));
            new <- data.frame(NewMTCars);
            predicted.am <- predict(current_model, new, type = "response");
            str(predicted.am);
            OutputDataSet <- cbind(new, predicted.am);
            '
    , @input_data_1 = N'SELECT hp, wt FROM dbo.NewMTCars'
    , @input_data_1_name = N'NewMTCars'
    , @params = N'@glmmodel varbinary(max)'
    , @glmmodel = @glmmodel
WITH RESULT SETS ((new_hp INT, new_wt DECIMAL(10,3), predicted_am DECIMAL(10,3)));

A fenti szkript a következő lépéseket hajtja végre:

  • A SELECT utasítással egyetlen modellt kérhet le a táblából, és bemeneti paraméterként adja át.

  • Miután lekérte a modellt a táblából, hívja meg a modell unserialize függvényét.

  • Alkalmazza a predict függvényt megfelelő argumentumokkal a modellre, és adja meg az új bemeneti adatokat.

Jegyzet

A példában a str függvény a tesztelési fázisban lesz hozzáadva, hogy ellenőrizze az R-ből visszaadott adatok sémáját. Az utasítást később eltávolíthatja.

Az R-szkriptben használt oszlopnevek nem feltétlenül lesznek átadva a tárolt eljárás kimenetének. Itt a WITH RESULTS záradékot használjuk néhány új oszlopnév definiálásához.

Eredmények

Kézi átviteli valószínűségének előrejelzésére szolgáló eredményhalmaz

A PREDICT (Transact-SQL) utasítással előrejelzett értéket vagy pontszámot is létrehozhat egy tárolt modell alapján.

Következő lépések

Az SQL Machine Learning R-hez készült oktatóanyagokkal kapcsolatos további információkért lásd: