Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik: Sql Server 2017 (14.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 a Python-csomagok scikit-learn és revoscalepy használatával. Ezek a Python-kódtárak már telepítve vannak az SQL Server gépi tanulással.
Betölti a modulokat, és meghívja a szükséges függvényeket a modell létrehozásához és betanítása egy SQL Server által tárolt eljárás használatával. A modellhez az oktatóanyag-sorozat korábbi részeiben megtervezett adatfunkciók szükségesek. Végül a betanított modellt egy SQL Server-táblába menti.
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 megvizsgálta 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 mintaadatok felosztása betanítási és tesztelési csoportokra
Hozzon létre egy PyTrainTestSplit nevű tárolt eljárást a nyctaxi_sample táblában lévő adatok két részre osztásához: nyctaxi_sample_training és nyctaxi_sample_testing.
A létrehozáshoz futtassa a következő kódot:
DROP PROCEDURE IF EXISTS PyTrainTestSplit; GO CREATE PROCEDURE [dbo].[PyTrainTestSplit] (@pct int) AS DROP TABLE IF EXISTS dbo.nyctaxi_sample_training SELECT * into nyctaxi_sample_training FROM nyctaxi_sample WHERE (ABS(CAST(BINARY_CHECKSUM(medallion,hack_license) as int)) % 100) < @pct DROP TABLE IF EXISTS dbo.nyctaxi_sample_testing SELECT * into nyctaxi_sample_testing FROM nyctaxi_sample WHERE (ABS(CAST(BINARY_CHECKSUM(medallion,hack_license) as int)) % 100) > @pct GOHa egyéni felosztással szeretné megosztani az adatokat, futtassa a tárolt eljárást, és adjon meg egy egész szám paramétert, amely a betanítási csoporthoz lefoglalandó adatok százalékos arányát jelöli. Az alábbi utasítás például az adatok 60%-át osztja ki a tanuló halmazhoz.
EXEC PyTrainTestSplit 60 GO
Logisztikai regressziós modell létrehozása
Az adatok előkészítése után használhatja egy modell betanítására. Ezt úgy teheti meg, hogy meghív egy tárolt eljárást, amely valamilyen Python-kódot futtat, a betanítási adattábla bemeneteként. Ebben az oktatóanyagban két modellt hoz létre, mindkettő bináris besorolási modellt:
- A pyTrainScikit tárolt eljárás egy tipp-előrejelzési modellt hoz létre a scikit-learn csomag használatával.
- A TrainTipPredictionModelRxPy tárolt eljárás egy tipp-előrejelzési modellt hoz létre a revoscalepy-csomag használatával.
Minden tárolt eljárás a megadott bemeneti adatokat használja egy logisztikai regressziós modell létrehozásához és betanításához. Minden Python-kód be van csomagolva a rendszer által tárolt eljárásba, sp_execute_external_script.
A modell új adatokon való újratanításának megkönnyítése érdekében a hívást egy másik tárolt eljárásba kell burkolni sp_execute_external_script , és paraméterként átadni az új betanítási adatokat. Ez a szakasz végigvezeti ezen a folyamaton.
PyTrainScikit
A Management Studióban nyisson meg egy új lekérdezési ablakot, és futtassa a következő utasítást a PyTrainScikit tárolt eljárás létrehozásához. A tárolt eljárás tartalmazza a bemeneti adatok definícióját, ezért nem kell bemeneti lekérdezést megadnia.
DROP PROCEDURE IF EXISTS PyTrainScikit; GO CREATE PROCEDURE [dbo].[PyTrainScikit] (@trained_model varbinary(max) OUTPUT) AS BEGIN EXEC sp_execute_external_script @language = N'Python', @script = N' import numpy import pickle from sklearn.linear_model import LogisticRegression ##Create SciKit-Learn logistic regression model X = InputDataSet[["passenger_count", "trip_distance", "trip_time_in_secs", "direct_distance"]] y = numpy.ravel(InputDataSet[["tipped"]]) SKLalgo = LogisticRegression() logitObj = SKLalgo.fit(X, y) ##Serialize model trained_model = pickle.dumps(logitObj) ', @input_data_1 = N' select tipped, fare_amount, passenger_count, trip_time_in_secs, trip_distance, dbo.fnCalculateDistance(pickup_latitude, pickup_longitude, dropoff_latitude, dropoff_longitude) as direct_distance from nyctaxi_sample_training ', @input_data_1_name = N'InputDataSet', @params = N'@trained_model varbinary(max) OUTPUT', @trained_model = @trained_model OUTPUT; ; END; GOA betanított modell nyc_taxi_models táblázatba való beszúrásához futtassa a következő SQL-utasításokat.
DECLARE @model VARBINARY(MAX); EXEC PyTrainScikit @model OUTPUT; INSERT INTO nyc_taxi_models (name, model) VALUES('SciKit_model', @model);Az adatok feldolgozása és a modell illesztése eltarthat néhány percig. Azok az üzenetek, amelyeket a Python stdout streamjének küldenének, megjelennek a Management Studio Üzenetek ablakában. Például:
STDOUT message(s) from external script: C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES\lib\site-packages\revoscalepyNyissa meg a táblázatot nyc_taxi_models. Láthatja, hogy egy új sor lett hozzáadva, amely az oszlopmodell szerializált modelljét tartalmazza.
SciKit_model 0x800363736B6C6561726E2E6C696E6561....
TrainTipPredictionModelRxPy
Ez a tárolt eljárás a revoscalepy Python-csomagot használja. Olyan objektumokat, átalakításokat és algoritmusokat tartalmaz, mint az R nyelv RevoScaleR-csomagjában .
A revoscalepy használatával távoli számítási környezeteket hozhat létre, adatokat helyezhet át a számítási környezetek között, átalakíthatja az adatokat, és prediktív modelleket taníthat be olyan népszerű algoritmusokkal, mint a logisztikai és lineáris regresszió, döntési fák stb. További információt az SQL Server revoscalepy moduljában és a revoscalepy függvényreferenciájában talál.
A Management Studióban nyisson meg egy új lekérdezési ablakot, és futtassa a következő utasítást a TrainTipPredictionModelRxPy tárolt eljárás létrehozásához. Mivel a tárolt eljárás már tartalmazza a bemeneti adatok definícióját, nem kell bemeneti lekérdezést megadnia.
DROP PROCEDURE IF EXISTS TrainTipPredictionModelRxPy; GO CREATE PROCEDURE [dbo].[TrainTipPredictionModelRxPy] (@trained_model varbinary(max) OUTPUT) AS BEGIN EXEC sp_execute_external_script @language = N'Python', @script = N' import numpy import pickle from revoscalepy.functions.RxLogit import rx_logit ## Create a logistic regression model using rx_logit function from revoscalepy package logitObj = rx_logit("tipped ~ passenger_count + trip_distance + trip_time_in_secs + direct_distance", data = InputDataSet); ## Serialize model trained_model = pickle.dumps(logitObj) ', @input_data_1 = N' select tipped, fare_amount, passenger_count, trip_time_in_secs, trip_distance, dbo.fnCalculateDistance(pickup_latitude, pickup_longitude, dropoff_latitude, dropoff_longitude) as direct_distance from nyctaxi_sample_training ', @input_data_1_name = N'InputDataSet', @params = N'@trained_model varbinary(max) OUTPUT', @trained_model = @trained_model OUTPUT; ; END; GOEz a tárolt eljárás a következő lépéseket hajtja végre a modellbetanítás részeként:
- A SELECT lekérdezés az fnCalculateDistance egyéni skaláris függvényt alkalmazza a felvételi és lerakási helyek közötti közvetlen távolság kiszámításához. A lekérdezés eredményei az alapértelmezett Python bemeneti változóban vannak tárolva.
InputDataset - 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.
- A betanított modell szerializálva van, és a Python változóban
logitObjvan tárolva. A T-SQL-kulcsszó KIMENETének hozzáadásával hozzáadhatja a változót a tárolt eljárás kimeneteként. A következő lépésben ezt a változót használja a modell bináris kódjának beszúrására egy adatbázistábla nyc_taxi_models. Ez a mechanizmus megkönnyíti a modellek tárolását és újbóli használatát.
- A SELECT lekérdezés az fnCalculateDistance egyéni skaláris függvényt alkalmazza a felvételi és lerakási helyek közötti közvetlen távolság kiszámításához. A lekérdezés eredményei az alapértelmezett Python bemeneti változóban vannak tárolva.
Futtassa a tárolt eljárást az alábbiak szerint, hogy a betanított revoscalepy modellt beszúrja a nyc_taxi_models táblázatba.
DECLARE @model VARBINARY(MAX); EXEC TrainTipPredictionModelRxPy @model OUTPUT; INSERT INTO nyc_taxi_models (name, model) VALUES('revoscalepy_model', @model);Az adatok feldolgozása és a modell illesztése eltarthat egy ideig. Azok az üzenetek, amelyeket a Python stdout streamjének küldenének, megjelennek a Management Studio Üzenetek ablakában. Például:
STDOUT message(s) from external script: C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES\lib\site-packages\revoscalepyNyissa meg a táblázatot nyc_taxi_models. Láthatja, hogy egy új sor lett hozzáadva, amely az oszlopmodell szerializált modelljét tartalmazza.
revoscalepy_model 0x8003637265766F7363616c....
Az oktatóanyag következő részében a betanított modellek használatával fog előrejelzéseket létrehozni.
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