Connect(); Special Issue 2018

33 卷,第 13

机器学习-加速自动化的机器学习与 AI 解决方案

通过Krishna Anumalasetty;特殊问题 2018

在各种应用程序,从自治汽车和信用卡欺诈检测到在生产过程中及更高版本的预测性维护中正在使用机器学习 (ML)。

但存在一个问题。构建机器学习解决方案很复杂,需要具备出色技能人员博士数学或其他定量字段中。数据科学家的需求已超过了供应,抑制正常发挥采用机器学习的企业。许多公司都有大量数据,但他们无法采用预测分析来提高业务决策的制定并实现成功。

在 Azure 机器学习中的自动化机器学习功能旨在克服这些困难并使 AI 每个开发人员和每个组织更易于访问。在本文中,我将介绍如何自动机器学习可用于快速构建能源需求预测解决方案。

机器学习生命周期

看看数据科学生命周期过程中所示图 1。它将在生命周期分为四个阶段:了解,业务数据采集和理解,建模、 部署。每个机器学习解决方案应首先阅读正在努力解决的业务问题,即业务理解阶段。接下来,获取和浏览数据-数据采集和理解步骤,以便在可能会在不同的格式中的各种数据源中的原始数据中。引入、 浏览和取消其执行重复是一些数据采集和理解中的活动。

数据科学生命周期过程
图 1 数据科学生命周期过程

建模阶段都有三个步骤,从开始特征工程过程。此处可能将数据转换为新功能,并生成完整的新功能。功能是影响预测预测因子。了解功能的简单办法是需要的估计大小和位置房屋、 间卧室和数和其他因素会影响房屋价格示例。因此,如果您正在生成的机器学习模型来预测某个内部值,这些因素是功能。

接下来是模型训练过程 (在建模阶段),在其中生成机器学习模型通过将许多不同的算法和超参数应用于数据集。此过程涉及评估不同的模型已构建用来选择最适合于当前应用程序。从此处,测试并最后将模型部署到生产环境,它用于从新数据运行预测。

一次在部署阶段中,您必须监视偏差,的模型偏差达到特定阈值或新数据时使清除模型不满足预期执行时定期重新训练它。

现在,让我们看如何自动化机器学习可帮助构建机器学习模型。第一步是安装的 Azure 机器学习 Python 库集。自动化机器学习库是包含和 Azure 机器学习库的一部分,将在机器学习脚本中使用。

作为开发人员,如果您熟悉语言如C#或 Java 中,您应该能够迅速掌握在 Python 中的任何时间。您可以安装 Azure ML SDK,其中包括自动在计算机上的机器学习库,但是,为简单起见我们将使用 Azure 笔记本,这是 Azure 服务托管的 Jupyter 笔记本。Jupyter Notebook 都是与机器学习解决方案开发的数据科学家常用的交互式的笔记本环境。您可以了解有关从 Frank La Vigne 在 2018 年 2 月发行的 MSDN 杂志 》 的人工智能列使用的 Jupyter 笔记本的详细信息 (msdn.com/magazine/mt829269)。

免费使用,并预装 Azure Notebook 服务,从而无需安装过程自动化的机器学习库。登录到 Azure Notebook 使用你的 Microsoft 帐户。如果已有 Azure 订阅,可以使用 Azure Active Directory (Azure AD) 帐户 (这可能是你公司的凭据相同,如果你的组织与 Azure AD 联合)。

使用你的 Azure 订阅 ID 设置一个 ML 工作区,可以共享和协作与团队成员通过 Azure 门户中,或通过 API,如下所示:

ws = Workspace.create(name = "energy_ml_ws",
                      subscription_id = "<azure_subscription_id>",
                      resource_group = "energy_ml_rg",
                      location = "eastus",
                      create_resource_group = True,
                      exist_ok = True)

能源需求预测

通过工作区创建完成,让我们处理的业务问题-能源需求预测功能时间序列数据的示例。时序预测是预测未来值按时间顺序排列的观测值序列中的任务。它是一个常见问题,并在许多行业中有应用程序。例如,零售公司需要预测将来的产品销售,因此它们可以安排其供应链,以满足需求。同样,物流公司需要估计其服务需求,以便它们可以规划劳动力要求和送货路线提前。在许多情况下,由于不准确的预测的财务影响可以是有意义的从而预测业务关键活动。

这即是如此的能源实用程序,必须保持正常在网格上消耗的能源和提供给它的能源之间平衡。购买过多的电源和运算符必须存储的过多能源的成本较高。购买过少,这可能会导致封锁,使客户在黑暗中。电网运营商可以做出短期决策来管理到网格的能源供应和保持负载的均衡,但准确预测能源需求的运营商自信做出这些决策至关重要。

数据采集

让我们演练一下如何使用机器学习来生成能源需求预测解决方案。没有可从纽约独立系统运营商 (NYISO),执行纽约州电网的公用数据集。数据集每小时有一段五年纽约市的电源需求数据。

NYISO 数据集以从 2012年到 2017年的每小时增量中 MWh 具有时间戳和能源需求。若要检查和浏览数据,让我们首先读取到 Pandas 数据帧是在 Azure Blob 存储的数据。Pandas 数据帧与机器学习社区受欢迎,并提供处理数据的简单方法。下面是导入的代码:

import pandas as pd
demand = pd.read_csv(
  "https://antaignitedata.blob.core.windows.net/antaignitedata/nyc_demand.csv",
  parse_dates=['timeStamp'])

让我们通过调用上的数据帧,它将打印前几行,并生成具有时间戳和能源需求值的简单表头方法打印数据的前几行。如果我绘制的 2017 年 7 月在一个多星期的能源需求图表,它会导致一个折线图,显示在过去七天内的波动每小时值。为此,我使用 matplotlib,可帮助轻松地绘制图表 Jupyter Notebook 中的库。代码如下:

plt_df = demand.loc[(demand.timeStamp>'2016-07-01') & (demand.timeStamp<='2016-07-07')]
plt.plot(plt_df['timeStamp'], plt_df['demand'])
plt.title('New York City power demand over one week in July 2017')
plt.xticks(rotation=45)
plt.show()

当然,天气的能源消耗,具有直接的影响。热的某一天时,空调的使用将显著提高对电力的需求。因此可以使用一个包含相同的时间段内的每小时纽约的天气情况的其他数据集来改进预测。我可以从 darksky.net 访问天气数据。现在,我将读取到数据帧的天气数据集,并使用此代码通过合并两个数据集,增强与天气数据的 NYISO 数据集:

weather = pd.read_csv(
  "https://antaignitedata.blob.core.windows.net/antaignitedata/nyc_weather.csv",
  parse_dates=['timeStamp'])
df = pd.merge(demand, weather, on=['timeStamp'], how='outer')

生成的合并数据集看起来类似于表中的内容图 2,从而有效地添加天气信息 — 降水量和温度 — 到 NYISO 数据集。若要查看的数据的前几行,调用头方法对数据帧。

天气数据集与合并的能源需求数据集
图 2 能源需求数据集天气数据集与合并

建模

现在我们又在建模步骤,这涉及到三个领域: 的特征工程、 模型训练和模型评估。这是数据科学家花费大部分时间,它是其中自动化机器学习可以真正帮助简化操作。

我使用的数据集是时间序列数据,需我以生成功能。用于时间序列数据的典型功能是日期时间功能、 滞后特性和窗口功能。为了简单起见,我不会在滞后特性或窗口功能。自动化机器学习自动生成日期时功能,无需手动生成它们。它还执行预处理任务的很多数据。例如,自动化机器学习可以输入数据集中的缺失值。如果我检查数据集进一步我就会发现,还有几个缺少数据集,一些缺少的行值,以及。在下面的代码,可以看到该行 49175 包含缺失值,指示"nan"代表"不是数字":

df.iloc[49175].values

在行的输出如下所示:

array([Timestamp('2017-08-11 01:00:00'), nan, 0.0, 69.26], dtype=object)

接下来,我需要将数据集拆分为训练数据集和测试数据集。训练数据集用于生成模型。训练后,我需要使用测试数据集来评估性能,并确保该模型是令人满意,在部署之前测试模型。拆分可以在能源消耗数据的情况下,随机的但没有季节性,我想要将数据集有策略地进行拆分。设置训练数据集的一小部分放在一边作为验证数据集。训练数据集用于训练模型。验证数据集用于以使该模型不是过度拟合的定型数据对模型进行一般化。这有助于确保模型还执行也对新数据,而不只是培训数据。

现在,我正在预测的列是需求。我将移到其自身向量"y,"这称为标签列需求值。我是任何高于 2017 年 7 月 1 日的数据的保留与我的测试数据集的设置。为早于 2017 年 7 月 1 日,为定型数据的所有数据。下面的代码显示了这一点:

train, test = (df.loc[df['timeStamp']<'2016-07-01'],
  df.loc[df['timeStamp']>='2016-07-01'])

已读取到数据帧的数据具有的功能和标签 (我在尝试预测的列)。我需要将标签列移动到其自身的向量 y,如下所示:

X = train.drop(['demand'], axis=1)
y = train['demand']
y = y.values

留出验证数据集内的定型数据集。使用时序数据的验证数据集通常是特定时间段。下面是拆分如何实现:

split_index = int(X.shape[0] * 0.9)
X_train = X[0:split_index]
y_train = y[0:split_index]
X_validation = X[split_index+1:]
y_validation = y[split_index+1:]

建模的功能工程部分已完成。

模型定型

用户所面临的下一步选择确定哪种算法效果的数据集。复杂性可能会产生问题此处因为有许多算法可供选择,包括支持向量机 (SVM) 套索回归、 脊回归和的详细信息。更重要的是,每个算法都有必须要优化的超参数。为每个算法的超参数可以是无限的组,这意味着算法组合的和超参数是无限本身。因此,从理论上你需要生成无限数目的模型以找到最佳。

用户将功能、 学习器 (算法) 和超参数来生成多个模型来用于特定的业务问题,以便他们可以最终找到了一个会产生最佳的准确性。生成多个模型和计算它们是手动、 既耗时又乏味的任务,可以花费几周甚至数月。最重要的被需要维护的解决方案和部署的模型。随着数据的发展,您需要定期执行再次生成过程的模型。生成单个模型中涉及特征工程、 算法选择和超参数优化的任务。若要获取的很好的执行模型,您需要构建和评估多个模型并重复执行这些乏味的任务。

对于那些出现的数据科学,自动化机器学习简化并通过执行特征工程、 算法和超参数选择,消除了手动处理和优化你能够提高工作效率并节省时间。适用于新的数据科学家的抽象算法选择和超参数优化的简化了复杂性,并可帮助你快速构建机器学习解决方案。

以用户身份,我想要保存我创建了,所有训练作业的历史记录以及因此我保留了我如何走的记录,并可以回头参考它时所需的所有机器学习模型。若要执行此操作,让我们创建获取存储的所有项目,项目文件夹和实验对象关联的自动化将机器学习训练作业的运行历史记录。首先,我创建一个项目文件夹以存储所有与项目相关的文件,如下所示:

project_folder =
  './sample_projects/automl-energydemandforecasting'

然后,我将在工作区中,使用以下代码中选择运行历史记录容器的名称:

experiment_name = 'energy_ml_exp'

接下来,我将创建一个试验对象并将其与工作区相关联。代码如下:

experiment=Experiment(ws, experiment_name)

在这里,自动化机器学习需要只有两个步骤来生成模型之前我 AutoMLConfig 对象配置和运行试验。图 3显示自动化机器学习的概念表示形式。

现在,让我们配置自动化的机器学习设置并提交自动的机器学习实验。代码如下:

图 3 概念自动机器学习关系图

automl_config_local = AutoMLConfig(task = 'regression',
                              debug_log = 'automl_errors.log',
                              primary_metric = 'spearman_correlation',
                              iterations = 150,
                              X = X_train,
                              y = y_train,
                              X_valid = X_validation,
                              y_valid = y_validation,
                              preprocess = True,
                              path=project_folder)

请注意,在配置设置,我设置迭代 = 150。因为我将迭代次数设置为 150,自动化机器学习将生成 150 不同组合的算法和超参数,为 150 不同的模型作为结束。自动的 ML 本身进行定型的 ML 模型使用数以百万计的管道。使用矩阵因子分解技术,自动化机器学习生成的算法和超参数组合以智能方式,从而导致要快得多的聚合上最佳的模型。此外,设置预处理 = True 触发器自动机器学习来执行数据预处理和特征工程任务。这包括生成输入缺失值,将分类值转换成一种热编码的日期时间功能和类似 — 所有这些无需数据专家便可手动执行这些操作。

现在可以完成第二步,正在提交自动的机器学习实验,如下所示:

local_run = experiment.submit(automl_config_local, show_output=True)

此时自动机器学习生成一组算法和超参数的组合。模型的训练是完成的 Azure 虚拟机上由 Azure Notebooks 服务。自动化机器学习可在本地计算机上或在 Azure 云来纵向扩展和横向扩展所需的其他性能运行训练作业建模的选择。在群集上,可以并行运行这些迭代。你可以监视运行在 Azure 门户中,或通过小组件扩展 SDK 随附的 Jupyter Notebook 中的进度。自动化机器学习计算生成的模型基于您的条件,并可以呈现的性能顺序显示模型的排行榜。

此外可以查看有关每个模型的各种图表,并检查不同的指标来帮助做出决策。准确性非常重要的情况下,可以进一步优化生成的模型,手动以提高其性能。

所有生成自动化机器学习的模型存储在持久存储在 Azure 中,作为一种格式中的序列化的 python 对象调用 PKL。

模型评估和测试

现在,自动化机器学习已生成高质量模型,让我们使用它来运行预测已留出测试数据。首先,我需要从已生成的所有模型中选择最佳模型使用以下代码:

best_run, fitted_model = local_run.get_output()
print(best_run)
print(fitted_model)

生成描述通过自动化机器学习生成的最佳模型的以下代码:

Run(Experiment: enery_ml_exp, Id: AutoML_dc619226-fbdb-41e6-872c-6c59ab2b5209_1,
  Type: None, Status: Completed) Pipeline(memory=None, steps=[('datatransformer',
  DataTransformer(logger=None, task=None)), ('sparsenormalizer',
  <automl.client.core.common.model_wrappers.SparseNormalizer object at
  0x7f7f87ee3828>), ('decisiontreeregressor',
  DecisionTreeRegressor(criterion='mse', max_depth=None, max_features=0.2,
  max_leaf_node... min_weight_fraction_leaf=0.0, presort=False,
  random_state=None, splitter='best'))])

请注意,尽管我已经调用了这些模型,但它们实际上是管道,包括通过该数据必须转到的所有预处理转换。现在让我们通过对测试数据以生成针对预测数据的实际数据制成图表的比较运行预测来测试模型。使用以下代码:

x_test = test.drop(['demand'], axis=1)
y_test = test['demand']
y_pred_test = fitted_model.predict(x_test)
y_residual_test = y_test - y_pred_test
plt.plot(x_test['timeStamp'], y_test, label='Actual')
plt.plot(x_test['timeStamp'], y_pred_test, label="Predicted")
plt.xticks(rotation=90)
plt.title('Actual demand vs predicted for test data ')
plt.legend()
plt.show()

使用一些更多的功能设计和使用的延隔功能,可以进一步改进此模型。展望未来,我们可以预计自动化机器学习来不断发展以自动执行特征工程,包括延迟功能生成的多区域。

总结

自动化机器学习,可将该机器学习模型具有几个简单步骤。我们在早期阶段进行构建的机器学习模型便于开发人员若要真正使 AI 变得大众化。您可以找到很多更多示例和教程使用的自动在机器学习aka.ms/AutomatedMLDocs


Krishna Anumalasetty一直就过去七年里,其中包括四个机器学习和 AI 中的 Azure 和云服务中的项目经理。Anumalasetty 是作为 Azure 中的 AI 堆栈的一部分 incubated 自动化机器学习项目经理。他一直从事启用企业卓越功能,如加密 @REST 数据保护、 VNET 功能、 混合方案的本地连接性、 与 Azure Active Directory 集成的详细信息。他目前致力于丰富深度学习的自动化机器学习功能。

衷心感谢以下 Microsoft 技术专家对本文的审阅:Sujatha Sagiraju,Bharat Sandhu
Bharat Sandhu 是产品的营销总监 Azure AI 和高级分析。他致力于使组织能够充分发挥 AI 的潜力,以使其业务转型。目前的职位之前, 他曾担任企业销售人员和业务开发的各种新兴技术的 Microsoft 和 National Instruments 中的角色。  Bharat 持有从德克萨斯州农业机械大学计算机工程和从 INSEAD MBA 学位。

Sujatha Sagiraju 是 Azure 云和 AI 组中的组项目经理,Microsoft 丰富经验。她的专业知识是在构建大规模分布式系统中。她最新的工作热情是加速,通过自动执行机器学习 AI 分摊工作。


在 MSDN 杂志论坛讨论这篇文章