BigQuery是一个强大的数据仓库解决方案,它提供了可扩展且成本效益高的数据存储和分析能力。其独特之处在于能够在数据库内部直接构建和运行机器学习模型,无需将数据提取到其他平台。
本文将帮助理解BigQuery是什么以及它的优势所在,了解在BigQuery中构建机器学习模型的过程,包括ETL(提取、转换、加载)数据、特征选择和预处理、模型创建、性能评估以及预测等关键步骤。
BigQuery是一个完全托管的云原生数据仓库,能够轻松处理PB级别的数据集。这使得它成为机器学习的理想平台,因为它能够处理大量数据并提供快速的交互式结果。
BigQuery设计为成本效益高,采用灵活的定价模型,只需为所使用的服务付费。这使得它成为机器学习的一个经济实惠的选择,即使是大型和复杂的项目也是如此。
BigQuery与Google Cloud的其他服务(如Google Cloud Storage、Google Cloud AI Platform和Google Cloud Data Studio)无缝集成,提供了一个易于使用且可扩展的完整机器学习解决方案。
BigQuery支持标准SQL,这使得数据分析师和开发人员即使没有机器学习背景,也能够轻松地使用数据和构建机器学习模型。
BigQuery实施了最高级别的安全性和隐私保护,支持静态和传输中的数据加密以及严格的访问控制,确保数据安全和受保护。
BigQuery提供实时分析能力,允许对大型数据集运行交互式查询并在几秒钟内获得结果。这使得它成为机器学习的理想平台,使能够快速轻松地测试和迭代模型。
BigQuery支持多个开源集成,如TensorFlow、Pandas和scikit-learn,这使得使用现有的机器学习库和模型与BigQuery变得容易。
本指南将提供如何在BigQuery中构建机器学习模型的逐步教程,涵盖以下五个主要阶段:ETL数据、特征选择和预处理、在BigQuery中创建模型、评估训练模型的性能以及使用模型进行预测。
在BigQuery中构建机器学习模型的第一步是将数据导入数据库。BigQuery支持从各种源加载数据,包括云存储(如Google Cloud Storage或AWS S3)、本地文件或其他数据库(如Google Cloud SQL)。
为了本教程的目的,假设有一个存储在Google Cloud Storage中的数据集,希望将其加载到BigQuery中。这个示例中的数据将是一个简单的CSV文件,包含两列:“年龄”和“收入”。目标是基于年龄预测收入。
要将数据加载到BigQuery中,首先需要在数据库中创建一个新表。这可以通过BigQuery Web界面或命令行工具完成。
创建表后,可以使用`bq`命令行工具从Cloud Storage桶中加载数据:
bq load --source_format=CSV mydataset.mytable gs://analyticsvidya/myfile.csv age:INTEGER,income:FLOAT
该命令指定数据为CSV格式,并且列“年龄”和“收入”应分别被视为整数和浮点值。
下一步是选择和预处理希望在模型中使用的特征。在这种情况下,数据集中只有两列,“年龄”和“收入”,所以这里没有太多要做的。然而,在现实世界的数据集中,可能有许多列具有各种数据类型、缺失值或其他需要解决的问题。
一个常见的预处理步骤是归一化数据。归一化是将列的值缩放到特定范围(如[0,1])的过程。这对于避免由于不同列的规模差异而导致模型中的偏见很有用。
在BigQuery中,可以使用`NORMALIZE`函数来归一化数据:
WITH data AS (
SELECT age, income
FROM mydataset.mytable
)
SELECT
age,
NORMALIZE(CAST(income AS STRING)) as income_norm
FROM data
此查询创建了一个新的表,与原始表具有相同的数据,但收入值已归一化。
一旦数据被预处理,就可以创建机器学习模型。BigQuery支持多种机器学习模型,包括线性回归、逻辑回归、决策树等。
在这个例子中,将使用一个简单的线性回归模型,该模型基于一个或多个自变量预测连续目标变量。在例子中,目标变量是收入,自变量是年龄。
在BigQuery中创建线性回归模型,使用`CREATE MODEL`语句:
CREATE MODEL mydataset.mymodel
OPTIONS
(model_type='linear_reg',
input_label_cols=['income']) AS
SELECT
age,
income
FROM `mydataset.mytable`
该语句在`mydataset`数据集中创建了一个名为`mymodel`的新模型。`OPTIONS`子句指定模型类型为线性回归模型,输入标签列为`income_norm`。`AS`子句指定返回用于训练模型的数据的查询。
创建模型后,需要评估其性能,以查看它如何根据自变量预测目标变量。这可以通过将数据分割为训练集和测试集来完成,使用训练集来训练模型,使用测试集来评估其性能。
在BigQuery中,可以使用`ML.EVALUATE`函数来评估模型的性能:
SELECT
*
FROM
ML.EVALUATE(MODEL mydataset.mymodel,
(
SELECT
age,
income
FROM
`mydataset.mytable`))
此查询返回各种指标,包括均方误差、均方根误差、平均绝对误差和R平方,所有这些都衡量了模型预测目标变量的能力。
SELECT
*
FROM
ML.PREDICT(MODEL `mydataset.mymodel`,
(
SELECT
age
FROM
`mydataset.mytable`))