暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用 MySQL HeatWave 机器学习和 Zeppelin 的 Iris 数据集

原创 CiciLee 2022-08-02
571

MySQL——世界上最受欢迎的开源数据库——也可能是云中最受欢迎的数据库。
MySQL HeatWave 数据库服务是 MySQL PaaS,是 Oracle 云基础设施 (OCI) 中的完全托管云服务。

唯一 100% 由 MySQL 团队开发、管理和支持的 MySQL 服务。

简而言之:

MySQL HeatWave 是一种大规模并行、高性能、内存中查询加速器,可将 MySQL 的性能提高几个数量级,用于分析工作负载、混合工作负载和机器学习。

图片.png
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 支持分类和回归模型。
更多信息在这里。

图片.png
使用 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

复制

图片.png
图片.png

转储包含 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

复制

图片.png

-- 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;

复制

图片.png

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;

复制

1.png2.png3.png
类别分布很均衡:

  • Iris-virginica:50 行
  • Iris-setosa: 50 行
  • Iris-versicolor: 50 行

数据可视化

可视化您的数据可能是探索和理解它们的更方便的方式。

下面是一个用于生成一些图表的小 Python 脚本。

事先,我必须编辑 Zeppelin python 解释器——zeppelin.python——并将 python 替换为 python3:

图片.png
解释器是:%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);

复制

11.png
22.png
33.png44.png

行预测

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);

复制

图片.png

行说明

能够理解和解释预测对于信任您的模型并能够解释结果非常重要。 您当地的法规也可能要求这样做。

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);

复制

图片.png

表格预测

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;

复制

111.png222.png

表说明

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;

复制

a.pngb.png

分数

对模型进行评分可以评估模型的可靠性。

得分低的模型可能会表现不佳,产生无法依赖的预测和解释。 低分通常表示提供的特征列不是目标值的良好预测器。

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;

复制

图片.png

其他指标也可用。 看这里。

开始了!
我们已经看到了机器学习的生命周期。

图片.png

机器学习生命周期

我告诉过你,使用 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/

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论