Udostępnij za pomocą


Pokazowe dane zbioru Iris dla samouczków w języku Python i R z uczeniem maszynowym SQL

Dotyczy: SQL Server 2016 (13.x) i nowsze wersje usługi Azure SQL Managed Instance

W tym ćwiczeniu utwórz bazę danych do przechowywania danych z zestawu danych i modeli Iris flower na podstawie tych samych danych. Zestaw danych Iris jest uwzględniany zarówno w dystrybucjach R i Pythona, i jest używany w samouczkach dotyczących uczenia maszynowego SQL.

Aby ukończyć to ćwiczenie, należy mieć program SQL Server Management Studio (SSMS) lub inne narzędzie, które może uruchamiać zapytania T-SQL.

Samouczki i szybkie starty używające tego zestawu danych obejmują następujące elementy:

Tworzenie bazy danych

  1. Uruchom program SQL Server Management Studio i otwórz nowe okno Zapytanie .

  2. Utwórz nową bazę danych dla tego projektu i zmień kontekst okna Zapytania , aby użyć nowej bazy danych.

    CREATE DATABASE irissql
    GO
    USE irissql
    GO
    
  3. Dodaj puste tabele: jedną do przechowywania danych i jedną do przechowywania wytrenowanych modeli. Tabela iris_models służy do przechowywania serializowanych modeli generowanych w innych ćwiczeniach.

    Poniższy kod tworzy tabelę dla danych treningowych.

    DROP TABLE IF EXISTS iris_data;
    GO
    CREATE TABLE iris_data (
      id INT NOT NULL IDENTITY PRIMARY KEY
      , "Sepal.Length" FLOAT NOT NULL, "Sepal.Width" FLOAT NOT NULL
      , "Petal.Length" FLOAT NOT NULL, "Petal.Width" FLOAT NOT NULL
      , "Species" VARCHAR(100) NOT NULL, "SpeciesId" INT NOT NULL
    );
    
  4. Uruchom następujący kod, aby utworzyć tabelę używaną do przechowywania wytrenowanego modelu. Aby zapisać modele języka Python (lub R) w programie SQL Server, muszą być serializowane i przechowywane w kolumnie typu varbinary(max).

    DROP TABLE IF EXISTS iris_models;
    GO
    
    CREATE TABLE iris_models (
      model_name VARCHAR(50) NOT NULL DEFAULT('default model') PRIMARY KEY,
      model VARBINARY(MAX) NOT NULL
    );
    GO
    

    Oprócz zawartości modelu zazwyczaj można również dodawać kolumny dla innych przydatnych metadanych, takich jak nazwa modelu, data jego wytrenowania, algorytm źródłowy i parametry, dane źródłowe itd. Na razie zachowamy prostotę i użyjemy tylko nazwy modelu.

Wypełnianie tabeli

Wbudowane dane dotyczące irysów można uzyskać z języka R lub języka Python. Za pomocą języka Python lub R można załadować dane do ramki danych, a następnie wstawić je do tabeli w bazie danych. Przenoszenie danych treningowych z sesji zewnętrznej do tabeli jest procesem wieloetapowym:

  • Zaprojektuj procedurę składowaną, która pobiera wymagane dane.
  • Uruchom procedurę składowaną, aby pobrać dane.
  • Skonstruuj instrukcję INSERT, aby określić miejsce zapisania pobranych danych.
  1. W systemach z integracją języka Python utwórz następującą procedurę składowaną, która używa kodu języka Python do załadowania danych.

    CREATE PROCEDURE get_iris_dataset
    AS
    BEGIN
    EXEC sp_execute_external_script @language = N'Python', 
    @script = N'
    from sklearn import datasets
    iris = datasets.load_iris()
    iris_data = pandas.DataFrame(iris.data)
    iris_data["Species"] = pandas.Categorical.from_codes(iris.target, iris.target_names)
    iris_data["SpeciesId"] = iris.target
    ', 
    @input_data_1 = N'', 
    @output_data_1_name = N'iris_data'
    WITH RESULT SETS (("Sepal.Length" float not null, "Sepal.Width" float not null, "Petal.Length" float not null, "Petal.Width" float not null, "Species" varchar(100) not null, "SpeciesId" int not null));
    END;
    GO
    

    Po uruchomieniu tego kodu powinien zostać wyświetlony komunikat "Polecenia zostały ukończone pomyślnie". Oznacza to, że procedura składowana została utworzona zgodnie ze specyfikacjami.

  2. Alternatywnie w systemach z integracją języka R utwórz procedurę, która używa języka R.

    CREATE PROCEDURE get_iris_dataset
    AS
    BEGIN
    EXEC sp_execute_external_script @language = N'R', 
    @script = N'
    library(RevoScaleR)
    data(iris)
    iris$SpeciesID <- c(unclass(iris$Species))
    iris_data <- iris
    ', 
    @input_data_1 = N'', 
    @output_data_1_name = N'iris_data'
    WITH RESULT SETS (("Sepal.Length" float not null, "Sepal.Width" float not null, "Petal.Length" float not null, "Petal.Width" float not null, "Species" varchar(100) not null, "SpeciesId" int not null));
    END;
    GO
    
  3. Aby faktycznie wypełnić tabelę, uruchom procedurę składowaną i określ tabelę, w której mają być zapisywane dane. Po uruchomieniu procedura składowana wykonuje kod języka Python lub R, który ładuje wbudowany zestaw danych Iris, a następnie wstawia dane do tabeli iris_data .

    INSERT INTO iris_data ("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width", "Species", "SpeciesId")
    EXEC dbo.get_iris_dataset;
    

    Jeśli dopiero zaczynasz korzystać z języka T-SQL, pamiętaj, że instrukcja INSERT dodaje tylko nowe dane; nie będzie sprawdzać istniejących danych ani usuwać i ponownie kompilować tabelę. Aby uniknąć pobierania wielu kopii tych samych danych w tabeli, możesz najpierw uruchomić następującą instrukcję: TRUNCATE TABLE iris_data. Instrukcja T-SQL TRUNCATE TABLE usuwa istniejące dane, ale zachowuje strukturę tabeli bez zmian.

Zapytaj dane

W ramach kroku weryfikacji uruchom zapytanie, aby potwierdzić przekazanie danych.

  1. W Eksploratorze obiektów w obszarze Bazy danych kliknij prawym przyciskiem myszy bazę danych irissql i uruchom nowe zapytanie.

  2. Uruchom kilka prostych zapytań:

    SELECT TOP(10) * FROM iris_data;
    SELECT COUNT(*) FROM iris_data;
    

Dalsze kroki

W poniższym szybkim starcie utworzysz model uczenia maszynowego, zapiszesz go w tabeli, a następnie użyjesz modelu do wygenerowania przewidywanych wyników.