Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: SQL Server 2017 (14.x) i nowsze wersje
usługi Azure SQL Managed Instance
W tym przewodniku szybkiego startu utworzysz i wytrenujesz model predykcyjny przy użyciu Pythona. Zapiszesz model w tabeli w wystąpieniu programu SQL Server, a następnie użyjesz modelu do przewidywania wartości z nowych danych przy użyciu usług SQL Server Machine Learning Services, azure SQL Managed Instance Machine Learning Services lub klastrów danych big data programu SQL Server.
Utworzysz i wykonasz dwie procedury składowane działające w SQL. Pierwszy używa klasycznego zestawu danych kwiatów Iris i generuje model Naïve Bayes do przewidywania gatunku Iris na podstawie cech kwiatów. Druga procedura dotyczy oceniania — wywołuje model wygenerowany w pierwszej procedurze, aby wygenerować zestaw przewidywań na podstawie nowych danych. Umieszczając kod języka Python w procedurze składowanej SQL, operacje są zawarte w języku SQL, są wielokrotnego użytku i mogą być wywoływane przez inne procedury składowane i aplikacje klienckie.
Wykonując czynności z tego szybkiego przewodnika, dowiesz się:
- Jak osadzić kod języka Python w procedurze składowanej
- Jak przekazać parametry do kodu za pośrednictwem parametrów w procedurze składowanej
- Jak procedury przechowywane są używane do wdrażania modeli
Wymagania wstępne
Aby uruchomić szybki start, potrzebne są następujące prerekwizyty.
Baza danych SQL na jednej z następujących platform:
- Sql Server Machine Learning Services. Aby zainstalować, zobacz Przewodnik instalacji systemu Windows lub Przewodnik instalacji systemu Linux.
- Klastry danych big data programu SQL Server. Zobacz, jak włączyć usługi Machine Learning Services w klastrach danych big data programu SQL Server.
- Azure SQL Managed Instance Machine Learning Services. Aby uzyskać informacje, zobacz Omówienie usług Azure SQL Managed Instance Machine Learning Services.
Narzędzie do uruchamiania zapytań SQL zawierających skrypty języka Python. W tym przewodniku Szybki start jest używany program Azure Data Studio.
Przykładowe dane używane w tym ćwiczeniu to przykładowe dane Iris. Postępuj zgodnie z instrukcjami w artykule Iris demo data (Pokazowe dane Iris ), aby utworzyć przykładową bazę danych irissql.
Utwórz procedurę składowaną, która generuje modele
W tym kroku utworzysz procedurę składowaną, która generuje model do przewidywania wyników.
Otwórz narzędzie Azure Data Studio, połącz się z wystąpieniem SQL i otwórz nowe okno zapytania.
Połącz się z bazą danych irissql.
USE irissql GOSkopiuj poniższy kod, aby utworzyć nową procedurę składowaną.
Po wykonaniu tej procedury wywołuje sp_execute_external_script , aby rozpocząć sesję języka Python.
Dane wejściowe wymagane przez kod języka Python są przekazywane jako parametry wejściowe w tej procedurze składowanej. Dane wyjściowe to trenowany model w oparciu o bibliotekę scikit-learn języka Python dla algorytmu uczenia maszynowego.
Ten kod używa metody pickle do serializacji modelu. Model zostanie wytrenowany przy użyciu danych z kolumn od 0 do 4 z tabeli iris_data .
Parametry widoczne w drugiej części procedury zawierają dane wejściowe i dane wyjściowe modelu. W miarę możliwości, należy zapewnić, aby kod języka Python uruchamiany w procedurze składowanej miał jasno zdefiniowane dane wejściowe i wyjściowe, które są mapowane na dane wejściowe i wyjściowe procedury składowanej przekazywane w czasie wykonywania.
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; GOSprawdź, czy procedura składowana istnieje.
Jeśli skrypt T-SQL z poprzedniego kroku został uruchomiony bez błędu, zostanie utworzona nowa procedura składowana o nazwie generate_iris_model i dodana do bazy danych irissql . Procedury składowane można znaleźć w Eksploratorze obiektów programu Azure Data Studio w obszarze Programowanie.
Wykonaj procedurę tworzenia i trenowania modeli
W tym kroku wykonasz procedurę uruchamiania osadzonego kodu, tworząc wytrenowany i serializowany model jako dane wyjściowe.
Modele przechowywane do ponownego użycia w bazie danych są serializowane jako strumień bajtów i przechowywane w kolumnie VARBINARY(MAX) w tabeli bazy danych. Po utworzeniu, wytrenowaniu, serializowaniu i zapisaniu w bazie danych model może być wywoływany przez inne procedury lub przez funkcję PREDICT T-SQL w zadaniach obliczeniowych oceniających.
Uruchom następujący skrypt, aby wykonać procedurę. Konkretna instrukcja wykonywania procedury składowanej znajduje się
EXECUTEw czwartym wierszu.Ten konkretny skrypt usuwa istniejący model o tej samej nazwie ("Naiwny Bayes"), aby utworzyć miejsce dla nowych utworzonych przez ponowne uruchomienie tej samej procedury. Bez usuwania modelu występuje błąd informujący, że obiekt już istnieje. Model jest przechowywany w tabeli o nazwie iris_models, aprowizowanej podczas tworzenia bazy danych irissql .
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); GOSprawdź, czy model został wstawiony.
SELECT * FROM dbo.iris_modelsResults
model_name model Naiwny klasyfikator Bayesa 0x800363736B6C6561726E2E6E616976655F62617965730A...
Tworzenie i wykonywanie procedury składowanej na potrzeby generowania przewidywań
Po utworzeniu, przeszkoleniu i zapisaniu modelu przejdź do następnego kroku: tworzenie procedury składowanej, która generuje przewidywania. Zrobisz to, wywołując polecenie sp_execute_external_script , aby uruchomić skrypt języka Python, który ładuje serializowany model i przekazuje nowe dane wejściowe do oceny.
Uruchom następujący kod, aby utworzyć procedurę składowaną, która wykonuje ocenianie. W czasie wykonywania ta procedura spowoduje załadowanie modelu binarnego, użycie kolumn
[1,2,3,4]jako danych wejściowych i określenie kolumn[0,5,6]jako danych wyjściowych.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; GOAby procedura wiedziała, którego modelu użyć, wykonaj procedurę składowaną, podając nazwę modelu "Naive Bayes".
EXECUTE predict_species 'Naive Bayes'; GOPo uruchomieniu procedury składowanej zwracany jest obiekt data.frame w Pythonie. Ten wiersz języka T-SQL określa schemat zwracanych wyników:
WITH RESULT SETS ( ("id" int, "SpeciesId" int, "SpeciesId.Predicted" int));. Wyniki można wstawić do nowej tabeli lub zwrócić je do aplikacji.
Wyniki to 150 prognoz dotyczących gatunków używających cech kwiatowych jako danych wejściowych. W przypadku większości obserwacji przewidywane gatunki są zgodne z rzeczywistymi gatunkami.
Ten przykład został uproszczony dzięki użyciu zestawu danych iris w Pythonie do trenowania i oceniania. Bardziej typowe podejście polegałoby na uruchomieniu zapytania SQL w celu pobrania nowych danych i przekazaniu ich do języka Python jako
InputDataSet.
Podsumowanie
W tym ćwiczeniu przedstawiono sposób tworzenia procedur składowanych przeznaczonych dla różnych zadań, w których każda procedura składowana korzystała z procedury składowanej sp_execute_external_script systemu w celu rozpoczęcia procesu języka Python. Dane wejściowe do procesu języka Python są przekazywane sp_execute_external jako parametry. Zarówno sam skrypt języka Python, jak i zmienne danych w bazie danych są przekazywane jako dane wejściowe.
Ogólnie rzecz biorąc, należy zaplanować korzystanie tylko z narzędzia Azure Data Studio z dopracowanym kodem w języku Python lub prostym kodem języka Python, który zwraca dane wyjściowe oparte na wierszach. Jako narzędzie usługa Azure Data Studio obsługuje języki zapytań, takie jak T-SQL, i zwraca spłaszczone zestawy wierszy. Jeśli kod generuje dane wyjściowe wizualne, takie jak wykres punktowy lub histogram, potrzebne jest oddzielne narzędzie lub aplikacja użytkownika końcowego, która może renderować obraz poza procedurą składowaną.
W przypadku niektórych deweloperów języka Python, którzy są przyzwyczajeni do pisania skryptów inkluzywnych obsługujących szereg operacji, organizowanie zadań w oddzielne procedury może wydawać się niepotrzebne. Jednak szkolenie i ocenianie mają różne przypadki użycia. Oddzielając je, można umieścić każde zadanie w innym harmonogramie i przypisać odpowiednie uprawnienia do każdej operacji.
Ostateczną korzyścią jest to, że procesy można modyfikować przy użyciu parametrów. W tym ćwiczeniu kod języka Python, który utworzył model (o nazwie "Naive Bayes" w tym przykładzie) został przekazany jako dane wejściowe do drugiej procedury składowanej wywołującej model w procesie oceniania. W tym ćwiczeniu jest używany tylko jeden model, ale można sobie wyobrazić, jak parametryzacja modelu w zadaniu oceniania sprawi, że ten skrypt będzie bardziej przydatny.
Dalsze kroki
Aby uzyskać więcej informacji na temat samouczków dotyczących języka Python z uczeniem maszynowym SQL, zobacz: