用于 SQL 机器学习 Python 和 R 教程的 Iris 演示数据
适用于: SQL Server 2016 (13.x) 及更高版本 Azure SQL 托管实例
在此练习中,创建一个数据库,用于存储来自 Iris 花卉数据集的数据以及基于相同数据的模型。 Iris 数据包含在 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
除模型内容之外,通常还会为其他有用的元数据添加列,例如模型的名称、定型日期、源算法和参数、源数据等等。 但现在,为简便起见,我们将只使用模型名称。
填充表
可以从 R 或 Python 获取内置 Iris 数据。 可以使用 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;
后续步骤
在下面的快速入门中,你将创建一个机器学习模型并将其保存到表中,然后使用该模型生成预测结果。