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
Ebben a rövid útmutatóban létrehoz és betanít egy prediktív modellt a Python használatával. A modellt menti az SQL Server-példány egyik táblájába, majd a modellt felhasználva előrejelzi az új adatok értékeit az SQL Server Machine Learning Services, az Azure SQL Managed Instance Machine Learning Services vagy az SQL Server Big Data Clusters segítségével.
Két, SQL-ben futó tárolt eljárást fog létrehozni és végrehajtani. Az első a klasszikus Írisz virág adatkészletet használja, és létrehoz egy Naivve Bayes-modellt, amely egy íriszfajt jelez előre a virág jellemzői alapján. 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. A Python-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.
A rövid útmutató végrehajtásával a következőt fogja elsajátítani:
- Python-kód beágyazása tárolt eljárásba
- Bemeneti adatok átadása a kódnak a tárolt eljárás beviteli paraméterei révén
- Hogyan használják a tárolt eljárásokat a modellek üzembe helyezésekor?
Előfeltételek
A rövid útmutató futtatásához a következő előfeltételekre lesz szüksége.
SQL-adatbázis az alábbi platformok egyikén:
- SQL Server Machine Learning Services. A telepítéshez tekintse meg a Windows telepítési útmutatóját vagy a Linux telepítési útmutatóját.
- SQL Server Big Data-fürtök. Megtudhatja, hogyan engedélyezheti a Machine Learning Servicest az SQL Server Big Data-fürtökön.
- Azure SQL Managed Instance Machine Learning Services. További információt az Azure SQL Managed Instance Machine Learning Services áttekintésében talál.
Python-szkripteket tartalmazó SQL-lekérdezések futtatására szolgáló eszköz. Ez a gyors kezdési útmutató az Azure Data Studio használatát követi.
Az ebben a gyakorlatban használt mintaadatok az Írisz-mintaadatok. Kövesse az Iris demo adatainak utasításait a mintaadatbázis irissql létrehozásához.
Modelleket létrehozó tárolt eljárás létrehozása
Ebben a lépésben létrehoz egy tárolt eljárást, amely létrehoz egy modellt az eredmények előrejelzéséhez.
Nyissa meg az Azure Data Studiót, csatlakozzon az SQL-példányhoz, és nyisson meg egy új lekérdezési ablakot.
Csatlakozzon az irissql-adatbázishoz.
USE irissql GOMásolja a következő kódba egy új tárolt eljárás létrehozásához.
A végrehajtáskor ez az eljárás meghívja sp_execute_external_script egy Python-munkamenet indítására.
A Python-kódhoz szükséges bemenetek bemeneti paraméterekként lesznek átadva ezen a tárolt eljáráson. A kimenet egy betanított modell lesz, amely a Python scikit-learn kódtárán alapul a gépi tanulási algoritmushoz.
Ez a kód pickle használatával szerializálja a modellt. A modell betanítása a iris_data tábla 0–4. oszlopának adataival történik.
Az eljárás második részében látható paraméterek az adatbemeneteket és a modellkimeneteket ismertetik. A lehető legnagyobb mértékben azt szeretné, hogy a tárolt eljárásban futó Python-kód egyértelműen definiált bemenetekkel és kimenetekkel rendelkezzen, amelyek leképezik a tárolt eljárás bemeneteit és kimeneteit a futásidőben.
CREATE PROCEDURE generate_iris_model (@trained_model VARBINARY(max) OUTPUT) AS BEGIN EXECUTE sp_execute_external_script @language = N'Python' , @script = N' import pickle from sklearn.naive_bayes import GaussianNB GNB = GaussianNB() trained_model = pickle.dumps(GNB.fit(iris_data[["Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width"]], iris_data[["SpeciesId"]].values.ravel())) ' , @input_data_1 = N'select "Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width", "SpeciesId" from iris_data' , @input_data_1_name = N'iris_data' , @params = N'@trained_model varbinary(max) OUTPUT' , @trained_model = @trained_model OUTPUT; END; GOEllenőrizze, hogy létezik-e a tárolt eljárás.
Ha az előző lépés T-SQL-szkriptje hiba nélkül futott, a rendszer létrehoz egy új, generate_iris_model nevű tárolt eljárást, és hozzáadja az irissql-adatbázishoz . A tárolt eljárásokat az Azure Data Studio Object Explorerprogramozhatósága alatt találja.
Modellek létrehozására és betanításaira vonatkozó eljárás végrehajtása
Ebben a lépésben végrehajtja a beágyazott kód futtatásához szükséges eljárást, és kimenetként létrehoz egy betanított és szerializált modellt.
Az adatbázisban újrafelhasználásra tárolt modellek bájtfolyamként szerializálva vannak, és egy adatbázistábla VARBINARY(MAX) oszlopában vannak tárolva. A modell létrehozása, betanítása, szerializálása és adatbázisba való mentése után más eljárások vagy a PREDICT T-SQL függvény meghívhatja a számítási feladatok pontozása során.
Futtassa a következő szkriptet az eljárás végrehajtásához. A tárolt eljárás végrehajtására vonatkozó konkrét utasítás a negyedik sorban található
EXECUTE.Ez az adott szkript törli az azonos nevű meglévő modellt ("Naive Bayes"), hogy helyet adjon az újaknak, amelyeket ugyanazzal az eljárással hozott létre. A modell törlése nélkül hiba történik, amely szerint az objektum már létezik. A modell egy iris_models nevű táblában van tárolva, amely az irissql-adatbázis létrehozásakor lesz kiépítve.
DECLARE @model varbinary(max); DECLARE @new_model_name varchar(50) SET @new_model_name = 'Naive Bayes' EXECUTE generate_iris_model @model OUTPUT; DELETE iris_models WHERE model_name = @new_model_name; INSERT INTO iris_models (model_name, model) values(@new_model_name, @model); GOEllenőrizze, hogy a modell be lett-e szúrva.
SELECT * FROM dbo.iris_modelsResults
model_name modell Naive Bayes 0x800363736B6C6561726E2E6E616976655F62617965730A...
Tárolt eljárás létrehozása és végrehajtása előrejelzések létrehozásához
Most, hogy létrehozott, betanított és mentett egy modellt, lépjen tovább a következő lépésre: hozzon létre egy tárolt eljárást, amely előrejelzéseket hoz létre. Ezt úgy teheti meg, hogy meghívja a sp_execute_external_script, hogy elindítson egy Python-szkriptet, amely betölti a szerializált modellt, és új adatokat ad meg a kiértékeléshez.
Futtassa a következő kódot a pontozást végrehajtó tárolt eljárás létrehozásához. Futásidőben ez az eljárás betölt egy bináris modellt, bemenetként oszlopokat
[1,2,3,4]használ, és kimenetként adja meg az oszlopokat[0,5,6].CREATE PROCEDURE predict_species (@model VARCHAR(100)) AS BEGIN DECLARE @nb_model VARBINARY(max) = ( SELECT model FROM iris_models WHERE model_name = @model ); EXECUTE sp_execute_external_script @language = N'Python' , @script = N' import pickle irismodel = pickle.loads(nb_model) species_pred = irismodel.predict(iris_data[["Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width"]]) iris_data["PredictedSpecies"] = species_pred OutputDataSet = iris_data[["id","SpeciesId","PredictedSpecies"]] print(OutputDataSet) ' , @input_data_1 = N'select id, "Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width", "SpeciesId" from iris_data' , @input_data_1_name = N'iris_data' , @params = N'@nb_model varbinary(max)' , @nb_model = @nb_model WITH RESULT SETS(( "id" INT , "SpeciesId" INT , "SpeciesId.Predicted" INT )); END; GOHajtsa végre a tárolt eljárást, és adja meg a modell "Naive Bayes" nevét, hogy az eljárás tudja, melyik modellt használja.
EXECUTE predict_species 'Naive Bayes'; GOA tárolt eljárás futtatásakor a rendszer egy Python data.frame-et ad vissza. A T-SQL ezen sora adja meg a visszaadott eredmények sémáját:
WITH RESULT SETS ( ("id" int, "SpeciesId" int, "SpeciesId.Predicted" int));. Az eredményeket beszúrhatja egy új táblába, vagy visszaküldheti őket egy alkalmazásnak.
Az eredmények 150 előrejelzést adnak a fajokról, amelyek virágjellemzőket használnak bemenetként. A megfigyelések többsége esetében az előrejelzett fajok megegyeznek a tényleges fajokkal.
Ez a példa a Python írisz adatkészletének betanításhoz és pontozáshoz való használatával lett egyszerűbb. Egy tipikusabb megközelítés egy SQL-lekérdezés futtatásával lekérné az új adatokat, és ezt a Pythonba adná át.
InputDataSet
Conclusion
Ebben a gyakorlatban megtanulta, hogyan hozhat létre különböző feladatokhoz dedikált tárolt eljárásokat, ahol minden tárolt eljárás a rendszer által tárolt eljárást sp_execute_external_script használta egy Python-folyamat elindításához. A Python-folyamat bemenetei paraméterként lesznek átadva sp_execute_external . A Python-szkript és az adatbázis adatváltozói is bemenetként lesznek átadva.
Általában csak csiszolt Python-kóddal vagy egyszerű Python-kóddal érdemes tervezni az Azure Data Studio használatát, amely soralapú kimenetet ad vissza. Az Azure Data Studio eszközként támogatja az olyan lekérdezési nyelveket, mint a T-SQL, és lapított sorkészleteket ad vissza. Ha a kód olyan vizuális kimenetet hoz létre, mint a pontdiagram vagy a hisztogram, külön eszközre vagy végfelhasználói alkalmazásra van szükség, amely a tárolt eljáráson kívül is megjelenítheti a képet.
Egyes Python-fejlesztők számára, akik a műveletek egy sorát kezelő all-inclusive szkriptek írására használják, szükségtelennek tűnhet a feladatok külön eljárásokba szervezése. Az oktatásnak és a pontozásnak azonban különböző alkalmazási területei vannak. Ha különválasztja őket, az egyes tevékenységeket különböző ütemezési és hatóköri engedélyekre helyezheti az egyes műveletekre.
Végső előnye, hogy a folyamatok paraméterekkel módosíthatók. Ebben a gyakorlatban a modellt létrehozó Python-kód (ebben a példában "Naive Bayes" néven) egy második tárolt eljárás bemeneteként lett átadva, amely pontozási folyamatban hívja meg a modellt. Ez a gyakorlat csak egy modellt használ, de el tudja képzelni, hogy a modell paraméterezése egy pontozási feladatban hogyan tenné hasznosabbá a szkriptet.
Következő lépések
További információ a Python sql-alapú gépi tanulással történő oktatóanyagaival kapcsolatban: