Демонстрационные данные ирисов Фишера для учебников по Python и R при использовании со Службой машинного обучения SQL Server
Область применения: SQL Server 2016 (13.x) и более поздних версий Управляемый экземпляр SQL Azure
В этом упражнении вы создадите базу данных для хранения данных из набора ирисов Фишера и созданных на их основе моделей. Данные ирисов Фишера входят в дистрибутивы R и Python и используются в рамках учебников по машинному обучению для SQL.
Для выполнения этого упражнения вам потребуется SQL Server Management Studio или другое средство, поддерживающее выполнение запросов T-SQL.
Этот набор данных используется в следующих учебниках и кратких руководствах:
Создание базы данных
Запустите SQL Server Management Studio и откройте новое окно Запрос.
Создайте новую базу данных для этого проекта и измените контекст окна Запрос, чтобы использовать эту базу.
CREATE DATABASE irissql GO USE irissql GO
Добавьте пустые таблицы: одну для хранения данных, а другую — для хранения обученных моделей. Таблица 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 );
Выполните следующий код, чтобы создать таблицу для хранения обученной модели. Сохраняемые модели 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, чтобы указать, где требуется сохранить извлеченные данные.
В системах с интеграцией с 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
При выполнении этого кода вы получите сообщение "Команды успешно выполнены". Все это означает, что хранимая процедура создана в соответствии с вашими спецификациями.
В системах с интеграцией с 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
Чтобы заполнить таблицу, выполните хранимую процедуру и укажите таблицу, в которую требуется записать данные. После запуска эта хранимая процедура выполняет код 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 удаляет существующие данные, сохраняя при этом структуру таблицы в неизменном виде.
Запрос данных
Для проверки выполните запрос и убедитесь, что данные были отправлены.
В разделе "Базы данных" обозревателя объектов щелкните правой кнопкой мыши базу irissql и запустите новый запрос.
Выполните несколько простых запросов:
SELECT TOP(10) * FROM iris_data; SELECT COUNT(*) FROM iris_data;
Следующие шаги
В следующем кратком руководстве вы создадите модель машинного обучения и сохраните ее в таблице, после чего получите результаты прогноза на ее основе.