Демонстрационные данные ирисов Фишера для учебников по Python и R при использовании со Службой машинного обучения SQL Server

Применимо к: SQL Server 2016 (13.x) и более поздних Управляемый экземпляр SQL Azure

В этом упражнении вы создадите базу данных для хранения данных из набора ирисов Фишера и созданных на их основе моделей. Данные ирисов Фишера входят в дистрибутивы R и Python и используются в рамках учебников по машинному обучению для SQL.

Для выполнения этого упражнения вам потребуется SQL Server Management Studio или другое средство, поддерживающее выполнение запросов T-SQL.

Этот набор данных используется в следующих учебниках и кратких руководствах:

Создание базы данных

  1. Запустите SQL Server Management Studio и откройте новое окно Запрос.

  2. Создайте новую базу данных для этого проекта и измените контекст окна Запрос, чтобы использовать эту базу.

    CREATE DATABASE irissql
    GO
    USE irissql
    GO
    
  3. Добавьте пустые таблицы: одну для хранения данных, а другую — для хранения обученных моделей. Таблица iris_models используется для хранения сериализованных моделей, создаваемых в рамках других упражнений.

    В следующем коде создается таблица для обучающих данных.

    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. Выполните следующий код, чтобы создать таблицу для хранения обученной модели. Сохраняемые модели Python (или R) в SQL Server необходимо сериализовать и поместить в столбец типа 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
    

    Помимо содержимого модели, как правило, следует добавить столбцы для других полезных метаданных, таких как имя модели, дата обучения, исходные алгоритм и параметры, исходные данные и т. д. Для большего удобства пока мы будем использовать только имя модели.

Заполнение таблицы

Вы можете получить данные встроенного набора Iris как из R так и из Python. Вы можете загрузить данные в кадр данных с помощью Python или R и затем вставить его в таблицу в базе данных. Перемещение обучающих данных из внешнего сеанса в таблицу выполняется в несколько шагов:

  • Создайте хранимую процедуру, которая получает нужные данные.
  • Выполните хранимую процедуру, чтобы получить данные.
  • Создайте инструкцию INSERT, чтобы указать, где требуется сохранить извлеченные данные.
  1. В системах с интеграцией с Python создайте следующую хранимую процедуру, которая использует код Python для загрузки данных.

    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
    

    При выполнении этого кода вы получите сообщение "Команды успешно выполнены". Все это означает, что хранимая процедура создана в соответствии с вашими спецификациями.

  2. В системах с интеграцией с R вместо нее следует создать процедуру, использующую 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. Чтобы заполнить таблицу, выполните хранимую процедуру и укажите таблицу, в которую требуется записать данные. После запуска эта хранимая процедура выполняет код Python или R, который загружает встроенный набор данных Iris и затем вставляет данные в таблицу iris_data.

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

    Если вы не знакомы с T-SQL, учтите, что инструкция INSERT только добавляет новые данные. Она не проверяет существующие данные и не выполняет удаление или перестроение таблицы. Чтобы исключить многократное копирование одних и тех же данных в таблицу, можно сначала выполнить следующую инструкцию: TRUNCATE TABLE iris_data. Инструкция T-SQL TRUNCATE TABLE удаляет существующие данные, сохраняя при этом структуру таблицы в неизменном виде.

Запрос данных

Для проверки выполните запрос и убедитесь, что данные были отправлены.

  1. В разделе "Базы данных" обозревателя объектов щелкните правой кнопкой мыши базу irissql и запустите новый запрос.

  2. Выполните несколько простых запросов:

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

Дальнейшие действия

В следующем кратком руководстве вы создадите модель машинного обучения и сохраните ее в таблице, после чего получите результаты прогноза на ее основе.