大数据高效数据分析的一个关键是在数据所处的位置进行计算。 在某些情况下,这意味着在数据库(例如SQL Server)或大数据环境(例如Spark)中运行R,Python,Java或Scala程序。 但这需要一些相当技术上的编程和数据科学技能,这些在商业分析师或SQL程序员中并不常见。 此外,如果您必须将数据集从数据仓库中提取,转换和加载到另一个数据存储中以进行机器学习,则会引入流程延迟。
为此,谷歌宣布了BigQuery ML的Beta版,这是其基于SQL的企业数据仓库服务的扩展,用于构建和部署机器学习模型。 这很重要,因为它降低了训练某些类型的模型和部署预测分析服务的障碍,既减少了所需的时间,又使数据分析人员和统计人员可以接触到它。
BigQuery的SQL方言中添加了一个SQL样式的语句和六个函数以支持机器学习 : CREATE MODEL
语句和函数ML.EVALUATE
, ML.ROC_CURVE
, ML.PREDICT
, ML.TRAINING_INFO
, ML.FEATURE_INFO
和ML.WEIGHTS
。 Google制作了动画GIF,这些GIF显示了如何使用CREATE MODEL
语句CREATE MODEL
以及如何使用SELECT
查询中的ML.PREDICT
函数从模型生成预测。
您可能想知道如何将所有巨大的机器学习复杂性封装在SQL语句中。 简短的答案是,至少现在不能这样做。 BigQuery ML 不是按TensorFlow顺序使用的通用神经网络建模工具。
仅支持两种类型的模型:用于预测的线性回归(例如“下个月的销售额将是多少?”)和用于分类的二元logistic回归(例如“信贷申请人是否会违约?”)。 尽管在使用的数据结构中暗示在将来的版本中可能会支持多类逻辑分类,但是BigQuery ML甚至无法处理多类逻辑回归。
普通SQL查询的数据存储方式不适合机器学习,因此在为CREATE MODEL
语句准备功能(用于预测的输入变量)时,BigQuery ML自动对分类变量(字符串,日期,时间,和布尔值)并标准化数字变量(数字,浮点数和整数)。 数值变量也被标准化用于预测。 BigQuery ML可以从多个BigQuery数据集中提取数据,以进行训练和预测。
CREATE MODEL
语句的语法为:
{CREATE MODEL | CREATE MODEL IF NOT EXISTS | CREATE OR REPLACE MODEL}
model_name
[OPTIONS(model_option_list)]
[AS query_statement]
模型选项列表指定模型的类型(线性或逻辑回归)以及训练参数,例如学习率策略,最大迭代次数,提早停止标准(最小相对进度)和数据分割参数(用于分离训练和评估数据集)。 BigQuery ML使用梯度下降来优化模型权重。
Google提供了以下CREATE MODEL
语句的简单示例 :
CREATE MODEL
`mydataset.mymodel`
OPTIONS
( model_type='linear_reg',
ls_init_learn_rate=.15,
l1_reg=1,
max_iterations=5 ) AS
SELECT
column1,
column2,
column3,
label
FROM
`mydataset.mytable`
WHERE
column4 < 10
创建模型后,您将需要对其进行评估并将其用于预测。 使用ML.EVALUATE
函数评估线性回归和逻辑回归模型的模型指标; 它会生成一行包含指标的输出。 您还可以使用ML.ROC_CURVE
函数来评估逻辑回归模型。 它为模型的不同阈值生成带有度量的多个行。
使用ML.PREDICT
函数来预测应用于数据集的模型的结果。 例如,以下查询比较表mytable
的mymodel1
和mymodel2
的预测。 您当然可以在SELECT
语句中添加WHERE
子句,以预测表子集的值。
SELECT
label,
predicted_label1,
predicted_label AS predicted_label2
FROM
ML.PREDICT(MODEL `mydataset.mymodel2`,
(
SELECT
* REPLACE (predicted_label AS predicted_label1)
FROM
ML.PREDICT(MODEL `mydataset.mymodel1`,
TABLE `mydataset.mytable`)))