基于云的预测分析:Azure Machine Learning






4.80/5 (6投票s)
如果您能在一个基于云的环境中预测数据,会怎么样?您可以使用 Azure 机器学习来实现这一点。
引言
如果您能根据市场走势预测股票价格?或者预测患者是否会面临某些疾病(如糖尿病、哮喘和心脏病)的风险?甚至如果您能检测欺诈?
机器学习技术可用于进行此类预测。在本文中,我将展示如何使用 Azure 机器学习创建一个基于云的预测分析解决方案。
什么是机器学习?
简而言之,机器学习是使计算机能够在不被显式编程的情况下进行学习的学科。基本思想是寻找有意义的模式并利用它们来解决问题。
问题可分为两类——一类是可以使用标准方法解决的问题,另一类是不能使用标准方法解决的问题。对于第一类问题,您遇到的情况是,基于输入,您确切地知道输出(或预期的结果)。对于第二类问题,输出完全不可预测,就像我之前提到的示例一样。
不幸的是,大多数现实生活中的问题都属于第二类。这就是为什么机器学习在近年来如此重要且受到如此多研究的原因。
Microsoft Azure 机器学习
Azure 机器学习是一项完全托管的云服务,可让您轻松构建、部署和共享预测分析解决方案。有一个名为 Azure 机器学习工作室 的基于 Web 的 IDE,用于开发和部署模型作为 Web 服务。您可以使用 C#、R 和 Python 等编程语言来使用这些 Web 服务。

预测帕金森病进展
在本文中,我们将创建一个非常有趣的解决方案,该解决方案可以帮助临床医生通过言语治疗预测帕金森病患者的病情进展。
它的工作原理应如下所示
- 临床医生在言语治疗期间为应用程序提供患者的特定数据。
- 数据将被处理到机器学习模型中。
- 应用程序将患者进展的预测返回给临床医生。
言语治疗只是评估患者进展的众多方法之一。如果我们能预测这种进展,肯定有助于临床医生确定是否需要加强对患者的治疗。我们的模型将遵循以下步骤
- 获取患者的既往数据;
- 选择并应用学习算法;
- 训练和测试模型;
- 预测进展。
我们将要预测什么?
统一帕金森病评定量表 (UPDRS) 是一个量化帕金森病体征和症状的量表。临床医生使用 UPDRS 分数来跟踪帕金森病患者的病情进展。
我们将预测 UPDRS 的总分。它是基于一些问题的分数总和,定义了患者病情的严重程度。分数范围为 0(不受影响)到 176(最严重受影响)。您可以在 此处 找到有关 UPDRS 的详细信息。
关于数据集
我们将用作示例的数据集包含来自 42 名早期帕金森病患者的各种生物医学语音测量值,这些患者参与了为期六个月的试验。
需要注意的是,此数据集不包含任何敏感数据,并通过 UCI 存储库 向社区开放。在此 UCI 网页上,您可以下载我们正在使用的数据集(.data 文件),并查看其属性和元数据的所有信息。如果您想将数据集保存为 CSV 文件,只需下载它并将 .data 文件扩展名更改为 .csv 扩展名即可。
创建实验
首先,访问 Azure ML Studio 网站。如果您已有 Azure 订阅,可以直接登录。如果您只想进行一些测试,可以选择试用版免费试用。
在 Azure ML Studio 中,点击 新建,选择 实验,然后选择 空白实验。
获取患者的既往数据
导入数据基本上有两种方法
- 从本地文件上传新数据集。为此,请点击 新建,选择 数据集,然后选择 从本地文件。
- 指向数据源,例如:Web URL、Azure 存储、本地 SQL 数据库等。
我将选择指向一个数据源,因为我们已经在 UCI 网页上有了数据集样本。在搜索框中,搜索 导入数据 并将其拖到实验区域。此项将用于导入包含我们既往数据的数据集。
在 属性 中,选择 通过 HTTP 的 Web URL,提供 数据源 URL(您可以在 此处 获取),并将 CSV 格式选为 数据格式。正如我们在 CSV 文件中看到的,它有一个标题行。因此,请勾选 CSV 或 TSV 包含标题行 选项。
点击 运行 以处理数据集。运行完成后,右键单击 导入数据 项,选择 结果数据集 ,然后选择 可视化。
我们的既往数据将被分成两组:训练集和测试集。训练集用于带有学习算法的预测,而测试集用作模型的输入(帮助您查看预测值与实际值的接近程度)。
一部分数据将重定向到训练集,另一部分将重定向到测试集。为了提高预测质量,同时获得足够的数据用于测试,我们将 75% 的数据用于训练集,25% 用于测试集。
为此,请搜索 拆分数据 并将其拖到实验区域。在 属性 中,将 第一个输出数据集中的行数比例 更改为 0.75。然后,将 导入数据 的输出连接到 拆分数据 的输入,如下图所示
选择学习算法
我们的数据集已准备好使用,现在我们需要选择适合我们需求的学习算法。有许多适用于不同目的的算法。基本上,这些算法分为三类
- 
	监督学习: 给定数据源的一些输入和期望输出,目标是学习一个将这些输入和输出映射到一起的通用模式。因此,您会提前提供正确答案。 
- 
	无监督学习: 算法自行找出输入和输出。一个例子是 图像分类 问题。您可能不知道图片的内容,因此它需要找出输入数据中的相似之处,并自行确定将图片分类到适当组的最佳方法。 
- 
	强化学习: 这是一个让智能体在动态环境中行动以最大化其奖励的问题。例如,考虑教狗一个新技巧:您不能告诉它该做什么,但如果它做得对/错,您可以奖励/惩罚它。它必须弄清楚它做了什么才得到奖励/惩罚。我们可以使用类似的方法来训练计算机执行许多任务,例如下棋、驾驶车辆、安排工作等。 
监督学习是适用于我们问题的类型。有两种技术可用于: 回归 和 分类。
- 回归: 您有一个数据集,并希望使用它进行预测。一个常见的例子是根据房屋大小预测房屋价格。基于既往数据,算法会创建最适合一般情况的线。这条线对应一个数学方程。因此,当您有一个方程时,您就可以在给定任何输入 (x) 的情况下找到任何输出 (y)。这个过程被称为 线性回归 ,这也是我们将要使用的。
- 分类: 您有一个数据集,并希望识别输入数据属于哪个类别集合。一些例子是模式识别和电子邮件验证(“垃圾邮件”或“非垃圾邮件”)。
在我们的案例中,我们想使用回归算法,因此我决定使用线性回归。您可以使用许多回归算法,但对我们来说,线性回归就足够了。如果您想了解更多关于可用的学习算法的信息,请参阅 如何为 Microsoft Azure 机器学习选择算法。
训练和测试模型
我们已经定义了学习算法。现在是时候将其应用于数据集并训练模型了。拖动一个 线性回归 和一个 训练模型 项到实验区域。 训练模型 将用于根据既往数据训练 UPDRS 电机值。
将 线性回归 的输出端口连接到 训练模型 的左输入端口,并将 拆分数据 的左输出端口连接到 训练模型 的右输入端口。 拆分数据 的右输出端口稍后将使用。下图显示了当前模型。
正如您所见, 训练模型 项需要一个值。此项将用于基于 线性回归 算法训练 total_UPDRS 值。因此,点击训练模型项,进入 属性 ,然后点击 启动列选择器 按钮。
在左侧,点击 使用规则 并选择 total_UPDRS 列名。
为了避免混淆,为每个项定义描述是一个好习惯。为此,请双击训练模型(或您想做的任何其他项)并输入描述。
点击 运行 以开始训练。如果一切正常,请拖动一个 评分模型 到实验区域。此项将用于根据训练模型提供预测。它将使用我们之前拆分的 25% 的数据(在拆分数据项中)作为输入来生成预测。
将 训练模型 的输出端口连接到 评分模型 的左输入端口,并将 拆分数据 的右输出端口连接到 评分模型 项的右输入端口。
点击 运行 以更新训练。如果您想比较实际结果和预测结果,只需右键单击 评分模型,选择 评分数据集 ,然后点击 可视化。
我们只想比较 total_UPDRS 和 评分标签,所以我们删除所有其他列。点击 评分模型,进入 属性 ,取消勾选 将评分列附加到输出 ,然后点击 运行。如果您再次选择 可视化 ,您将看到类似这样的可视化
这样比较数据要好得多,不是吗?但我们如何测试结果的质量呢?我们可以使用一个名为 评估模型 的项。始终建议在评分模型之后使用此项,因为它将帮助您查看您之前选择的算法是否足够好。如果结果与您预期的不符,您可以轻松地返回并选择另一个学习算法并重新训练您的模型。
因此,将一个 评估模型 拖到实验区域,并将 评分模型 的输出端口连接到 评估模型 的左输入端口。下图显示了当前模型。
点击 运行。要查看评估结果,只需右键单击 评估模型,选择 评估结果 ,然后点击 可视化。
UPDRS 电机的决定系数(也称为 R 方值)约为 90%。这是一个统计指标,表明模型与数据的拟合程度。出于演示目的,此百分比足够了,但根据实际情况,可能需要进行改进。
经过一些测试,我们可以看到预测正在按预期进行。我们的 评分模型 输出返回两列(因为我们之前在比较结果)。但现在我们只需要预测值作为输出,所以我们删除 total_UPDRS 列。
为此,您可以删除 评估模型,拖动 选择数据集中的列 项,并将其与 评分模型 连接。下图显示了它应该如何
现在点击 选择数据集中的列,进入 属性 ,然后点击 启动列选择器 按钮。在左侧,点击 使用规则 和 无列。选择 包含 、 列名 ,然后输入 Scored Labels 列名。
确认列名,然后点击 运行。我们完成了 total UPDRS 预测的训练实验!
转换为预测实验
在部署 Web 服务之前,必须将训练实验转换为预测实验。此转换将添加一些项,例如 Web 服务输入 和 Web 服务输出 ,并删除不必要的项。点击 设置 Web 服务 ,然后点击 预测 Web 服务 [推荐]。
它将自动将您的训练实验转换为预测实验,以便用户可以将数据发送到您的模型并接收您的模型的预测。有关实验转换的更多信息,请参阅 将机器学习训练实验转换为预测实验。
现在 运行 您的预测实验。默认情况下, Web 服务输入 项会将数据集的所有列设置为输入参数。我们不希望 total UPDRS 作为输入(因为预测应该是输出),因此我们需要更改输入参数。拖动一个 选择数据集中的列 项,将其与 导入数据 连接,并将其输出端口连接到 评分模型 的右输入端口。
点击 选择数据集中的列,进入 属性 ,然后点击 启动列选择器 按钮。在左侧,点击 使用规则 和 所有列。选择 排除 、 列名 ,然后输入 total_UPDRS 列名。确认列名后,点击 运行。
如果您想将 Scored Labels 列名更改为输出,可以使用 编辑元数据 项。拖动并将其连接在 评分模型 和 Web 服务输出 之间。
在 属性 中,点击 启动列选择器 按钮。在 使用规则 中选择 无列,然后选择 包含 、 列名 ,并输入 Scored Labels 列名。点击确认按钮。
现在点击 编辑元数据 项,进入 属性 ,并在 新列名 字段中输入您想要的输出名称。然后,点击 运行。
部署机器学习 Web 服务
点击 部署 Web 服务 ,然后选择 部署 Web 服务 [新] 预览。
将打开一个新页面,您需要提供 Web 服务名称和定价计划。有一个免费计划选项,如果您打算仅将 Web 服务用于测试。然后,点击 部署 按钮。
让我们测试一下 Web 服务是否按预期运行?部署完成后,将打开一个新页面,您可以点击 测试 Web 服务。
输入输入值,然后点击 测试请求-响应 按钮。
Web 服务正在运行!右侧可以看到预测结果。如果您想将 Web 服务集成到您的 C#、Python 或 R 应用程序中,可以点击 使用 选项卡,然后进入 示例代码 部分。
结论
正如我们所见,Azure 机器学习可以应用于许多不同的场景。对于预测分析,最大的挑战是定义您应该使用哪种学习算法以及哪些数据与解决问题相关。拖动项非常直观,您不必为简单任务编写代码。
您可以在几分钟内利用云计算的力量创建一个令人惊叹的预测分析解决方案。拥抱数字化转型!


