Бинарная классификация

В моем предыдущем посте Машинное обучение в SQL с использованием PyCaret 1.0 подробно рассказывалось об интеграции PyCaret с SQL Server. В этой статье я предоставлю пошаговые инструкции по обучению и развертыванию модели классификации контролируемого машинного обучения в SQL Server с использованием PyCaret 2.0 (PyCaret - это библиотека ML с низким уровнем кода в Python) .

О чем будет рассказано в этой статье:

1. Как загрузить данные в таблицу SQL Server

2. Как создать и сохранить модель в таблице SQL Server.

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

I. Импорт / загрузка данных

Теперь вам нужно будет импортировать CSV-файл в базу данных с помощью SQL Server Management Studio.

Создайте таблицу «рак» в базе данных.

Щелкните базу данных правой кнопкой мыши и выберите Задачи - › Импорт данных.

В качестве источника данных выберите Источник плоских файлов. Затем с помощью кнопки Обзор выберите файл CSV. Потратьте некоторое время на настройку импорта данных, прежде чем нажимать кнопку Далее.

В качестве пункта назначения выберите правильного поставщика базы данных (например, SQL Server Native Client 11.0). Введите Имя сервера; установите флажок Использовать аутентификацию SQL Server, введите Имя пользователя, Пароль и База данных, прежде чем нажимать Далее кнопку.

В окне "Выбор исходных таблиц и представлений" вы можете редактировать сопоставления, прежде чем нажимать кнопку Далее.

Установите флажок "Выполнить немедленно" и нажмите кнопку Далее.

Нажмите кнопку «Готово», чтобы запустить пакет.

II. Создать модель машинного обучения и сохранить в таблице базы данных

Классификация - это тип машинного обучения с учителем для прогнозирования категориальных категорий меток, которые являются дискретными и неупорядоченными. Модуль, доступный в пакете PyCaret, может использоваться для двоичных или мультиклассовых задач.

В этом примере мы будем использовать «Набор данных рака груди». Создание и сохранение модели в таблице базы данных - это многоэтапный процесс. Пройдемся по ним шаг за шагом:

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

Ниже приведен код, использованный для создания процедуры:

-- Stored procedure that generates a PyCaret model using the cancer data using Extra Trees Classifier Algorithm
DROP PROCEDURE IF EXISTS generate_cancer_pycaret_model;
Go
CREATE PROCEDURE generate_cancer_pycaret_model (@trained_model varbinary(max) OUTPUT) AS
BEGIN
EXECUTE sp_execute_external_script
@language = N'Python'
, @script = N'
import pycaret.classification as cp
import pickle
trail1 = cp.setup(data = cancer_data, target = "Class", silent = True, n_jobs=None)
# Create Model
et = cp.create_model("et", verbose=False)

#To improve our model further, we can tune hyper-parameters using tune_model function.
#We can also optimize tuning based on an evaluation metric. As our choice of metric is F1-score, lets optimize our algorithm!
tuned_et = cp.tune_model(et, optimize = "F1", verbose=False)

#The finalize_model() function fits the model onto the complete dataset.
#The purpose of this function is to train the model on the complete dataset before it is deployed in production
final_model = cp.finalize_model(tuned_et)
# Before saving the model to the DB table, convert it to a binary object
trained_model = []
prep = cp.get_config("prep_pipe")
trained_model.append(prep)
trained_model.append(final_model)
trained_model = pickle.dumps(trained_model)'
, @input_data_1 = N'select "Class", "age", "menopause", "tumor_size", "inv_nodes", "node_caps", "deg_malig", "breast", "breast_quad", "irradiat" from dbo.cancer'
, @input_data_1_name = N'cancer_data'
, @params = N'@trained_model varbinary(max) OUTPUT'
, @trained_model = @trained_model OUTPUT;
END;
GO

II. Создайте таблицу, которая требуется для хранения обученного объекта модели.

DROP TABLE IF EXISTS dbo.pycaret_models;
GO
CREATE TABLE dbo.pycaret_models (
model_id  INT NOT NULL PRIMARY KEY,
dataset_name VARCHAR(100) NOT NULL DEFAULT('default dataset'),
model_name  VARCHAR(100) NOT NULL DEFAULT('default model'),
model   VARBINARY(MAX) NOT NULL
);
GO

iii. Вызов хранимой процедуры для создания объекта модели и сохранения в таблице базы данных

DECLARE @model VARBINARY(MAX);
EXECUTE generate_cancer_pycaret_model @model OUTPUT;
INSERT INTO pycaret_models (model_id, dataset_name, model_name, model) VALUES(2, 'cancer', 'Extra Trees Classifier algorithm', @model);

Результат этого выполнения:

Просмотр результатов таблицы после сохранения модели

III. Текущие прогнозы

Следующим шагом является выполнение прогноза для тестового набора данных на основе сохраненной модели. Это снова многоступенчатый процесс. Давайте еще раз проделаем все шаги.

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

Ниже приведен код для создания процедуры базы данных:

DROP PROCEDURE IF EXISTS pycaret_predict_cancer;
GO
CREATE PROCEDURE pycaret_predict_cancer (@id INT, @dataset varchar(100), @model varchar(100))
AS
BEGIN
DECLARE @py_model varbinary(max) = (select model
from pycaret_models
where model_name = @model
and dataset_name = @dataset
and model_id = @id
);
EXECUTE sp_execute_external_script
@language = N'Python',
@script = N'
# Import the scikit-learn function to compute error.
import pycaret.classification as cp
import pickle
cancer_model = pickle.loads(py_model)
# Generate the predictions for the test set.
predictions = cp.predict_model(cancer_model, data=cancer_score_data)
OutputDataSet = predictions
print(OutputDataSet)
'
, @input_data_1 = N'select "Class", "age", "menopause", "tumor_size", "inv_nodes", "node_caps", "deg_malig", "breast", "breast_quad", "irradiat" from dbo.cancer'
, @input_data_1_name = N'cancer_score_data'
, @params = N'@py_model varbinary(max)'
, @py_model = @py_model
with result sets (("Class" INT, "age" INT, "menopause" INT, "tumor_size" INT, "inv_nodes" INT,
"node_caps" INT, "deg_malig" INT, "breast" INT, "breast_quad" INT,
"irradiat" INT, "Class_Predict" INT, "Class_Score" float ));
END;
GO

II. Создайте таблицу для сохранения прогнозов вместе с набором данных

DROP TABLE IF EXISTS [dbo].[pycaret_cancer_predictions];
GO
CREATE TABLE [dbo].[pycaret_cancer_predictions](
[Class_Actual] [nvarchar] (50) NULL,
[age] [nvarchar] (50) NULL,
[menopause] [nvarchar] (50) NULL,
[tumor_size] [nvarchar] (50) NULL,
[inv_nodes] [nvarchar] (50) NULL,
[node_caps] [nvarchar] (50) NULL,
[deg_malig] [nvarchar] (50) NULL,
[breast] [nvarchar] (50) NULL,
[breast_quad] [nvarchar] (50) NULL,
[irradiat] [nvarchar] (50) NULL,
[Class_Predicted] [nvarchar] (50) NULL,
[Class_Score] [float] NULL
) ON [PRIMARY]
GO

iii. Вызов процедуры pycaret_predict_cancer, чтобы сохранить результат прогнозов в таблице

--Insert the results of the predictions for test set into a table
INSERT INTO [pycaret_cancer_predictions]
EXEC pycaret_predict_cancer 2, 'cancer', 'Extra Trees Classifier algorithm';

iv. Выполните приведенный ниже SQL-запрос, чтобы просмотреть результат прогноза.

-- Select contents of the table
SELECT * FROM [pycaret_cancer_predictions];

IV. Заключение

В этом посте мы узнали, как построить модель классификации с использованием PyCaret в SQL Server. Точно так же вы можете создавать и запускать другие типы контролируемых и неконтролируемых моделей машинного обучения в зависимости от потребностей вашего бизнеса.

Вы также можете посетить веб-сайт PyCaret для документации по другим контролируемым и неконтролируемым экспериментам, которые могут быть реализованы аналогичным образом в SQL Server.

В моих будущих публикациях будут руководства по изучению других методов обучения с учителем и без учителя с использованием Python и PyCaret на сервере S QL.

V. Важные ссылки

PyCaret

Мой профиль в LinkedIn