每一个和机器学习打交道的人,都有资格得到一个「数据搬运工」的称号!为何这样说?你不管训练模型,或是分析理解内容,总得涉及到海量的数据吧。这些数据,尤为是结构化的数据,一般都在哪?大部分状况下可能都保存在各个数据库里。html
而为了将机器学习与关系数据库中的数据结合使用,这就须要开发一个自定义应用程序来读取数据库中的数据,而后再应用机器学习模型。开发这样的应用程序须要多种技能才能和数据库进行交互并进行机器学习。固然,开发好这样的程序后,免不了还得考虑它的性能、可用性、安全性等一系列问题。git
那么问题来了:咱们可否更轻松地对关系数据库中数据应用机器学习?github
最近更新后的 Amazon Aurora 已经在本地集成了两种 AWS 机器学习服务:算法
经过使用这项新的功能,咱们能够在查询中使用 SQL 函数来对关系数据库中的数据应用机器学习模型。例如,咱们可使用 Comprehend 检测用户评论的情绪,或应用经过 SageMaker 构建的自定义机器学习模型来估计客户“流失”风险。客户流失是一个掺杂着“变化”和“转变”的词语,主要用于描述客户中止使用您的服务。数据库
借助该功能,咱们还能够将大型查询的输出(包括机器学习模型中的其余信息)存储到一个新的表格中,或经过仅更改客户端运行的 SQL 代码来在应用程序中交互式使用此功能,无需任何机器学习经验。安全
接下来就一块儿看两个具体的示例(第一个示例使用 Comprehend,第二个使用 SageMaker)。app
首先须要授予数据库访问想要使用的服务的权限:Comprehend、SageMaker 或这二者。请在 RDS 控制台中建立一个新的 Aurora MySQL 5.7数据库,该数据库可用后,在区域终端节点的链接和安全选项卡中找到管理 IAM 角色部分。机器学习
在这里,咱们须要将 Comprehend 和 SageMaker 链接到此数据库集群。对于 SageMaker,须要提供已部署机器学习模型的终端节点的 Amazon 资源名称(ARN)。若是想要使用多个终端节点,则须要重复执行此步骤。控制台负责建立服务角色,让 Aurora 数据库访问这些服务,以便新的机器学习模型集成工做。ide
为此须要使用 MySQL 客户端链接到数据库。为了运行测试,咱们能够建立一个用于存储博客平台评论的表格,并插入一些示例记录:函数
CREATE TABLE IF NOT EXISTS comments ( comment_id INT AUTO_INCREMENT PRIMARY KEY, comment_text VARCHAR(255) NOT NULL ); INSERT INTO comments (comment_text) VALUES ("This is very useful, thank you for writing it!"); INSERT INTO comments (comment_text) VALUES ("Awesome, I was waiting for this feature."); INSERT INTO comments (comment_text) VALUES ("An interesting write up, please add more details."); INSERT INTO comments (comment_text) VALUES ("I don’t like how this was implemented.");
若要检测表格中的评论情绪,可使用 aws_comprehend_detect_sentiment 和aws_comprehend_detect_sentiment_confidence 这两个 SQL 函数:
SELECT comment_text, aws_comprehend_detect_sentiment(comment_text, 'en') AS sentiment, aws_comprehend_detect_sentiment_confidence(comment_text, 'en') AS confidence FROM comments;
其中 aws_comprehend_detect_sentiment 函数将返回最合适的输入文本情绪:积极、消极或中性 aws_comprehend_detect_sentiment_confidence 函数将返回情绪检测的置信度:0(彻底不可信),- 1(彻底可信)。
与使用 Comprehend 时的状况相似,咱们能够访问 SageMaker 终端节点来丰富存储在数据库中的信息。为了查看实际的使用案例,让咱们以此文开头处提到的客户流失为例。
手机运营商拥有的历史记录上存在两种最终结果:一种是客户流失;另外一种是继续使用服务。咱们可使用此历史记录信息来构建机器学习模型。做为模型的输入,咱们瞄准的是当前的订阅套餐、一天中不一样时段经过手机通话的客户数量以及呼叫客户服务的频率。
如下是客户表的结构:
SHOW COLUMNS FROM customers;
为了可以肯定客户流失风险,可使用 XGBoost 算法在此示例 SageMaker 笔记本以后训练一个模型。当该模型建立完毕以后,将它部署到一个托管的终端节点。
当 SageMaker 终端节点处于服务状态后,返回到控制台的管理 IAM 角色部分,以授予 Aurora 数据库访问终端节点 ARN 的权限。
随后须要建立一个新的 will_churn SQL 函数,为终端节点输入提供模型所需的参数:
CREATE FUNCTION will_churn ( state varchar(2048), acc_length bigint(20), area_code bigint(20), int_plan varchar(2048), vmail_plan varchar(2048), vmail_msg bigint(20), day_mins double, day_calls bigint(20), eve_mins double, eve_calls bigint(20), night_mins double, night_calls bigint(20), int_mins double, int_calls bigint(20), cust_service_calls bigint(20)) RETURNS varchar(2048) CHARSET latin1 alias aws_sagemaker_invoke_endpoint endpoint name 'estimate_customer_churn_endpoint_version_123';
能够看到,该模型经过使用客户的手机订阅详细信息和服务使用模式来识别客户流失风险。使用 will_churn SQL 函数对 customers 表运行了一次查询,根据机器学习模型对客户进行标记。为了存储查询结果,咱们还须要建立一个新的 customers_churn 表:
CREATE TABLE customers_churn AS SELECT *, will_churn(state, acc_length, area_code, int_plan, vmail_plan, vmail_msg, day_mins, day_calls, eve_mins, eve_calls, night_mins, night_calls, int_mins, int_calls, cust_service_calls) will_churn FROM customers;
让咱们看一看 customers_churn 表中的一些记录:
SELECT * FROM customers_churn LIMIT 7;
很幸运,前面7位客户显然不会流失。但整体状况如何呢?存储 will_churn 函数的结果后,能够对 customers_churn 表运行 SELECT GROUP BY 语句。
SELECT will_churn, COUNT(*) FROM customers_churn GROUP BY will_churn;
从这里开始,就能够深刻了解哪些因素致使客户流失。
当咱们建立新版本机器学习模型及新的终端节点 ARN 时,能够从新建立 will_churn 函数而无需更改 SQL 语句。
新的机器学习集成已于近日在 Aurora MySQL 5.7中推出,其中 SageMaker 集成已正式推出,Comprehend 集成提供预览版。你们能够在文档中了解更多信息。咱们即将推出其余引擎和版本:Aurora MySQL 5.6,而且 Aurora PostgreSQL 10和11也即将推出。
Aurora 机器学习集成已在基础服务可用的全部区域推出。例如,若是 Aurora MySQL 5.7和 SageMaker 在某一区域都可用,则您可使用SageMaker集成。如需完整的服务可用性列表,请参阅AWS 区域表。
使用集成不会额外收费,只需以正常费率支付基础服务费用。使用 Comprehend 时,请注意查询的大小。例如,若是对客户服务网页中的用户反馈进行情绪分析,若要联系作出特别积极或消极评论的客户以及天天作出10,000条评论的客户,须要支付3美圆/天。为了下降成本,请记住要存储结果。