Delen via


Iris-demogegevens voor Python- en R-zelfstudies met SQL Machine Learning

Van toepassing op: SQL Server 2016 (13.x) en latere versies van Azure SQL Managed Instance

In deze oefening maakt u een database voor het opslaan van gegevens uit de irisbloemgegevensset en -modellen op basis van dezelfde gegevens. Iris-gegevens zijn opgenomen in zowel de R- als Python-distributies en worden gebruikt in machine learning-zelfstudies voor SQL Machine Learning.

Als u deze oefening wilt voltooien, moet u SQL Server Management Studio of een ander hulpprogramma hebben waarmee T-SQL-query's kunnen worden uitgevoerd.

Zelfstudies en snelstartgidsen die gebruikmaken van deze gegevensset zijn onder andere:

De database maken

  1. Start SQL Server Management Studio en open een nieuw queryvenster .

  2. Maak een nieuwe database voor dit project en wijzig de context van het queryvenster om de nieuwe database te gebruiken.

    CREATE DATABASE irissql
    GO
    USE irissql
    GO
    
  3. Voeg enkele lege tabellen toe: één om de gegevens op te slaan en één om de getrainde modellen op te slaan. De iris_models tabel wordt gebruikt voor het opslaan van geserialiseerde modellen die zijn gegenereerd in andere oefeningen.

    Met de volgende code wordt de tabel voor de trainingsgegevens gemaakt.

    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. Voer de volgende code uit om de tabel te maken die wordt gebruikt voor het opslaan van het getrainde model. Als u Python-modellen (of R)-modellen in SQL Server wilt opslaan, moeten ze worden geserialiseerd en opgeslagen in een kolom van het type 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
    

    Naast de modelinhoud voegt u meestal ook kolommen toe voor andere nuttige metagegevens, zoals de naam van het model, de datum waarop het is getraind, het bronalgoritmen en de parameters, brongegevens enzovoort. Voorlopig houden we het eenvoudig en gebruiken we alleen de modelnaam.

De tabel vullen

U kunt ingebouwde Iris-gegevens verkrijgen van R of Python. U kunt Python of R gebruiken om de gegevens in een gegevensframe te laden en deze vervolgens in een tabel in de database in te voegen. Het verplaatsen van trainingsgegevens van een externe sessie naar een tabel is een proces met meerdere stappen:

  • Ontwerp een opgeslagen procedure die de gewenste gegevens ophaalt.
  • Voer de opgeslagen procedure uit om de gegevens daadwerkelijk op te halen.
  • Maak een INSERT-instructie om op te geven waar de opgehaalde gegevens moeten worden opgeslagen.
  1. Maak op systemen met Python-integratie de volgende opgeslagen procedure die gebruikmaakt van Python-code om de gegevens te laden.

    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
    

    Wanneer u deze code uitvoert, wordt het bericht 'Opdrachten voltooid' weergegeven. Dit betekent dat de opgeslagen procedure is gemaakt op basis van uw specificaties.

  2. U kunt ook voor systemen met R-integratie een procedure maken die in plaats daarvan R gebruikt.

    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. Als u de tabel daadwerkelijk wilt vullen, voert u de opgeslagen procedure uit en geeft u de tabel op waarin de gegevens moeten worden geschreven. Wanneer de opgeslagen procedure wordt uitgevoerd, wordt de Python- of R-code uitgevoerd, waarmee de ingebouwde Iris-gegevensset wordt geladen en vervolgens de gegevens in de iris_data tabel worden ingevoegd.

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

    Als u niet bekend bent met T-SQL, moet u er rekening mee houden dat de INSERT-instructie alleen nieuwe gegevens toevoegt; er wordt niet gecontroleerd op bestaande gegevens of de tabel wordt verwijderd en opnieuw opgebouwd. Als u wilt voorkomen dat u meerdere kopieën van dezelfde gegevens in een tabel krijgt, kunt u deze instructie eerst uitvoeren: TRUNCATE TABLE iris_data. Met de T-SQL TRUNCATE TABLE-instructie worden bestaande gegevens verwijderd, maar blijft de structuur van de tabel intact.

Query’s uitvoeren voor de gegevens

Voer als validatiestap een query uit om te bevestigen dat de gegevens zijn geüpload.

  1. Klik in Objectverkenner onder Databases met de rechtermuisknop op de irissql-database en start een nieuwe query.

  2. Voer enkele eenvoudige query's uit:

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

Volgende stappen

In de volgende quickstart maakt u een machine learning-model en slaat u het op in een tabel en gebruikt u vervolgens het model om voorspelde resultaten te genereren.