MySQL——世界上最受欢迎的开源数据库——也可能是云中最受欢迎的数据库。
MySQL HeatWave 数据库服务是 MySQL PaaS,是 Oracle 云基础设施 (OCI) 中的完全托管云服务。
唯一 100% 由 MySQL 团队开发、管理和支持的 MySQL 服务。
简而言之:
MySQL HeatWave 是一种大规模并行、高性能、内存中查询加速器,可将 MySQL 的性能提高几个数量级,用于分析工作负载、混合工作负载和机器学习。
MySQL HeatWave 架构
对于您的分析需求,您可以使用 Tableau、Qlik、Oracle Analytics Cloud、Apache Superset 等数据可视化工具探索和可视化您的数据(请参阅:使用 Superset 探索和可视化您的 MySQL HeatWave 数据)……
对于您的机器学习需求,您可以使用 Jupyter、Apache Zeppelin 之类的笔记本(请参阅:使用 Apache Zeppelin 交互式探索和可视化您的 MySQL HeatWave 数据),…
在本文中,我将向您展示使用 MySQL HeatWave 的机器学习功能是多么容易。我们将使用著名的 Iris 数据集,并使用 Apache Zeppelin 在 MySQL HeatWave 中构建、训练、部署和解释机器学习模型。
先决条件
为了能够重现本教程,您必须运行一个 MySQL HeatWave 实例(详情请点击此处以及 RTFM)。
本文中使用的数据可在我的 GitHub 帐户上找到。
您需要一个 MySQL 客户端将数据加载到 MySQL HeatWave。我正在使用 MySQL Shell。
此外,如果你想使用 Zeppelin(虽然是可选的,因为我们将主要运行 sql 查询),它必须正确设置。
请阅读:使用 Apache Zeppelin 交互式探索和可视化您的 MySQL HeatWave 数据
您也可以在此处下载 Zeppelin 笔记本。
最后,您可能需要安装一些软件包。
例如:(pip install pandas numpy unlzw3 sklearn seaborn matplotlib jupyter grpcio protobuf)
MySQL 热波机器学习
MySQL HeatWave ML 使机器学习的使用变得容易,无论您是新手用户还是经验丰富的 ML 从业者。
您提供数据,HeatWave ML 分析数据的特征并创建优化的机器学习模型,您可以使用该模型生成预测和解释。
HeatWave ML 支持有监督的机器学习。也就是说,它通过分析标记的数据集来创建机器学习模型,以学习使其能够根据数据集的特征预测标签的模式。 HeatWave ML 支持分类和回归模型。
更多信息在这里。
使用 MySQL HeatWave 进行数据库内机器学习
所有 HeatWave ML 操作都是通过运行 CALL 或 SELECT 语句来启动的,这些语句可以轻松集成到您的应用程序中。
HeatWave ML 例程包括:
- ML_TRAIN:为给定的训练数据集训练机器学习模型。
- ML_PREDICT_ROW:对一行或多行数据进行预测。
- ML_PREDICT_TABLE:对数据表进行预测。
- ML_EXPLAIN_ROW:解释对一行或多行数据的预测。
- ML_EXPLAIN_TABLE:解释数据表的预测。
- ML_SCORE:计算模型的质量。
- ML_MODEL_LOAD:加载机器学习模型以进行预测和解释。
- ML_MODEL_UNLOAD:卸载机器学习模型。
加载数据
在现实生活中,您的数据已经在您的 MySQL 实例中。尽管您可能需要预先准备它们,因为相关数据集必须位于单个表中。
我正在使用 MySQL Shell(安装在托管 Zeppelin 的服务器上)将数据加载到 iris_ML 模式中。转储文件 - MySQL_HeatWave-iris_ML.sql - 之前已上传到服务器的 /home/ubuntu。
mysqlsh --version mysqlsh myUser:MyP4s$W0rd@10.0.1.2 --sql -f /home/ubuntu/MySQL_HeatWave-iris_ML.sql
复制
转储包含 4 个表:
- iris : 参考表,即事实来源,生产数据
- iris_test :包含测试数据集
- iris_train :包含训练数据集
- iris_validate :包含验证数据集
检查 HeatWave ML 状态
只要您的 MySQL HeatWave 集群处于活动状态,HeatWave ML 就会默认启用。
rapid_ml_status 变量提供 HeatWave ML 的状态:
SHOW GLOBAL STATUS LIKE 'rapid_ml_status';
复制
HeatWave ML 已启动并运行 \o/
数据探索
任何基于数据的项目的第一步都是查看数据。
总结和可视化数据将帮助您更好地了解项目。
这可能会让您感到惊讶,但 SQL 提供了一些用于数据探索的命令和函数,尽管比 R 或 Python 广泛得多🙂:
-- Tables structure DESCRIBE iris_ML.iris; -- Reference table (production table) DESCRIBE iris_ML.iris_train; -- Table that contains the training dataset DESCRIBE iris_ML.iris_test; -- Test dataset table DESCRIBE iris_ML.iris_validate; -- Validation dataset table
复制
-- Number of rows SELECT count(*) FROM iris_ML.iris; SELECT count(*) FROM iris_ML.iris_train; SELECT count(*) FROM iris_ML.iris_test; SELECT count(*) FROM iris_ML.iris_validate;
复制
iris 模拟现场制作表。它包含原始数据(150 行),实际上 HeatWave ML 不会(按原样)使用它。
为了让本文尽可能简单,iris 的结构与 iris_train 相同。但在现实生活中,情况很可能并非如此。
这个生产表可能有额外的列,例如:主键、时间戳等……任何与构建我们的模型无关的有用的业务相关信息。
iris_train 包含训练数据集的一个 iris 表子集(120 行),用于训练机器学习模型。
该表通常是参考表的子集。
iris_test 包含测试数据集 iris 表的子集(30 行),与 iris_train 不同。它的结构几乎与 iris_train 相似,但没有目标列(类)。
iris_validate 包含验证数据集(30 行)。与 iris_test 相同的数据,但与 iris_train 相同的结构,换句话说,该表具有目标列(类)。
HeatWave ML 的一般要求在这里。
-- Data sample SELECT * FROM iris_ML.iris LIMIT 10; -- Class distribution SELECT class, count(*) FROM iris_ML.iris GROUP BY class; -- Summary Statistics SELECT MIN(sepal_length), MAX(sepal_length), ROUND(AVG(sepal_length), 2), ROUND(STD(sepal_length), 2) FROM iris_ML.iris; SELECT MIN(sepal_width), MAX(sepal_width), ROUND(AVG(sepal_width), 2), ROUND(STD(sepal_width), 2) FROM iris_ML.iris; SELECT MIN(petal_length), MAX(petal_length), ROUND(AVG(petal_length), 2), ROUND(STD(petal_length), 2) FROM iris_ML.iris; SELECT MIN(petal_width), MAX(petal_width), ROUND(AVG(petal_width), 2), ROUND(STD(petal_width), 2) FROM iris_ML.iris;
复制
类别分布很均衡:
- Iris-virginica:50 行
- Iris-setosa: 50 行
- Iris-versicolor: 50 行
数据可视化
可视化您的数据可能是探索和理解它们的更方便的方式。
下面是一个用于生成一些图表的小 Python 脚本。
事先,我必须编辑 Zeppelin python 解释器——zeppelin.python——并将 python 替换为 python3:
解释器是:%python.ipython
该脚本将连接到 MySQL HeatWave,因此您必须更新数据库信息(主机、数据库、用户、密码)
%python.ipython ## Edit python interpreter on Zeppelin - zeppelin.python: python3 instead of python ## Update host, database, user and password (from you're MySQL HeatWave) import mysql.connector as connection import pandas as pd import seaborn as sns sns.set_palette('husl') %matplotlib inline import matplotlib.pyplot as plt try: mydb = connection.connect(host="10.0.1.2", database='iris_ML', user="<user>", passwd="<password>", port=3306) query = "SELECT * FROM iris;" data = pd.read_sql(query,mydb) mydb.close() #close the connection except Exception as e: my_conn.close() print(str(e)) data.head() data.info() data.describe() data['class'].value_counts() g = sns.pairplot(data, hue='class', markers='*') plt.show()
复制
HeatWave 机器学习 (ML) 包括用户在 MySQL HeatWave 中构建、前端、部署和解释机器学习模型所需的一切,无需额外费用。
以上信息来自 Iris 表(参考表)。 将这些数据与训练数据集 (iris_train) 和测试数据集进行比较以评估这些样本的质量可能会很有趣。
替换查询 = “SELECT * FROM iris;” 通过查询 = “SELECT * FROM iris_train;” 然后查询 = “SELECT * FROM iris_test;”
训练模型
现在我们对数据有了更好的理解,让我们继续前进并训练模型。 我们遇到了分类问题。
ML_TRAIN 例程在训练数据集上运行时,会生成经过训练的机器学习 (ML) 模型。
# Train the model using ML_TRAIN CALL sys.ML_TRAIN('iris_ML.iris_train', 'class', JSON_OBJECT('task', 'classification'), @iris_model);
复制
您可以显示当前模型,选择会话变量@iris_model:
SELECT @iris_model;
复制
会话变量的生命周期是……会话生命周期。 因此,当会话关闭时,会话变量内容将丢失。
ML_TRAIN 将机器学习模型——@iris_model——存储在 MODEL_CATALOG 表中:
# Model information SELECT model_id, model_handle, model_owner, target_column_name, train_table_name, model_type, task, model_object_size FROM ML_SCHEMA_admin.MODEL_CATALOG;
复制
您可以使用以下查询获取最后创建的模型:
SELECT model_handle FROM ML_SCHEMA_admin.MODEL_CATALOG ORDER BY model_id DESC LIMIT 1 INTO @iris_model;
复制
创建模型后(使用 ML_TRAIN),您应该将其加载到 HeatWave ML (ML_MODEL_LOAD) 中:
CALL sys.ML_MODEL_LOAD(@iris_model, NULL);
复制
行预测
HeatWave ML 允许您对单个行或整个表进行预测。
通过运行 ML_PREDICT_ROW 生成行预测。
数据以 JSON 格式指定。
# Predict 1 Row SET @row_input = JSON_OBJECT( "sepal_length", 7.3, "sepal_width", 2.9, "petal_length", 6.3, "petal_width", 1.8 ); SELECT sys.ML_PREDICT_ROW(@row_input, @iris_model);
复制
行说明
能够理解和解释预测对于信任您的模型并能够解释结果非常重要。 您当地的法规也可能要求这样做。
ML_EXPLAIN_ROW 为一行或多行数据生成解释。 解释可帮助您了解哪些特征对预测影响最大。
特征重要性表示为从 -1 到 1 的值。
- 正值表示某个特征对预测有贡献。
- 负值表示该特征有助于不同的预测
# Prediction explanation for 1 Row SET @row_input = JSON_OBJECT( "sepal_length", 7.3, "sepal_width", 2.9, "petal_length", 6.3, "petal_width", 1.8 ); SELECT sys.ML_EXPLAIN_ROW(@row_input, @iris_model);
复制
表格预测
ML_PREDICT_TABLE 为整个表生成预测并将结果保存到输出表。
# Generate predictions for a table -- CALL sys.ML_MODEL_LOAD(@iris_model, NULL); -- Uncomment if the model is not yet loaded DROP TABLE IF EXISTS iris_ML.iris_predictions; -- Useful if a table prediction was already generated CALL sys.ML_PREDICT_TABLE('iris_ML.iris_test', @iris_model, 'iris_ML.iris_predictions');
复制
创建了一个名为 iris_predictions 的新表。 您可以显示它的前 5 行:
SELECT * FROM iris_ML.iris_predictions LIMIT 5;
复制
表说明
ML_EXPLAIN_TABLE 解释整个表的预测并将结果保存到输出表。
# Prediction explanation for a table -- CALL sys.ML_MODEL_LOAD(@iris_model, NULL); -- Uncomment if the model is not yet loaded DROP TABLE IF EXISTS iris_ML.iris_explanations; -- Usueful if a table explanation was already done CALL sys.ML_EXPLAIN_TABLE('iris_ML.iris_test', @iris_model, 'iris_ML.iris_explanations');
复制
创建了一个名为 iris_explanations 的新表。 您可以显示它的前 5 行:
SELECT * FROM iris_ML.iris_explanations LIMIT 5;
复制
分数
对模型进行评分可以评估模型的可靠性。
得分低的模型可能会表现不佳,产生无法依赖的预测和解释。 低分通常表示提供的特征列不是目标值的良好预测器。
HeatWave ML 支持各种评分指标,以帮助您了解您的模型在一系列基准测试中的表现。
详情在这里。
ML_SCORE 返回一个指示模型质量的计算指标。
-- This example uses the accuracy: Computes the fraction of labels a model predicts correctly CALL sys.ML_SCORE('iris_ML.iris_validate', 'class', @iris_model, 'accuracy', @accuracy_score); SELECT @accuracy_score;
复制
其他指标也可用。 看这里。
开始了!
我们已经看到了机器学习的生命周期。
机器学习生命周期
我告诉过你,使用 MySQL HeatWave 进行机器学习很容易🙂
您只需要使用一组有限的 SQL 例程:
- ML_TRAIN:为给定的训练数据集训练机器学习模型。
- ML_PREDICT_ROW:对一行或多行数据进行预测。
- ML_PREDICT_TABLE:对数据表进行预测。
- ML_EXPLAIN_ROW:解释对一行或多行数据的预测。
- ML_EXPLAIN_TABLE:解释数据表的预测。
- ML_SCORE:计算模型的质量。
在过去的 20 年里,MySQL 已经普及了事务数据库的使用。
现在有了 MySQL HeatWave,我们正在使分析和机器学习知识民主化。
使用 MySQL HeatWave,
评估您的数据从未如此简单!
资源:
- Introduction to the series Discovering MySQL HeatWave Database Service
- Interactively explore & visualize your MySQL HeatWave data with Apache Zeppelin
- MySQL HeatWave Database Service (MDS)
- MySQL HeatWave User Guide
- HeatWave ML
- Documentation of MySQL Database Service
- Oracle Cloud Infrastructure (OCI)
- Oracle Cloud Infrastructure Glossary
- Oracle Cloud Free Tier
- MySQL — The world’s most popular open source database
- MySQL Shell
- Performance comparison of MySQL HeatWave with Snowflake, Amazon Redshift, Amazon Aurora, and Amazon RDS for MySQL
- Oracle’s latest MySQL HeatWave cloud database simplifies use of machine learning
- Download the notebooks
- Apache Zeppelin
- Iris Data Set
原文标题:Iris Data Set with MySQL HeatWave Machine Learning & Zeppelin
原文作者:Olivier DASINI
原文地址:https://dasini.net/blog/2022/07/18/iris-data-set-with-mysql-heatwave-machine-learning-zeppelin/