QlikSense-机器学习-全-
QlikSense 机器学习(全)
原文:
annas-archive.org/md5/8f7bc24194e22cd0590008aff877d041
译者:飞龙
前言
使用 Qlik Sense 进行机器学习是一本面向任何希望掌握机器学习并扩展其数据分析应用至预测用例的人的书籍。您将通过实际案例学习机器学习的核心概念,使您能够创建更好的分析应用并充分利用您的数据。
Qlik Sense 是一个世界领先的具备全面机器学习能力的平台。这本书将指导您使用 Qlik 云分析(带 AutoML)和 Qlik Sense 客户端管理来构建机器学习驱动的分析解决方案。
本书面向对象
如果您对数据和分析感兴趣,并愿意将您的技能扩展到机器学习,这本书就是为您准备的。为了从这本书中学习,您应该具备处理数据的基本知识,最好是使用 Qlik 工具。这本书是所有愿意在他们的旅程中迈出下一步并开始将机器学习作为他们数据分析旅程一部分的人的绝佳指南。
本书涵盖内容
第一章**,使用 Qlik 的机器学习简介*,将向您介绍 Qlik 平台下的机器学习世界。本章涵盖了使用 Qlik 实施机器学习的所有基本概念,如 R2、F1 和 SHAP。
第二章**,使用 Qlik 进行机器学习的算法和模型*,将提供有关机器学习中的基本算法和模型的信息,重点关注在 Qlik 平台中的重要算法。您将了解 Qlik 的机器学习解决方案背后的算法是如何工作的,以及如何为特定问题选择正确的算法。
第三章**,机器学习环境中的数据素养*,将涵盖如何在机器学习环境中利用数据素养。您将学习和利用数据素养技能,以充分利用机器学习模型所使用的数据。
第四章**,使用 Qlik 平台创建良好的机器学习解决方案*,涵盖了使用 Qlik 平台创建良好机器学习解决方案的必要知识。您将学习所有利用自动化解决方案进行模型构建所需的步骤。
第五章**,设置环境*,教授如何使用 Qlik 工具设置机器学习环境。您将获得设置和初始化不同环境的实际示例,并涵盖设置过程中可能出现的任何问题以及如何修复这些问题。
第六章**,使用 Qlik Sense 预处理和探索数据*,将涵盖在 Qlik Sense 中预处理数据的所需技术。本章将指导您完成预处理和探索数据的重要步骤。您将学习如何验证数据并使数据探索更高效。
第七章**,部署和监控机器学习模型*,将介绍如何在云和客户端管理环境中部署和监控机器学习模型。它还将涵盖在生产环境中部署前需要考虑的事项。
第八章**,利用 Qlik AutoML,介绍了 Qlik AutoML 工具在云和本地环境中的应用。本章将通过实际案例向您介绍 AutoML 的最佳实践和功能。您还将了解使用该工具可以部署的 AutoML 功能和模型。
第九章**,机器学习解决方案的高级数据可视化技术*,提供了使用 Qlik 工具可视化机器学习相关数据的示例和最佳实践。本章涵盖了 Qlik 图表和高级特性和功能,以充分利用图表。它还将介绍如何使用 Insight Advisor 来帮助可视化任务并提供数据洞察。
第十章**,示例和案例研究*,将引导您通过 Qlik 机器学习产品组合的实际案例和使用场景。每个示例都进行了详细描述,并提供了关于业务价值的信息。
第十一章**,未来方向*,将为您提供机器学习未来发展和趋势的见解。您将了解整体趋势以及 Qlik 产品组合如何发展以支持新趋势的采用。
要充分利用本书
为了充分利用本书,您应该具备 Qlik 工具和数据分析的基本知识。此外,了解 Qlik Cloud 和 AutoML 以及机器学习基本概念和统计学知识也是有益的。
本书涵盖的软件/硬件 | 操作系统要求 |
---|---|
Qlik Cloud Analytics 和 Qlik AutoML | |
Qlik Sense 客户端管理或 Qlik Sense 桌面版 | Windows |
R 和 RStudio | Windows |
Python | Windows |
如果您正在使用本书的数字版,我们建议您亲自输入代码或从本书的 GitHub 仓库(下一节中有一个链接)获取代码。这样做将帮助您避免与代码的复制和粘贴相关的任何潜在错误。
下载示例代码文件
您可以从 GitHub(github.com/PacktPublishing/Machine-Learning-with-Qlik-Sense
)下载本书的示例代码文件。如果代码有更新,它将在 GitHub 仓库中更新。
我们还有其他来自我们丰富的书籍和视频目录的代码包,可在 github.com/PacktPublishing/
获取。查看它们吧!
使用的约定
本书使用了多种文本约定。
文本中的代码
: 表示文本中的代码单词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 昵称。以下是一个示例:“将下载的WebStorm-10*.dmg
磁盘映像文件作为系统中的另一个磁盘挂载。”
代码块设置如下:
iris:
LOAD
RowNo() as id,
sepal_length,
sepal_width,
petal_length,
petal_width
FROM [lib://<PATH TO DATAFILE>/iris_test.csv]
(txt, utf8, embedded labels, delimiter is ',', msq);
当我们希望将您的注意力引到代码块的特定部分时,相关的行或项目将以粗体显示:
[predictions]:
LOAD * EXTENSION endpoints.ScriptEval('{"RequestType":"endpoint", "endpoint":{"connectionname":"ML demos:Iris"}}', iris);
粗体: 表示新术语、重要单词或屏幕上看到的单词。例如,菜单或对话框中的单词以粗体显示。以下是一个示例:“如果我们想更改实验,我们可以选择配置 v2”。
小贴士或重要注意事项
看起来是这样的。
联系我们
我们始终欢迎读者的反馈。
一般反馈: 如果您对本书的任何方面有疑问,请通过电子邮件发送至 customercare@packtpub.com,并在邮件主题中提及书名。
勘误表: 尽管我们已经尽一切努力确保内容的准确性,但错误仍然可能发生。如果您在这本书中发现了错误,我们将非常感激您能向我们报告。请访问www.packtpub.com/support/errata并填写表格。
盗版: 如果您在互联网上以任何形式遇到我们作品的非法副本,我们将非常感激您能向我们提供位置地址或网站名称。请通过 copyright@packtpub.com 与我们联系,并提供材料的链接。
如果您有兴趣成为作者:如果您在某个主题上具有专业知识,并且您有兴趣撰写或为书籍做出贡献,请访问authors.packtpub.com.
分享您的想法
一旦您阅读了《使用 Qlik Sense 进行机器学习》,我们很乐意听到您的想法!请点击此处直接进入此书的亚马逊评论页面并分享您的反馈。
您的评论对我们和科技社区都很重要,并将帮助我们确保我们提供高质量的内容。
下载此书的免费 PDF 副本
感谢您购买此书!
您喜欢在路上阅读,但无法携带您的印刷书籍到处走?您的电子书购买是否与您选择的设备不兼容?
不要担心,现在,随着每本 Packt 书籍,您都可以免费获得该书的 DRM 免费 PDF 版本。
在任何地方、任何设备上阅读。直接从您最喜欢的技术书籍中搜索、复制和粘贴代码到您的应用程序中。
优惠不会就此结束,您还可以获得独家折扣、时事通讯和每日免费内容的每日电子邮件。
按照以下简单步骤获取这些好处:
- 扫描下面的二维码或访问以下链接
https://packt.link/free-ebook/978-1-80512-615-7
-
提交您的购买证明
-
就这些!我们将直接将您的免费 PDF 和其他福利发送到您的电子邮件中
第一部分:机器学习概念
本节将为本书剩余部分提供背景知识。本节涵盖了使用 Qlik 平台进行机器学习的基础知识,并提供了对机器学习和统计学中使用的的重要概念和算法的理解。它还涵盖了在机器学习领域中使用数据素养。最后,本节提供了使用 Qlik 平台构建良好机器学习解决方案的基本要素。这些概念将在本书的第二部分中应用。
本节包含以下章节:
-
第一章**:使用 Qlik 的机器学习简介
-
第二章**:使用 Qlik 的机器学习算法和模型
-
第三章**:机器学习环境中的数据素养
-
第四章**:使用 Qlik 平台创建良好的机器学习解决方案
第一章:使用 Qlik 介绍机器学习
机器学习和人工智能是 21 世纪最强大的技术趋势之一。这些技术的使用正在迅速增长,因为对更快洞察和预测的需求已成为公司至关重要的因素。Qlik 是分析领域的领先供应商,并在机器学习和 AI 工具上进行了大量投资。
本章将介绍 Qlik 生态系统中的不同机器学习工具,并提供这些工具背后的统计模型和原理的基本信息。它还将涵盖正确样本大小和如何分析模型性能和可靠性的概念。
在本章中,我们将涵盖以下内容:
-
Qlik 工具和平台概述
-
机器学习的基本统计概念
-
正确样本大小和样本定义因素
-
如何评估模型性能和可靠性
Qlik 工具介绍
Qlik Sense 是领先的数据分析和商业智能平台,包含许多与机器学习相关的数据分析和功能。在本章中,我们将更深入地了解 Qlik 平台的关键特性。
Qlik 平台上的机器学习和 AI 功能可以分为三个不同的组件:
-
Insight Advisor
-
Qlik AutoML
-
高级分析集成
Insight Advisor
Qlik Insight Advisor 是 Qlik Sense 的一个功能,它使用自然语言处理(NLP)和机器学习来帮助用户更有效地探索和分析数据。它允许用户用自然语言提出关于他们数据的问题,并实时接收见解和建议。它还自动生成高级分析和可视化,并协助分析和数据准备。
Insight Advisor 结合了 Qlik 的关联引擎和增强智能引擎,支持广泛的应用场景,如下图所示:
图 1.1:Qlik Insight Advisor 和不同场景
你知道吗?
Qlik 关联引擎是驱动 Qlik 数据分析和商业智能平台的核心技术。它是一个强大的内存引擎,使用关联数据模型,使用户能够以比传统基于查询的工具更直观、更自然的方式探索数据。
与预定义的查询或数据模型不同,该引擎根据常见的字段或属性自动关联多个表和数据源中的数据,并使用一种专利的索引技术将所有数据存储在内存中,从而实现实时分析和探索甚至最大的数据集。这是一项强大且创新的技术,支撑着整个 Qlik 平台。
Insight Advisor 具有以下关键特性:
-
高级洞察生成:Insight Advisor 提供了一种揭示新和隐藏洞察的方法。它使用多种形式交付 AI 生成的分析。用户可以从全系列的分析类型中选择,这些类型是自动生成的。这些类型包括可视化、叙事洞察和整个仪表板。还支持高级分析,Insight Advisor 可以生成比较、排名、趋势、聚类、地理分析、时间序列预测等。
-
基于搜索的视觉发现:Insight Advisor 根据自然语言查询自动生成对用户最相关和最有影响力的可视化。它提供了一套用户可以编辑和微调后添加到仪表板上的图表。它是上下文感知的,并通过生成的可视化反映选择。它还建议探索的最重要数据关系。
-
会话式分析:Insight Advisor 中的会话式分析允许用户使用自然语言进行交互。Insight Advisor Chat 为整个 Qlik 平台提供完整的会话式分析体验。它理解用户意图,并为更深入的理解提供额外的见解。
-
加速创建和数据准备:加速创建和数据准备帮助用户使用传统的构建过程创建分析。它就数据中的关联和关系提供建议。它还提供图表建议,并为每个用例渲染最佳类型的可视化,这使得非技术用户能够充分利用分析数据。数据准备的一部分还涉及智能配置文件,它提供有关数据的描述性统计信息。
注意
在第九章中可以找到一个使用 Insight Advisor 的动手示例,其中你将获得一个最重要的功能在实际操作中的实用示例。
Qlik AutoML
Qlik AutoML 是一个自动化的机器学习工具,它使 AI 生成的机器学习模型和预测分析对所有用户可用。它允许用户通过直观的、无代码的用户界面轻松生成机器学习模型、进行预测和规划决策。
AutoML 连接并分析数据,识别数据集中的关键驱动因素,并生成和优化模型。它允许用户创建未来预测并测试假设情景。结果以预测影响因素数据(Shapley 值)在记录级别返回,使用户能够理解预测的原因。这对于根据结果采取正确的行动至关重要。
预测数据可以发布到 Qlik Sense 进行进一步分析,并且可以使用高级分析集成将模型集成以进行实时探索性分析。
使用 AutoML 简单易行,不需要全面的数据科学技能。用户必须首先选择目标字段,然后 AutoML 将运行以下图所示的各个步骤:
图 1.2:AutoML 流程
模型建立和训练完成后,AutoML 允许用户对当前数据集进行预测。部署的模型既可以从 Qlik 工具中,也可以从其他分析工具中使用。AutoML 还提供了一个 REST API 来消费部署的模型。
注意
更多关于 AutoML 的信息,包括实践示例,可以在第八章中找到。
高级分析集成
高级分析集成是将高级分析和机器学习模型直接集成到 Qlik 数据分析平台的能力。这种集成使用户能够结合高级分析的力量与 Qlik 的数据探索和可视化能力,从而从数据中获得更深入的见解。
高级分析集成基于开放的 API,它提供了 Qlik 关联引擎与第三方数据科学工具之间的直接、引擎级别的集成。当用户与软件交互时,数据正在交换,计算也在实时进行。根据用户的选择和上下文,只有相关的数据从关联引擎传递到第三方工具。工作流程在以下图中解释:
图 1.3:高级分析集成数据流
高级分析集成可以与任何外部计算引擎一起使用,但为 Amazon SageMaker、Amazon Comprehend、Azure ML、Data Robot 以及使用 R 和 Python 制作的定制模型提供了原生连接。Qlik AutoML 也可以利用高级分析集成。
注意
更多信息,包括关于高级分析集成的实际示例,可以在第七章中找到。关于本地环境所需组件的安装在第第五章中描述。
使用 Qlik 解决方案的基本统计概念
现在我们已经介绍了 Qlik 工具,我们将探讨一些与它们一起使用的统计概念。统计原理在机器学习算法的开发中起着至关重要的作用。这些原理为分析和建模数据、进行预测以及随着时间的推移提高机器学习模型的准确性提供了数学框架。在本节中,我们将熟悉在构建机器学习解决方案时所需的一些关键概念。
数据类型
不同数据类型以不同的方式处理,每种类型都需要不同的技术。在典型的机器学习解决方案中,有两种主要的数据类型:分类和数值。
分类数据通常使用名称或标签来定义一个组或类别。分类数据集中的每个数据点只分配给一个类别,并且每个类别是互斥的。分类数据可以进一步分为名义数据和有序数据。名义数据是命名或标记类别的数据类别。有序数据是由具有排名、顺序或评分尺度的元素构成的。有序数据可以排序或计数,但不能测量。一些机器学习算法无法处理分类变量,除非将这些变量(编码)转换为数值。
数值数据可以分为可计数的离散数值数据。它使用自然数形成,例如,年龄、公司员工数量等。数值数据的另一种形式是连续数据。此类数据的例子可以是人的身高或学生的分数。需要注意的一种数据类型是日期时间信息。日期和时间通常在机器学习模型中很有用,但需要一些工作才能将它们转换为数值数据。
平均数、中位数和众数
平均数是通过将数据集中所有值的总和除以值的数量来计算的。简化的方程可以形成如下:
平均数 = 数据点总和 __________________ 数量数据点
以下是一个计算数据点集合平均数的简单示例:
X = [5,15,30,45,50]
X̅ = (5+15+30+45+50)/5*
X̅ = 29
平均数对异常值敏感,这些异常值会显著影响其值。平均数通常写作 X̅.
中位数是排序数据集的中间值。使用前面示例中的数据集,我们的中位数是 30。中位数相对于平均数的主要优点是中位数受异常值的影响较小。如果存在异常值的高概率,最好使用中位数而不是平均数。如果我们数据集中的数据点数量是偶数,则中位数是两个中间点的平均值。
众数代表数据集中的最常见值。它主要用于需要理解聚类或,例如,编码的分类数据的情况。计算众数相当简单。首先,我们需要对所有值进行排序,并计算每个值在集合中出现的次数。出现次数最多的值就是众数。以下是一个简单示例:
X = [1,4,4,5,7,9]
众数 = 4,因为它出现了两次,而所有其他值只出现了一次。数据集也可以有多个众数(多众数数据集)。在这种情况下,两个或多个值以最高的频率出现。
方差
方差 (σ2) 是一个描述数据集中数据变异程度或分布的统计量。它是数据集平均值与所有值平方差的平均值。
换句话说,方差衡量每个数据点与数据集平均值偏离的程度。低方差表示数据点紧密围绕平均值聚集,而高方差表示数据点从平均值向外更广泛地分散。
方差的公式如下:
σ² = Σ (xi − x̅)² / (n − 1)
其中 σ² 是数据集的方差,n 是集合中的数据点数量,Σ 是每个数据点(xi)与平均值(x̅)之间平方差的和。方差的平方根是标准差。
方差是统计学和机器学习中的一个重要概念,因为它被用于计算许多其他统计量,包括标准差和协方差。它也常用于评估模型性能和比较不同的数据集。
方差用于查看数据集中各个值之间的关系。其优点是方差将所有偏离平均值的差异视为相同,无论方向如何。
示例
我们有一支股票在第一年回报率为 15%,第二年回报率为 25%,第三年回报率为-10%。回报率的平均值是 10%。每年回报率与平均值的差异是 5%,15%,和-20%。将这些值平方后得到 0.25%,2.25%,和 4%。如果我们把这些值加起来,我们会得到 6.5%。当除以 2(3 个观察值-1)时,我们得到方差为 3.25%。
标准差
标准差是一种统计量,它量化了一组数据中的变异或分散程度。它衡量单个数据点与数据集平均值偏离的程度。
低标准差表示数据点接近平均值,而高标准差表示数据点从平均值向外更分散。
标准差的公式如下:
σ = √Σ (xi − x̅)² / (n − 1)
其中 σ 是标准差,Σ 是每个数据点(xi)与平均值(x̅)之间平方差的和,n 是数据点的数量。
示例
继续我们之前的例子,我们得到了我们股票的方差为 3.25%。对方差开平方得到标准差为 18%。
标准化
标准化或Z 分数归一化是将不同变量归一化到相同尺度的概念。这种方法允许比较不同类型变量之间的分数。Z 分数是平均值的标准差的分数表示。我们可以使用以下公式来计算 z 分数:
z = (x − x̅) / σ
在公式中,x 是观察值,x̅ 是平均值,σ 是数据的标准差。
基本上,z 分数描述了特定数据点与平均值相差多少个标准差。如果一个数据点的 z 分数较高,这表明该数据点很可能是异常值。Z 分数标准化是数据科学中最受欢迎的特征缩放技术之一,并且是一个重要的预处理步骤。许多机器学习算法试图在数据中找到趋势并比较数据点的特征。如果特征处于不同的尺度上,这会成为一个问题,这就是为什么我们需要标准化。
注意
标准化数据集将具有 0 的平均值和 1 的标准差,但没有最大值和最小值的具体界限。
相关性
相关性是一个描述两个变量之间关系的统计量。它衡量一个变量的变化与另一个变量的变化相关联的程度。
存在两种类型的关联:正相关和负相关。正相关意味着两个变量向同一方向移动,而负相关意味着两个变量向相反方向移动。相关系数为 0 表示变量之间没有关系。
最常用的相关性度量是皮尔逊相关系数,其范围从-1 到 1。-1 的值表示完全负相关,0 的值表示没有相关性,1 的值表示完全正相关。
当变量的关系是线性的,并且两个变量都是定量和正态分布时,可以使用皮尔逊相关系数。数据集中不应存在异常值。
可以使用 R 中的cor()
函数或 Python 中的scipy.stats
或NumPy
库来计算相关性。
概率
概率是机器学习中的一个基本概念,用于量化事件或结果的不确定性。概率的基本概念包括以下内容:
-
随机变量:其值由机会决定的变量。随机变量可以是离散的或连续的。
-
概率分布:描述随机变量不同值可能性的函数。常见的概率分布包括正态分布、二项分布和泊松分布。
-
贝叶斯定理:概率论中的一个基本定理,描述了条件概率之间的关系。贝叶斯定理被用于许多机器学习算法中,包括朴素贝叶斯分类器和贝叶斯网络。
-
条件概率:在另一个事件已经发生的情况下,一个事件发生的概率。条件概率被用于许多机器学习算法中,包括决策树和马尔可夫模型。
-
期望值:随机变量的平均值,按其概率分布加权。期望值被用于许多机器学习算法中,包括强化学习。
-
最大似然估计:一种基于观察数据估计概率分布参数的方法。最大似然估计被用于许多机器学习算法中,包括逻辑回归和隐马尔可夫模型。
注意
概率是一个广泛的概念,关于这个领域已经写了很多书。在这本书中,我们不会深入探讨细节,但了解这些术语在高级别上是很重要的。
我们现在已经调查了在 Qlik 工具中起关键作用的统计学的基本原则。接下来,我们将关注定义适当样本大小的概念。这是一个重要的步骤,因为我们并不总是能够用所有数据来训练我们的模型,我们希望我们的训练数据集尽可能地代表全部数据。
定义适当的样本大小和总体
定义适当的样本大小对于机器学习来说至关重要,以获得准确的结果。这也是一个常见问题,我们不知道需要多少训练数据。拥有正确的样本大小对于几个原因来说很重要:
-
泛化:机器学习模型是在数据样本上训练的,预期它们可以推广到新的、未见过的数据。如果样本大小太小,模型可能无法捕捉问题的全部复杂性,从而导致泛化性能差。
-
过拟合:当模型与训练数据拟合得太紧密时,就会发生过拟合,导致泛化性能差。当样本大小较小时,过拟合的可能性更大,因为模型有更少的例子可以学习,并且可能更可能拟合数据中的噪声。
-
统计显著性:在统计推断中,样本大小是确定结果统计显著性的一个重要因素。较大的样本大小提供了对模型参数的更可靠估计,并减少了由于随机变化导致的错误的可能性。
-
资源效率:机器学习模型的训练可能计算成本很高,尤其是在大型数据集上。拥有正确的样本大小可以通过减少训练模型所需的时间和计算资源来帮助优化计算资源的使用。
-
决策:机器学习模型常被用于做出具有现实世界后果的决策。拥有正确的样本大小确保模型可靠且可信,减少基于错误或不充分数据做出错误或偏见的决策的风险。
定义样本大小
样本大小取决于几个因素,包括问题的复杂性、数据的质量以及所使用的算法。"我需要多少训练数据?"是机器学习项目开始时常见的问题。不幸的是,这个问题没有正确答案,因为它取决于各种因素。然而,有一些指导原则。
通常,在定义样本时应该考虑以下因素:
-
拥有代表性样本:对于训练机器学习模型来说,拥有一个代表总体的样本是至关重要的。样本量应该足够大,以捕捉数据的变异性并确保模型不会偏向于总体的某个特定子集。
-
避免过拟合:过拟合发生在模型过于复杂且与训练数据拟合得太紧密时。为了避免过拟合,拥有足够的样本量以确保模型能够很好地泛化到新数据是非常重要的。
-
考虑特征数量:数据集中特征或变量的数量也会影响样本量。随着特征数量的增加,训练模型所需的样本量也会增加。
-
使用功率分析:功率分析是一种统计技术,用于确定检测显著效应所需的样本量。它可以用来确定机器学习模型达到一定准确度或预测能力所需的样本量。
-
交叉验证:交叉验证是一种用于评估机器学习模型性能的技术。它涉及将数据分为训练集和测试集,并使用测试集来评估模型的性能。样本量应该足够大,以确保测试集能够代表总体并提供模型性能的可靠估计。
有几种统计启发式方法可用于估计样本量。让我们更详细地看看其中的一些。
功率分析
功率分析是机器学习中的一个关键概念。功率分析主要用于确定统计测试是否有足够的概率发现效应,并估计在考虑显著性水平、效应大小和统计功率的情况下,实验所需的样本量。
在这个概念中,功率的定义是统计测试将拒绝一个错误的零假设(H0)或检测到效应的概率(取决于效应是否存在)。更大的样本量将导致更大的功率。功率分析的主要输出是估计适当的样本量。
要了解功率分析的基本原理,我们需要熟悉以下概念:
-
第一类错误(α)是在数据中错误地拒绝 H0 或零假设(假阳性)。
-
第二类错误(β)是未能拒绝一个错误的 H0 或换句话说,是错过数据中存在效应的概率(假阴性)。
-
功率是检测数据中存在效应的概率。
-
功率和第二类错误之间存在直接关系:
功率 = 1 – β
通常,β 应该不超过 20%,这给我们带来了最低批准的 80% 功率水平。
-
显著性水平(α)是你愿意承担的最大风险,即拒绝一个真实的零假设(H0)。这通常设置为 5%(p < 0.05)。
-
效应量是衡量数据集中现象强度的一个指标(独立于样本大小)。效应量通常是最难确定的。效应量的一个例子是男性和女性之间的身高差异。效应量越大,身高差异就越大。效应量通常在公式中用字母d表示。
现在我们已经定义了关键概念,让我们看看如何使用 R 和 Python 中的功率分析来计算一个简单实验的样本大小。在 R 中,我们将使用一个名为pwr
的包,而在 Python 中,我们将使用NumPy
和statsmodels.stats.power
库。
假设我们想要创建一个客户行为的模型。我们想知道在我们的在线商店中,我们偏好的客户和其他客户支付的平均价格是否有差异。我们应该调查每个组中多少笔交易才能得到 80%的功率水平?
R:
library(pwr)
ch <- cohen.ES(test = "t", size = "medium")
print(ch)
test <- pwr.t.test(d = 0.5, power = 0.80, sig.level = 0.05)
print(test)
模型将给出以下结果:
Two-sample t test power calculation
n = 63.76561
d = 0.5
sig.level = 0.05
power = 0.8
alternative = two.sided
NOTE: n is number in *each* group
因此,我们需要每个组中有一个包含 64 笔交易的样本。
Python:
import numpy as np
from statsmodels.stats.power import TTestIndPower
analysis = TTestIndPower()
sample_size = analysis.solve_power(effect_size = 0.5, alpha = 0.05, power = 0.8)
print(str(sample_size))
我们的 Python 代码将产生与之前 R 代码相同的结果,每个组中都有 64 笔交易。
注意
功率分析是一个广泛且复杂的话题,但了解基础知识很重要,因为它在许多机器学习工具中得到广泛应用。在本章中,我们只是触及了这个话题的表面。
抽样
抽样是一种方法,使得我们可以根据来自总体(数据集)的子集(样本)的统计数据来获取关于总体的信息(而不必调查每个个体值)。如果数据集很大且无法进行全面分析,抽样特别有用。在这种情况下,识别和分析一个代表性的样本很重要。在某些情况下,一个小样本可能足以揭示最重要的信息,但通常,使用更大的样本可以增加代表整个数据集的可能性。
在进行抽样时,有一些方面需要考虑:
-
样本目标:你希望估计或预测的属性
-
总体:一个进行观测的领域
-
选择标准:一种确定单个值是否将被接受为样本一部分的方法
-
样本大小:将形成最终样本数据的观测值数量
抽样方法可以分为两大类:
概率抽样是一种技术,其中数据集中的每个元素都有同等的机会被选中。这些方法通常提供了创建真正代表总体的样本的最佳机会。概率抽样算法的例子包括简单随机抽样、聚类抽样、系统抽样和分层随机抽样。
非概率采样是一种所有元素并不同等适合被选中的方法。使用这些方法,样本非代表性的风险很大。非概率采样算法的例子包括便利抽样、选择抽样、滚雪球抽样和配额抽样。
当使用采样作为创建训练集的方法时,建议在 R 或 Python 中利用专门的采样库。这将自动化过程,并基于选定的算法和规范生成样本。在 R 中,我们可以使用标准的sample
库,而在 Python 中有一个名为random.sample
的包。以下是用这两种语言进行随机采样的简单示例:
R:
dataset <- data.frame(id = 1:20, fact = letters[1:20])
set.seed(123)
sample <- dataset[sample(1:nrow(dataset), size=5), ]
样本框架的内容将如下所示:
id fact
15 15 o
19 19 s
14 14 n
3 3 c
10 10 j
Python:
import random
random.seed(123)
dataset = [[1,'v'],[5,'b'],[7,'f'],[4,'h'],[0,'l']]
sample = random.sample(dataset, 3)
print(sample)
样本向量的结果将类似于以下内容:
[[1, 'v'], [7, 'f'], [0, 'l']]
注意
互联网上有大量关于不同采样技术以及如何使用 R 和 Python 进行采样的材料。花些时间用简单的数据集练习这些技术。
采样误差
在所有采样方法中,错误是不可避免的。存在两种类型的采样误差:
-
选择偏差是由选择非随机值作为样本的一部分而引入的。在这种情况下,样本不能代表我们想要分析的数据库。
-
采样误差是在我们没有选择代表整个数据集总体样本时发生的一种统计误差。在这种情况下,预测或模型的结果将不会代表实际结果,这些结果被推广以涵盖整个数据集。
训练数据集总是会包含采样误差,因为它不能代表整个数据集。在二元分类的背景下,采样误差可以使用以下简化的公式进行计算:
样本误差 = 假阳性 + 假阴性 ____________________________________________ 真阳性 + 假阳性 + 真阴性 + 假阴性
例如,如果我们有一个包含 45 个值的数据集,其中 12 个是错误值,我们将得到样本误差为 12/45 = 26.67%。
上述公式只能在二元分类的背景下使用。当从样本均值(x)估计总体均值(μ)时,标准误差的计算如下:
SE = σ √n
-
SE (标准误差):标准误差是样本统计量变异或不确定性的度量。它量化了样本统计量预期会从真实总体参数中变化的程度。换句话说,它给你一个关于你的样本估计可靠性和精确性的概念。
-
σ(总体标准差):这是你试图从中进行推断的整个总体的标准差。它表示总体数据的变异性或分布范围。在实践中,总体标准差通常是未知的,因此当处理样本数据时,你可能使用样本标准差(s)来估计它。
-
n(样本大小):你样本中的观测值或数据点的数量。
示例
我们正在进行一项调查,以估计一个小镇居民的平均年龄(均值)。我们收集了 50 位居民的随机样本,并找到了以下统计数据:
-
样本均值( _ x ):35 年
-
样本标准差(s):10 年(对总体标准差的估计)
-
样本大小(n):50 位居民
SE = 10 √ 50 = 1.42 years
因此,样本平均数标准误差大约为 1.42 年。这意味着,如果你从总体中多次随机抽取相同大小的样本并计算每个样本的平均值,你预期这些样本平均值将围绕 35 年变化,平均变化量为 1.42 年。
标准误差常用于构建置信区间。例如,你可能使用这个标准误差来计算城镇居民平均年龄的 95%置信区间,这将允许你估计真实人口平均年龄可能落在的 95%置信范围。
如我们所见,样本误差,通常被称为“抽样误差”,不是一个单一的公式。相反,它是一个反映在样本数据上进行的估计或测量中的变异性或不确定性的概念。抽样误差的具体公式取决于你正在估计的统计量或参数以及你的数据特征。在实践中,你会使用统计软件或工具来计算你感兴趣的特定参数或估计的标准误差。
机器学习中的训练数据和测试数据
如果我们不需要大量覆盖我们正在调查现象的历史数据来定义所需的数据量,那么上述定义样本大小的方法将工作得很好。在许多情况下,我们有一个大型数据集,并希望从历史数据中生成训练数据和测试数据集。训练数据集用于训练我们的机器学习模型,测试数据集用于验证我们模型的准确性。训练数据和测试数据集是机器学习中的关键概念。
我们可以利用功效分析和抽样来创建训练集和测试集,但有时如果我们的样本已经创建,就没有必要进行复杂分析。训练集是原始数据集的最大子集,将用于拟合机器学习模型。测试集是原始数据的另一个子集,并且始终独立于训练集。
测试数据应该组织良好,并包含模型在生产环境中可能遇到的各种场景的数据。通常,它是原始数据集的 20-25%。可以根据问题的要求或数据集的特征调整精确分割。
从原始数据集中生成训练集和测试集也可以使用 R 或 Python 完成。Qlik 函数可以在加载脚本中执行此操作。
现在我们已经研究了定义良好样本的一些概念,我们可以专注于用于分析模型性能和可靠性的概念。这些概念很重要,因为使用这些技术可以让我们进一步开发我们的模型,并确保它给出正确的结果。
分析模型性能和可靠性的概念
分析我们机器学习模型的性能和可靠性是一个重要的开发步骤,应该在将模型投入生产之前完成。根据您试图解决的特定任务和问题,您可以使用几个指标来分析机器学习模型的性能和可靠性。在本节中,我们将介绍一些这些技术,重点关注 Qlik 工具使用的技术。
回归模型评分
以下概念可用于评分和验证回归模型。回归模型预测结果为一个数值,表示模型对目标变量的最佳估计。我们将在第二章中了解更多关于回归模型的内容。
R2(R-平方)
R-平方是一个统计量,表示回归模型中由自变量(或变量)解释的因变量变异性比例。换句话说,它衡量回归模型与数据的拟合优度。
R-平方的范围从 0 到 1,其中 0 表示模型无法解释因变量的任何变异性,而 1 表示模型完美地解释了因变量的所有变异性。
R 平方是衡量回归模型质量的重要指标。高 R 平方值表明模型很好地拟合了数据,并且自变量与因变量之间有很强的关系。低 R 平方值表明模型没有很好地拟合数据,并且自变量与因变量之间没有很强的关系。然而,需要注意的是,高 R 平方值并不一定意味着模型是最佳模型,因此在评估模型性能时,还应考虑其他因素,如过拟合。R 平方通常与其他指标一起使用,并且应在问题的背景下进行解释。R 平方的公式如下:
R² = 模型解释的方差 _______________________ 总方差
R 平方有一些局限性。它不能用来检查预测是否有偏差,并且它不会告诉我们回归模型是否拟合良好。偏差是指预测中的系统性错误。要检查偏差,你应该分析残差(预测值和观察值之间的差异)或使用特定的偏差指标,如平均绝对误差(MAE)和平均偏差偏差(MBD)。R 平方主要解决模型方差,而不是偏差。
有时使用调整后的 R 平方会更好。调整后的 R 平方是回归分析中使用的标准 R 平方的修改版。当我们处理多个预测因子时,可以使用调整后的 R 平方来评估模型拟合度、控制过拟合、比较具有不同预测因子的模型,并帮助进行特征选择。它考虑了预测因子的数量,对不必要的复杂性进行惩罚。然而,它应该与其他评估指标和领域知识一起使用,以进行全面模型评估。
均方根误差(RMSE)、平均绝对误差(MAE)和均方误差(MSE)
均方根误差是预测值和实际值之间可以预期的平均差异。它是残差(预测误差)的标准差,告诉我们数据围绕“最佳拟合线”的集中程度。它是衡量模型在预测定量数据时误差的标准方法。RMSE 总是以与目标值相同的单位来衡量。
例如,如果我们有一个预测某个地区房屋价值的模型,并且得到一个 RMSE 为 20,000,这意味着平均而言,预测值与实际值相差 20,000 美元。
平均绝对误差定义为所有数据点中所有绝对预测误差的平均值。在 MAE 中,不同的误差没有加权,但分数随着误差的增加而线性增加。由于我们使用的是误差的绝对值,MAE 始终是正值。当误差对称分布且没有显著异常值时,MAE 非常有用。
均方误差是预测值和实际值之间平方平均差的平方。平方消除了负值并确保 MSE 始终为正值或 0。MSE 越小,我们的模型就越接近“最佳拟合线”。RMSE 可以使用 MSE 计算。RMSE 是 MSE 的平方根。
实践中何时使用上述度量
MAE 对异常值具有鲁棒性,并提供了对平均误差幅度的直接解释。
MSE 对大误差的惩罚更重,适用于您想最小化异常值对误差度量影响的情况。
均方根误差(RMSE)与均方误差(MSE)类似,但提供了一个与目标变量相同单位的可解释误差度量。
在选择误差度量时,应与您特定的问题和目标保持一致。同时,考虑数据的性质和异常值对误差度量的影响也是一个好的实践。此外,您可以将这些度量与其他评估技术结合使用,以全面了解模型的性能。
多类分类评分和二类分类评分
以下概念可用于评分和验证多类和二类模型。二类分类模型将结果分为两个类别,通常表示为是或否。多类分类模型类似,但结果类别超过两个。我们将在第二章中了解更多关于这两种模型的信息。
召回率
召回率衡量的是正确分类的正面实例占总实际正面实例的百分比。换句话说,召回率代表了模型正确捕获所有正面实例的能力。
召回率的计算如下:
召回率 = 真正例 ______________________ (真正例 + 假阴性)
高召回率表明模型能够准确地捕获所有正面实例,并且假阴性率很低。另一方面,低召回率表明模型遗漏了许多正面实例,导致假阴性率很高。
精确度
精确度衡量的是正确分类的正面实例占总预测正面实例的百分比。换句话说,精确度代表了模型正确识别正面实例的能力。
精确度的计算如下:
精确度 = 真正例 _____________________ (真正例 + 假正例)
高精确度表明模型能够准确识别正例,并且错误分类为正例的实例率很低。另一方面,低精确度表明模型错误地将许多实例分类为正例,导致错误分类的实例率很高。
精确度在错误分类成本高或不受欢迎的情况下特别有用,例如在医学诊断或欺诈检测中。精确度应与其他指标如召回率和F1 分数结合使用,以获得模型表现的更全面视图。
F1 分数
F1 分数定义为精确度和召回率的调和平均值,其范围从 0 到 1,值越高表示性能越好。F1 分数的公式如下:
F1 分数 = 2 * (精确度 * 召回率) / (精确度 + 召回率)
F1 分数同时考虑了精确度和召回率,使其在正负实例分布不均时评估模型的有用指标。高 F1 分数表明模型在精确度和召回率之间取得了良好的平衡,并能准确地对正负实例进行分类。
通常,数据集的不平衡程度越高,F1 分数可能越低。重要的是要认识到,在处理高度不平衡的数据集时,其中一个类别远多于另一个类别,F1 分数可能会受到影响。更不平衡的数据集可能导致 F1 分数降低。了解这种联系有助于在特定数据分布和问题域的背景下解释 F1 分数。如果 F1 值高,所有其他指标也会很高,如果 F1 值低,则需要进一步分析。
准确率
准确率衡量的是正确分类的实例占总实例数的百分比。换句话说,准确率代表了模型正确分类正负实例的能力。
准确率的计算方法如下:
准确率 = (真阳性 + 真阴性) / (真阳性 + 假阳性 + 真阴性 + 假阴性)
高准确率表明模型能够准确地对正负实例进行分类,并且错误分类的实例率很低。然而,在正负实例分布不均的情况下,准确率可能会产生误导。在这种情况下,其他指标如精确度、召回率和 F1 分数可能更能准确地反映模型的表现。
在类别不平衡的数据集中,准确率可能会误导,其中一类远远多于其他类。这是因为准确率不考虑类别分布,即使模型仅预测多数类别,准确率也可能很高。为了解决这个问题,使用诸如精确率、召回率、F1 分数、AUC-ROC 和 AUC-PR 等指标,这些指标通过关注正确识别少数类别(通常此类数据集中的目标类别)来提供对模型性能的更准确评估。
示例场景
假设我们正在开发一个机器学习模型来检测仅发生在 1% 的人口中的罕见疾病。我们收集了 10,000 份患者记录的数据集:
-
100 名患者患有罕见疾病(正类)
-
9,900 名患者没有疾病(负类)
现在,假设我们的模型预测所有 10,000 名患者都没有疾病。以下是发生的情况:
-
真阳性(正确预测出患有疾病的患者):0
-
假阳性(错误预测出患有疾病的患者):0
-
真阴性(正确预测出未患有疾病的患者):9,900
-
假阴性(错误预测出未患有疾病的患者):100
使用准确率作为我们的评估指标会产生以下结果:
准确率 = 真阳性 + 真阴性 ___________________ 总数 = 9900 _ 10000 = 99%
我们的模型似乎有令人印象深刻的 99% 准确率,这可能会导致误导性的结论,即它表现异常出色。然而,它完全未能检测到任何罕见疾病的病例(真阳性 = 0),这是问题的最关键方面。
在这个例子中,准确率并不能准确反映模型的表现,因为它没有考虑到严重的类别不平衡和正确识别少数类别(患有疾病的患者)的重要性。
混淆矩阵
混淆矩阵是用于评估分类模型性能的表格。它显示了模型对一组测试数据做出的真阳性、假阳性、真阴性和假阴性预测的数量。
混淆矩阵中的四个元素代表以下内容:
-
真阳性(TP)是实际为真值,且被正确预测为真
-
假阳性(FP)是实际为假值,但被错误地预测为真
-
假阴性(FN)是实际为真值,但被错误地预测为假
-
真阴性(TN)是实际为假值,且被正确预测为假
Qlik AutoML 在实验视图中呈现混淆矩阵作为一部分。在每个象限下的数字下方,您还可以看到召回率(TP)、漏报率(FP)、误报率(FN)和特异性(TN)的百分比值。
Qlik AutoML 的混淆矩阵示例可以在以下图中看到:
图 1.4:Qlik AutoML 中看到的混淆矩阵
通过分析混淆矩阵,我们可以计算各种性能指标,如准确率、精确率、召回率和 F1 分数,这有助于我们了解模型在测试数据上的表现。混淆矩阵还可以帮助我们识别模型预测中的任何模式或偏差,并据此调整模型。
马修斯相关系数 (MCC)
马修斯相关系数指标可以用来评估二元分类模型的表现,尤其是在处理不平衡数据时。
MCC 考虑了混淆矩阵的所有四个元素(真正例、假正例、真负例和假负例),以提供二元分类器预测质量的一个度量。它的值介于-1 和+1 之间,+1 表示完美的分类性能,0 表示随机分类,-1 表示预测值与实际值完全不一致。
MCC 的公式如下:
MCC = (TP x TN − FP x FN) ________________________________ √ _____________________________________ ((TP + FP) x (TP + FN) x (TN + FP) x (TN + FN))
MCC 在处理不平衡数据集时特别有用,其中正负实例的数量不相等。在这种情况下,它比准确率提供了更好的分类性能度量,因为准确率可能会偏向多数类。
AUC 和 ROC 曲线
ROC(接收者操作特征)曲线是二元分类模型性能的图形表示,它使我们能够根据模型区分正负类的能力来评估和比较不同的模型。AUC 描述了曲线下的面积。
ROC 曲线(接受者操作特征曲线)显示了在各个分类阈值下真正例率(TPR)与假正例率(FPR)的关系。TPR 是真正例预测数与实际正例总数的比率,而 FPR 是假正例预测数与实际负例总数的比率。
通过改变分类阈值,我们可以获得不同的 TPR 和 FPR 对,并将它们绘制在 ROC 曲线上。ROC 曲线下的面积(AUC-ROC)被用作二元分类模型的性能指标,AUC-ROC 值越高,表示性能越好。
一个完美的分类器会有 1.0 的 AUC-ROC,这意味着它在所有可能的分类阈值下都有高 TPR 和低 FPR。一个随机分类器会有 0.5 的 AUC-ROC,这意味着它的 TPR 和 FPR 相等,其表现并不比随机更好。
ROC 曲线和 AUC-ROC 曲线对于评估和比较二元分类模型非常有用,尤其是在正负类不平衡或错误成本不同的情况下。
下图展示了在 Qlik AutoML 中看到的 ROC 曲线。该图显示了一个相当好的 ROC 曲线(曲线应该尽可能接近 1,因此它是好的)。虚线是 50:50 的随机机会。
图 1.5:Qlik AutoML 中良好模型的 ROC 曲线
阈值
在二元分类中,阈值是一个用于决定模型是否将实例分类为正类或负类的值。
当一个模型做出预测时,它会生成一个介于 0 和 1 之间的概率分数,该分数代表一个实例属于正类的可能性。如果分数高于某个特定的阈值值,则该实例被分类为正类,如果低于阈值,则被分类为负类。
阈值的选择可以显著影响分类模型的表现。如果阈值设置得太高,模型可能会错过许多正类实例,导致召回率低而精确度高。相反,如果阈值设置得太低,模型可能会将许多负类实例错误地分类为正类,导致召回率高而精确度低。
因此,为分类模型选择一个合适的阈值对于实现所需精度和召回率之间的平衡非常重要。最佳阈值取决于具体的应用和错误分类的成本。
Qlik AutoML 计算从 0 到 1 的数百个可能阈值值的精确度和召回率。选择实现最高 F1 分数的阈值。通过选择阈值,生成的预测对不平衡数据集更加稳健。
特征重要性
特征重要性是衡量模型中每个输入变量(特征)对输出变量(预测)贡献的度量。它是一种了解哪些特征对模型的预测影响最大,哪些特征可以忽略或删除而不会显著影响模型性能的方法。
特征重要性可以使用各种方法计算,具体取决于所使用的模型类型。计算特征重要性的常见方法包括以下几种:
-
置换重要性:这种方法涉及逐个随机打乱测试数据集中每个特征的值,并测量对模型性能的影响。当打乱时导致性能下降最大的特征被认为更重要。
-
基于树的模型特征重要性:在随机森林或梯度提升等基于决策树的模型中,特征重要性可以根据每个特征减少树的不纯度的程度来计算。减少不纯度最多的特征被认为更重要。
-
系数大小:在线性模型(如线性回归或逻辑回归)中,特征重要性可以根据分配给每个特征的系数的大小来计算。系数较大的特征被认为更重要。
特征重要性有助于理解输入变量与模型预测之间的关系,并可以指导特征选择和工程努力以提升模型性能。它还可以提供对潜在问题和所使用数据的洞察,并有助于识别潜在的偏差或数据质量问题。
在 Qlik AutoML 中,每个特征置换重要性以图形表示。这可以用来估计特征重要性。在 AutoML 中还可以看到另一种方法,即 SHAP 重要性值。下一节将介绍 SHAP 重要性值的原则。
SHAP 值
SHAP(SHapley Additive exPlanations)值是一种通过为每个输入特征分配重要性分数来解释机器学习模型输出的技术。
SHAP 值基于博弈论和 Shapley 值的概念,它提供了一种在合作游戏中公平分配玩家价值的方法。在机器学习的背景下,游戏是预测任务,玩家是输入特征。SHAP 值表示每个特征对特定预测与输出变量期望值之间差异的贡献。
SHAP 值方法涉及通过评估所有可能的特征组合(包括和不包括感兴趣的特定特征)的模型输出,来计算每个特征的贡献。特征的贡献是两种情况下模型输出差异的平均值。
SHAP 值提供了比其他特征重要性度量更细致的理解,因为它们考虑了特征之间的交互作用以及它们之间的潜在相关性。
SHAP 值可以使用 SHAP 图进行可视化,该图显示了每个特征对特定预测模型输出的贡献。此图有助于理解每个特征的相对重要性以及它们如何影响模型的预测。
SHAP 与置换重要性的区别
置换重要性和 SHAP 是衡量特征重要性的替代方法。两者之间的主要区别在于,置换重要性基于模型性能的下降。这是一种更简单、计算效率更高的计算特征重要性的方法,但可能无法准确反映复杂模型中特征的真实重要性。
SHAP 重要性基于特征归因的幅度。SHAP 值提供了对特征重要性的更细致的理解,但可能计算成本高昂,并且可能不适合非常大的数据集或复杂的模型。
排列重要性可用于以下方面:
-
理解哪些特征需要保留,哪些需要放弃
-
理解特征重要性对模型准确性的影响
-
理解是否存在数据泄露,即使用训练数据集以外的信息来创建或评估模型,导致过度乐观的性能估计或错误的预测
SHAP 重要性可用于以下方面:
-
理解哪些特征对预测结果影响最大
-
理解不同特征的值如何影响模型预测
-
理解数据集中最具影响力的行
我们可以在以下图中看到一个排列重要性和 SHAP 图的示例,如图 1.6 所示,如 Qlik AutoML 所示:
图 1.6:排列重要性和 SHAP 重要性图
注意
在本书后面的实践示例中,我们将利用排列重要性和 SHAP 重要性。
摘要
在本章中,我们首先介绍了 Qlik 工具的机器学习功能。我们发现了平台的关键特性以及如何利用不同的组件。理解关键组件很重要,因为我们将在本书后面的部分使用 Insight Advisor、AutoML 和高级分析集成。
我们还发现了统计学的一些关键概念。理解基础数学原理对于理解模型至关重要。我们对数学只是略作了解,但这应该足以让你熟悉术语。我们还触及了样本和样本大小这个重要话题。在创建模型时,我们需要用训练数据来训练它。确定合理的样本大小将帮助我们获得准确模型而不会浪费资源。
在本章末尾,我们熟悉了一些验证模型性能和可靠性的技术。这些概念非常重要,因为 Qlik 工具正在使用这些引入的方法来传达模型的指标。
在下一章中,我们将通过熟悉一些最常用的机器学习算法来增强我们的背景知识。这些算法将在本书的后续部分中使用。
第二章:使用 Qlik 的机器学习算法和模型
机器学习算法已成为我们生活的重要组成部分,从在线广告的个性化到流媒体平台的推荐系统。这些算法负责根据数据做出智能决策,而不需要明确编程。
机器学习算法是指一组数学模型和技术,使软件能够从数据中学习模式和关系,从而使其能够做出预测和决策。这些算法可以广泛分为监督学习、无监督学习、半监督学习和强化学习算法。每种类型的算法都有其独特的特征和应用,适用于广泛的任务。
在本章中,我们将概述机器学习算法及其应用,重点关注 Qlik 工具中使用的算法。作为本章的一部分,你将学习以下内容:
-
理解回归模型及其使用方法
-
理解不同的聚类算法和决策树
-
理解提升算法的基础,特别是 Qlik AutoML 中使用的提升算法
-
理解神经网络和其他高级机器学习模型的基础
注意
在撰写本书时,Qlik AutoML 正在使用以下算法:
二元和多类 分类问题:
CatBoost 分类,Elastic Net 回归,高斯朴素贝叶斯,Lasso 回归,LightGBM 分类,逻辑回归,随机森林分类,XGBoost 分类
回归问题:
CatBoost 回归,LightGBM 回归,线性回归,随机森林回归,SGD 回归,XGBoost 回归
其中一些算法将在接下来的章节中更详细地介绍。
回归模型
回归模型是一种监督式机器学习模型,用于根据一个或多个输入变量预测目标变量的连续数值。换句话说,回归模型用于估计输入变量和输出变量之间的关系。
机器学习中使用了各种类型的回归模型,其中一些包括以下内容:
-
线性回归:这是一种假设输入变量和输出变量之间存在线性关系的回归模型。
-
多项式回归:这是一种假设输入变量和输出变量之间存在多项式关系的回归模型。
-
逻辑回归:这是一种用于预测二元或分类结果的回归模型。它根据输入变量估计事件发生的概率。
-
岭回归:这是一种使用正则化来防止模型过拟合的线性回归模型。
-
Lasso 回归:这是另一种线性回归模型,它使用正则化来防止模型过拟合。当处理具有大量特征的数据库时,它特别有用。
在下一节中,我们将更详细地研究前面列表中的一些回归模型。
线性回归
线性回归用于建模因变量(也称为目标或响应变量)与一个或多个自变量(也称为解释或预测变量)之间的关系。线性回归的目标是找到最佳拟合线(或超平面),可以根据自变量的值预测因变量。换句话说,线性回归试图找到一个线性方程,将输入变量与输出变量联系起来。该方程采用以下形式:
Y = mX + b + e
其中 Y 是因变量,X 是自变量,m 是直线的斜率,b 是截距,e 代表模型的误差。线性回归的目标是找到最佳值 m 和 b,以最小化预测值与因变量实际值之间的差异。在简单线性回归中,我们有一个自变量,而在多元线性回归中,我们将有多个自变量。
Example
我们想要研究学生学习小时数与他们的考试成绩之间的关系。我们从 10 名学生那里收集数据,记录他们学习的小时数和相应的考试成绩。数据如下所示:
学习小时数 (X) | 考试成绩 (Y) |
---|---|
2 | 60 |
3 | 70 |
4 | 80 |
5 | 85 |
6 | 90 |
7 | 95 |
8 | 100 |
9 | 105 |
10 | 110 |
11 | 115 |
表 2.1:考试成绩数据
我们可以使用简单的线性回归模型来建模两个变量之间的关系,其中学习的小时数作为自变量(X)和考试成绩作为因变量(Y)。该模型采用以下形式:
Y = mX + b + e
其中 b 是截距(当 X=0 时 Y 的值)和 m 是斜率(Y 相对于 X 的变化率)。为了估计 b 和 m 的值,我们可以使用最小二乘法。求解回归方程,我们得到以下结果:
Y = 5 * X + 55 + e
这个方程告诉我们,平均而言,每多学习一个小时,学生可以在考试中期望多得 5 分。截距 55 告诉我们,如果一个学生没有学习任何小时数,他可以期望得到 55 分(这可能不太现实,但这只是从模型中进行的数学外推)。
我们可以使用这个模型根据学习的小时数来预测考试成绩。例如,如果一个学生学习了 7 个小时,我们可以估计他们的考试成绩如下:
Y = 5 * 7 + 55 + e = 90 + e
逻辑回归
逻辑回归是一种用于二元分类问题的统计方法,其中结果变量是分类的,并且只有两个可能的值,例如“是”或“否”,“通过”或“失败”,或“垃圾邮件”或“非垃圾邮件”。它是一种回归分析方法,通过估计二元结果的概率来模拟自变量和因变量之间的关系。
逻辑回归模型使用逻辑函数,也称为 Sigmoid 函数,来模拟输入变量和二元结果之间的关系。Sigmoid 函数将输入值转换为介于 0 和 1 之间的范围,这代表二元结果的概率。
逻辑回归模型可以使用最大似然估计方法来训练,以找到最大化给定模型观察数据的似然性的参数。然后,可以使用这些参数来预测新输入数据的二元结果的概率。
逻辑回归在医学诊断、信用评分和营销分析中得到广泛应用。它是一种流行的算法,因为它简单且可解释。
示例
假设我们想要根据客户的年龄和收入预测他们是否会购买产品。我们有一个包含 90 个客户的数据库,其中每一行代表一个客户,列代表他们的年龄、收入以及他们是否购买了产品(未购买为 0,购买为 1)。
我们可以使用逻辑回归来根据客户的年龄和收入建模他们购买产品的概率。逻辑回归模型可以表示为以下形式:
p(购买) = 1 ______________________________ (1 + exp(− (β0 + β1 * 年龄 + β2 * 收入)))
其中 β0、β1 和β2 是我们需要从数据中估计的模型参数。
我们可以使用最大似然估计来估计这些参数。一旦我们估计了参数,我们就可以使用该模型根据新客户的年龄和收入预测他们购买产品的概率。
例如,如果一个新客户年龄为 35 岁,收入为$50,000,我们可以使用该模型预测他们购买产品的概率如下:
p(购买) = 1 ____________________________ (1 + exp(− (β0 + β1 * 35 + β2 * 50000)))
然后,我们可以使用决策阈值,例如 0.5,来确定是否将客户分类为购买者或非购买者。请注意,阈值的选择可能会影响精确度和召回率之间的权衡。
我们可以使用 R 和 Python 以及相应的库来解决上述问题。让我们看看如何做到这一点。在以下示例中,我们将使用一个名为customer_data.csv
的样本数据集。
这里是数据文件的概述:
年龄 | 收入 | 购买 |
---|---|---|
22 | 20000 | 0 |
35 | 80000 | 1 |
42 | 50000 | 0 |
27 | 30000 | 0 |
48 | 70000 | 1 |
38 | 60000 | 1 |
41 | 45000 | 0 |
29 | 35000 | 0 |
33 | 40000 | 1 |
表 2.2:客户数据
使用 R 的示例解决方案
以下代码从 CSV 文件中读取客户数据,构建一个逻辑回归模型来根据客户的年龄和收入预测其购买的概率,然后根据概率值预测新客户的概率并提供相应的预测信息:
data <- read.csv('customer_data.csv')
model <- glm(purchased ~ age + income, data = data, family = binomial())
new_customer <- data.frame(age = 35, income = 50000)
prob_purchase <- predict(model, new_customer, type = "response")
if (prob_purchase >= 0.5) {
print("The customer is predicted to purchase the product.")
} else {
print("The customer is predicted not to purchase the product.")
}
使用 Python 的示例解决方案
此代码将客户数据从 CSV 文件读取到 pandas DataFrame 中,使用 scikit-learn 的LogisticRegression
类构建逻辑回归模型来根据年龄和收入预测购买概率,然后根据概率值预测新客户的概率并提供相应的预测信息:
import pandas as pd
data = pd.read_csv("customer_data.csv")
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(data[['age', 'income']], data['purchased'])
new_customer = pd.DataFrame({'age': [35], 'income': [50000]})
prob_purchase = model.predict_proba(new_customer)[:, 1]
if prob_purchase >= 0.5:
print("The customer is predicted to purchase the product.")
else:
print("The customer is predicted not to purchase the product.")
示例将打印“该客户被预测为购买产品”,概率为 0.81。
Lasso 回归
Lasso 回归或最小绝对收缩和选择算子(也称为 L1 正则化)是一种用于变量选择和正则化的线性回归方法。它是一种回归技术,在平方误差和中加入惩罚项,包括回归系数的绝对值。
Lasso 回归算法旨在最小化残差平方和,同时满足系数绝对值之和小于或等于一个常数的约束。这个约束导致一些系数被缩小到零,从而产生稀疏模型,而一些特征具有零系数,实际上将它们从模型中排除。
Lasso 回归在处理高维数据集时特别有用,其中特征(或预测因子)的数量远大于观测数。它还可以帮助克服线性回归模型中的过拟合问题,其中模型变得过于复杂,并且对训练数据拟合得很好,但无法很好地推广到新数据。
示例
我们有一个包含关于房屋及其销售价格的信息的数据集,包括诸如卧室数量、地块大小、房屋年龄和位置等特征。我们希望构建一个模型,可以根据这些特征预测房屋的销售价格。
构建此模型,我们可以使用 Lasso 回归。我们首先将数据集分为训练集和测试集。然后,我们使用训练集来拟合一个具有特定正则化参数(alpha)值的 Lasso 回归模型。我们可以通过交叉验证调整此参数,以找到在测试集上产生最低误差的最佳值。
一旦我们训练了我们的模型,我们就可以通过输入特征的值并计算相应的销售价格来使用它对新数据进行预测。Lasso 回归模型将自动选择最重要的特征进行预测,通过将不太重要的特征的系数缩小到零。
例如,假设我们的 Lasso 回归模型选择了卧室数量和位置作为预测销售价格的最重要特征,并将其他特征的系数缩小到零。我们可以利用这些信息来指导我们在购房或售房时的决策。
让我们看看一个示例解决方案如何在 R 和 Python 中工作。这两个示例都使用了加利福尼亚住房数据集,将数据分为训练集和测试集,拟合 Lasso 回归模型,在测试集上进行预测,并使用 RMSE 指标评估模型在测试集上的性能。
R 示例解决方案
代码使用 Lasso 正则化(L1 惩罚)进行线性回归,根据住房数据集预测中值房价。数据集从特定 URL 加载,预处理后分为训练集和测试集。使用glmnet
库构建模型,并计算均方根误差(RMSE)以评估模型性能:
url <- "https://raw.githubusercontent.com/ageron/handson-ml2/master/datasets/housing/housing.csv"
housing <- read.csv(url)
housing <- na.omit(housing)
set.seed(123)
train_index <- sample(nrow(housing), nrow(housing) * 0.8)
train <- housing[train_index, ]
test <- housing[-train_index, ]
library(glmnet)
x <- model.matrix(median_house_value ~ ., train)[,-1]
y <- train$median_house_value
model <- cv.glmnet(x, y, alpha = 1)
x_test <- model.matrix(median_house_value ~ ., test)[,-1]
y_test <- test$median_house_value
predictions <- predict(model, newx = x_test)
rmse <- sqrt(mean((predictions - y_test)²))
print(paste0("RMSE: ", rmse))
Python 示例解决方案
以下代码首先导入 pandas 库,并将其别名设置为pd
以方便使用。接下来,它从特定 URL 托管的一个 CSV 文件中读取数据,并创建一个名为“housing”的 DataFrame 来存储数据集。为了有效地处理分类数据,代码对ocean_proximity
列执行了一元编码,将其转换为多个二进制列。
数据的清洁性对于可靠的模型至关重要,因此脚本通过从 DataFrame 中删除包含 NaN 条目的任何行来处理缺失值。然后,使用 scikit-learn 的train_test_split
函数将数据集分为训练集和测试集,其中 80%的数据用于训练,剩余的 20%用于测试。
现在是机器学习部分。脚本从 scikit-learn 中导入LassoCV
类,这是一个具有 L1 正则化(Lasso)的线性回归模型。LassoCV
通过交叉验证从预定义的值集中找到最优的正则化强度(alpha)。然后,使用“fit
”方法在训练数据上训练模型。
训练完成后,模型接受测试。使用训练好的LassoCV
模型在测试数据上做出预测,并使用 RMSE 指标评估模型的性能。RMSE 表示预测的median_house_value
与测试数据中的实际目标值之间的偏差。较低的 RMSE 表示更好的预测准确性。
最后,脚本通过显示计算出的 RMSE 值来结束,这为LassoCV
模型在预测未见数据中的median_house_value
时的表现提供了洞察:
import pandas as pd
url = "https://raw.githubusercontent.com/ageron/handson-ml2/master/datasets/housing/housing.csv"
housing = pd.read_csv(url)
housing = pd.get_dummies(housing, columns=['ocean_proximity'])
housing.dropna(inplace=True)
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(housing.drop(columns=['median_house_value']), housing['median_house_value'], test_size=0.2, random_state=123)
from sklearn.linear_model import LassoCV
model = LassoCV(alphas=[0.001, 0.01, 0.1, 1], cv=5)
model.fit(X_train, y_train)
from sklearn.metrics import mean_squared_error
predictions = model.predict(X_test)
rmse = mean_squared_error(y_test, predictions, squared=False)
print(f"RMSE: {rmse}")
在 Python 示例中,我们必须在将数据分割成训练集和测试集之前对ocean_proximity
特征进行 one-hot 编码,这将允许 Lasso 回归模型在模型中使用该特征。这两个模型都会给出预测并打印出大约 67,000 到 68,000 的 RMSE,具体取决于使用的库版本。
注意
在本节中,我们更详细地研究了 Lasso 回归(L1 正则化)。L2 正则化与 Ridge 回归一起使用。Lasso 和 Ridge 回归的主要区别在于它们应用的正则化类型、对特征选择的影响以及处理多重共线性。Lasso 倾向于产生具有特征选择的稀疏模型,而 Ridge 则保持所有特征,但系数较小,这使得它在存在多重共线性问题时或当你想控制系数幅度时更为合适。它们之间的选择取决于你的具体建模目标和数据性质。我们不会在本章中深入探讨 Ridge 回归的细节。
在本章中,我们研究了各种线性回归模型以及如何使用 R 和 Python 实现这些模型。线性回归模型是机器学习的重要组成部分,理解其原理是一项重要的技能。在下一节中,我们将更详细地研究聚类算法、决策树和随机森林。
聚类算法、决策树和随机森林
聚类算法用于无监督学习任务,这意味着它们用于在数据中寻找没有预定义标签或类别的模式。聚类算法的目标是将相似的数据点分组到簇中,同时将不相似的数据点分开。
聚类算法有几种类型,包括 K-means、层次聚类和基于密度的聚类。K-means 是一种流行的聚类算法,它通过将数据集划分为 K 个簇来工作,其中 K 是预定义的簇数。层次聚类是另一种聚类算法,它根据数据点之间的相似性创建簇的层次结构。基于密度的聚类算法,如 DBSCAN,将紧密聚集在高度密集区域的数据点分组在一起。
决策树,另一方面,用于监督学习任务,这意味着它们用于根据具有预定义标签或类别的输入数据进行预测或决策。决策树是一种树状结构,由节点和分支组成,其中每个节点代表一个特征或属性,每个分支代表基于该特征的决策。决策树的目标是创建一个模型,可以根据其特征准确预测新输入的标签或类别。
决策树有多种类型,包括 ID3、C4.5 和 CART。ID3 算法是一种流行的决策树算法,它通过选择具有最高信息增益的属性作为根节点,并通过在每个级别上选择最大化信息增益的属性递归地构建树。C4.5 算法是 ID3 的改进版本,可以处理连续和离散数据,而 CART 是另一种可以处理分类和回归任务的决策树算法。
随机森林通过结合多个决策树来创建一个更准确和鲁棒的模型。随机森林由大量决策树组成,每棵树都在数据的不同子集上训练,并使用可用的随机特征子集。这有助于减少过拟合并提高模型的泛化能力。
为每棵树使用的随机特征子集是从可用特征中随机选择的,每棵树选择一个新的子集。这确保了森林中的每棵树都是不同的,并提供了多样化的预测集。在训练过程中,森林中的每棵树都会生长到其最大深度,并通过聚合森林中所有树的预测来进行预测。
聚合过程可能因任务的不同而有所差异。对于分类任务,最常见的方法是使用多数投票法,其中最终预测是森林中预测最多的树的类别。对于回归任务,最常见的方法是使用森林中所有树的平均预测。
随机森林相对于单一决策树具有多个优势,包括提高准确性、减少过拟合以及对于数据中的噪声和异常值的鲁棒性。它们也相对容易使用,可以处理广泛的输入特征和数据类型。然而,它们的训练可能计算成本高昂,并且难以解释和可视化,尤其是在处理大量树的情况下。
在接下来的几节中,我们将更详细地探讨一些聚类和决策树算法。
K-means 聚类
K-means 聚类是一种流行的算法,用于将一组数据点划分为 K 个聚类,其中 K 是一个预定义的数字。该算法通过迭代地将数据点分配到最近的聚类质心,并根据新的分配更新聚类质心来工作。
下面是 K-means 算法的简单步骤概述:
-
从数据点中随机初始化 K 个质心。
-
根据数据点和质心之间的欧几里得距离,将每个数据点分配到最近的质心。
-
通过计算分配给每个聚类的所有数据点的平均值来更新每个聚类的质心。
-
重复步骤 2 和 3,直到质心不再显著移动或达到最大迭代次数。
K-means 算法的目标是最小化每个数据点到其分配簇质心的平方距离之和,也称为“惯性”。该算法对初始随机选择质心可能很敏感,因此多次运行算法并选择具有最低惯性的解决方案通常是一个好主意。
K-means 是一种快速有效的聚类数据算法,但它也有一些局限性。它假设簇是球形且大小相等,并且对数据中的异常值和噪声很敏感。此外,确定最佳簇数 K 可能具有挑战性,可能需要一些领域知识或试错。
示例
鸢尾花数据集包含了 150 朵鸢尾花的四个特征(花瓣长度、花瓣宽度、萼片长度和萼片宽度)的测量值,其中每种鸢尾花(setosa、versicolor 和 virginica)各有 50 朵。我们可以使用 K-means 聚类方法根据它们的特征值将这些花朵分组到不同的簇中。
要做到这一点,我们首先选择我们想要聚类的特征,并通过缩放特征使其具有零均值和单位方差来预处理数据。缩放是为了确保特征具有相等的影响力。然后,我们将 K-means 算法应用于预处理后的数据,指定我们想要创建的簇数 K。在这种情况下,我们可能会选择 K=3,以对应三种鸢尾花物种。
然后,K-means 算法根据特征值将花朵划分为 K 个簇,每个簇由其质心(分配给簇的花朵的平均特征值)表示。我们可以检查这些簇及其质心,以深入了解鸢尾花数据集的结构。
例如,我们可能会发现一个簇包含花瓣和萼片尺寸较小的花朵,这可能对应于 setosa 物种。另一个簇可能包含花瓣尺寸较大而萼片尺寸中等的花朵,这可能对应于 versicolor 物种。第三个簇可能包含萼片和花瓣尺寸都较大的花朵,这可能对应于 virginica 物种。
通过使用 K-means 聚类方法根据特征值对鸢尾花进行分组,我们可以更深入地了解数据集的结构,并可能识别出数据中的模式和关系。让我们看看上述示例在 R 和 Python 中的样子。
使用 R 的示例
下面的 R 代码使用“iris”数据集,这是机器学习社区中一个流行的数据集。它对数据集的四个数值属性执行 K-means 聚类:Sepal.Length
(花萼长度)、Sepal.Width
(花萼宽度)、Petal.Length
(花瓣长度)和Petal.Width
(花瓣宽度)。代码设置了一个随机种子以确保可重复性,并使用三个聚类中心应用 K-means 算法。聚类完成后,代码显示每个数据点的聚类分配,指示每个观测值属于哪个聚类(用值 1、2 或 3 表示)。K-means 聚类旨在将相似数据点分组到聚类中,是无监督机器学习任务中的一种常见技术:
data(iris)
iris_cluster <- iris[, c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width")]
set.seed(123)
kmeans_results <- kmeans(iris_cluster, centers = 3)
kmeans_results$cluster
Python 示例
下面的 Python 代码使用 scikit-learn 库在 Iris 数据集上执行 K-means 聚类。使用 scikit-learn 的load_iris()
函数加载数据集,包含鸢尾花花瓣长度、花瓣宽度、花萼长度和花萼宽度的测量值,以及它们对应的物种标签。
脚本提取了四个特征列用于聚类,并将它们存储在iris_cluster
变量中。然后,它从 scikit-learn 的sklearn.cluster
模块导入KMeans
类。
K-means 算法应用于特征数据(iris_cluster
),将聚类数量(n_clusters
)设置为3
。将random_state
参数设置为123
以确保结果的再现性。
聚类后,代码打印出 Iris 数据集中每个数据点的聚类分配。每个数据点被分配一个聚类标签(0、1 或 2),指示它根据 K-means 聚类属于哪个组:
from sklearn.datasets import load_iris
iris = load_iris()
iris_cluster = iris.data[:, [0, 1, 2, 3]]
from sklearn.cluster import KMeans
kmeans_results = KMeans(n_clusters=3, random_state=123).fit(iris_cluster)
print(kmeans_results.labels_)
这两个代码示例都将打印出 Iris 数据集的聚类分配。结果看起来类似于以下:
[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 0 2 0 0 0 0 2 0 0 0 0 0 0 2 2 0 0 0 0 2 0 2 0 2 0 0 2 2 0 0 0 0 0 2 0 0 0 0 2 0 0 0 2 0 0 0 2 0 0 2]
注意
这是一个简单的例子。在实践中,你可能会花更多的时间探索和可视化数据,调整聚类数量,并解释聚类算法的结果。
ID3 决策树
ID3(迭代二分器 3)是构建决策树的一种流行算法。ID3 算法由 Ross Quinlan 于 1986 年开发,基于信息熵的概念。
决策树的目标是创建一个模型,可以用来根据其特征对新的实例进行预测或分类。决策树由一组节点和边组成,其中每个节点代表一个或多个输入变量的决策或测试,每条边代表该决策的可能结果。
ID3 算法通过递归地根据具有最高信息增益的输入变量对数据进行分区来工作。信息增益是数据在特定输入变量上分割后熵或纯度减少的度量。算法在每个步骤中选择最大化信息增益的输入变量,直到给定分区中的所有实例都属于同一类或满足停止条件。
ID3 算法具有几个优点,包括其处理具有分类变量的大数据集的简单性和效率。然而,它在处理连续变量和过拟合方面存在局限性,这些问题可以通过使用修改后的算法(如 C4.5 和 CART)来解决。
在下一个例子中,我们可以看到 ID3 在实际中的应用。
示例
在这个例子中,我们使用以下与动物相关的数据集:
动物 | 有毛? | 有羽毛? | 吃肉? | 分类 |
---|---|---|---|---|
狗 | 是 | 否 | 是 | 哺乳动物 |
猫 | 是 | 否 | 是 | 哺乳动物 |
鹦鹉 | 否 | 是 | 否 | 鸟 |
鹰 | 否 | 是 | 是 | 鸟 |
蛇 | 否 | 否 | 是 | 爬行动物 |
表 2.3:动物特征数据
我们的目的是构建一个决策树,可以根据动物的特征对动物进行分类。
首先,让我们计算整个数据集的熵。熵衡量数据集的杂乱程度。所有类标签都相同的数据集熵为 0,而每个类中示例数量相等的数据集熵为 1。
计算熵的一般方程可以表示为以下方式:
E(S) = − ∑ i=1 n p i log 2p i
在这个方程中,E(S) 是集合 S 的熵,n 是 S 中的类别数,pi 是 S 中属于类别 i 的元素数量的比例。
在这个例子中,我们有 n=3 个类别:哺乳动物、鸟和爬行动物。每个类别中的动物数量如下:
-
哺乳动物:2(狗,猫)
-
鸟:2(鹦鹉,鹰)
-
爬行动物:1(蛇)
因此,概率如下:
-
p 哺乳动物 = 2 / 5 = 0.4
-
p 鸟 = 2 / 5 = 0.4
-
p 爬行动物 = 1 / 5 = 0.2
将这些值代入熵公式,我们得到以下结果:
E(S) = − (0.4log 20.4 + 0.4log 20.4 + 0.2log 20.2) ≈ 1.52193
因此,“分类”属性的熵大约为 1.52。
接下来,让我们计算“有毛?”属性的增益信息。信息增益是衡量数据集中给定属性或特征对数据分类不确定性减少的贡献程度的度量。在决策树中,信息增益用于在每个树的节点处选择用于分割数据的最佳属性。
信息增益公式如下:
IG(S, A) = E(S) − ∑ v∈Values(A) |S v| _ |S| E(S v)
其中 A 是属性(在这种情况下,“有毛吗?”),v 是属性的可能的值,Values(A) 是属性的可能的值的集合,|Sv| 是数据集中具有属性 A=v 的动物的数量,E(Sv) 是具有属性 A=v 的动物的子集的熵。
我们可以根据动物是否有毛来分割数据。子集如下:
-
有毛:狗,猫
-
无毛:鹦鹉,鹰,蛇
每个子集中动物的比例如下:
-
|S Has fur| = 2
-
|S No fur| = 3
为了计算 E(S Has fur),我们需要计算每个类别中有毛的动物的数量:
-
哺乳动物:2(狗,猫)
-
鸟:0
-
爬行动物:0
因此,概率如下:
-
p 哺乳动物 = 1
-
p 鸟 = 0
-
p 爬行动物 = 0
将这些值代入熵公式,我们得到以下结果:
E(S 有毛) = − 1log2(1) = 0
0 的熵意味着该集合被完美分类:在这种情况下,所有有毛发的动物都是哺乳动物。
要计算 E(S 无毛),我们需要计算每个类别中没有毛发的动物数量:
-
哺乳动物:0
-
鸟:2(鹦鹉,鹰)
-
爬行动物:1(蛇)
因此,概率如下:
-
p 哺乳动物 = 0
-
p 鸟 = 2 / 3 ≈ 0.67
-
p 爬行动物 = 1 / 3 ≈ 0.33
将这些值代入熵公式,我们得到以下结果:
E(S 无毛) = − (0 + 0.67log2(0.67) + 0.33log2(0.33)) ≈ 0.9183
现在我们可以将这些值代入信息增益公式:
IG(S, 有毛?) = E(S) − ∑v∈Values(有毛?) |Sv| / |S| E(Sv)
= 1.52193 − (2 × 5 × 0 + 3 × 5 × 0.9183) ≈ 0.971
因此,对于“有毛?”属性获得的信息量大约为 0.971。
我们也可以通过使用相同的公式并根据动物是否有羽毛或是否吃肉来分割数据来计算“有羽毛?”和“吃肉?”属性获得的信息量。信息增益最高的属性将被选为在决策树根部分割数据。
“有羽毛?”的信息增益也是 0.971,而“吃肉?”是 0.322。在这种情况下,我们将选择“有毛?”作为我们的根节点。
让我们来看看使用 R 和 Python 的相同示例。这两个代码片段都将加载动物数据集,创建决策树模型,可视化它,并用新数据测试树。最后,我们可以看到新的动物被分类为“哺乳动物”。
最终的决策树看起来像下面这个图:
图 2.1:最终决策树(使用以下 R 代码打印)
下面是使用 R 的示例:
data <- data.frame(
Animal = c("Dog", "Cat", "Parrot", "Eagle", "Snake"),
Has_fur = c("Yes", "Yes", "No", "No", "No"),
Has_feathers = c("No", "No", "Yes", "Yes", "No"),
Eats_meat = c("Yes", "Yes", "No", "Yes", "Yes"),
Classification = c("Mammal", "Mammal", "Bird", "Bird", "Reptile")
)
library(rpart)
library(rpart.plot)
tree <- rpart(Classification ~ Has_fur + Has_feathers + Eats_meat, data = data, method = "class", control = rpart.control(minsplit = 1))
rpart.plot(tree, type=5)
new_data <- data.frame(
Has_fur = "Yes",
Has_feathers = "No",
Eats_meat = "Yes"
)
predicted <- predict(tree, new_data, type = "class")
print(predicted)
Python 示例与前面的 R 示例类似,但在 Python 中,我们还需要使用 one-hot 编码将分类特征转换为数值:
import pandas as pd
import numpy as np
from sklearn.tree import DecisionTreeClassifier, plot_tree
import matplotlib.pyplot as plt
data = pd.DataFrame({
'Animal': ['Dog', 'Cat', 'Parrot', 'Eagle', 'Snake'],
'Has_fur': ['Yes', 'Yes', 'No', 'No', 'No'],
'Has_feathers': ['No', 'No', 'Yes', 'Yes', 'No'],
'Eats_meat': ['Yes', 'Yes', 'No', 'Yes', 'Yes'],
'Classification': ['Mammal', 'Mammal', 'Bird', 'Bird', 'Reptile']
})
data_encoded = pd.get_dummies(data[['Has_fur', 'Has_feathers', 'Eats_meat']])
clf = DecisionTreeClassifier(criterion='entropy', min_samples_split=2)
clf.fit(data_encoded, data['Classification'])
plt.figure(figsize=(8, 6))
plot_tree(clf, feature_names=data_encoded.columns, class_names=np.unique(data['Classification']), filled=True)
plt.show()
new_data = pd.DataFrame({
'Has_fur_No': [0],
'Has_fur_Yes': [1],
'Has_feathers_No': [1],
'Has_feathers_Yes': [0],
'Eats_meat_No': [0],
'Eats_meat_Yes': [1]
})
predicted = clf.predict(new_data)
print(predicted)
注意
这是一个使用 ID3 算法的决策树的简单示例。在现实世界的例子中,我们很可能有大量数据,因此最终树中会有很多节点和分支。
我们现在已经学习了聚类算法、决策树和随机森林是如何工作的。这些算法是机器学习的重要组成部分,常用于分类。在下一节中,我们将更深入地探讨提升算法和朴素贝叶斯。
提升算法和朴素贝叶斯
提升是一种机器学习技术,涉及创建一个弱学习者的集成以形成一个强学习者。提升算法背后的思想是迭代地在数据上训练模型,其中每个新的模型都试图纠正先前模型的错误。提升算法在监督学习任务中广泛使用,如分类和回归。
提升算法有几种关键类型:
-
AdaBoost(自适应提升):AdaBoost 是最早且最受欢迎的提升算法之一。它首先在全部数据集上训练一个基分类器,然后依次在先前分类器出错的数据样本上训练额外的分类器。最终的预测是通过取所有分类器预测的加权总和来完成的。
-
梯度提升:梯度提升是另一种流行的提升算法,它通过迭代地向集成中添加新模型,每个新模型都训练以最小化先前模型的误差。梯度提升用于回归和分类问题,并在许多应用中显示出达到最先进的结果。
-
XGBoost:XGBoost(极端梯度提升)是梯度提升算法的一种流行且高度优化的实现。XGBoost 使用正则化目标函数和多种技术来减少过拟合并提高准确性。
提升算法因其能够通过减少偏差和方差来提高机器学习模型的准确性而闻名。
朴素贝叶斯是一种简单但有效的分类算法。它基于贝叶斯定理,该定理指出,在新的证据(在这种情况下,为新数据点的特征值)的背景下,假设(在这种情况下,为类别标签)的概率被更新。该算法假设特征之间相互独立,这就是为什么它被称为“朴素”。
在朴素贝叶斯中,计算数据点属于特定类别的概率是通过将该类别的先验概率与给定该类别的数据点的似然性相乘来完成的。然后,算法选择概率最高的类别作为该数据点的预测类别。
朴素贝叶斯算法有几种变体:
-
高斯朴素贝叶斯:当特征是连续的,并且假设为正态分布时使用。
-
多项式朴素贝叶斯:当特征是离散的,表示计数或频率时(例如在文本分类中)使用。
-
伯努利朴素贝叶斯:是多项式朴素贝叶斯的一种变体,当特征是二进制时(例如在垃圾邮件过滤中)使用。
朴素贝叶斯是一个简单且高效的算法,在具有稀疏特征的高维数据集上表现良好。它在自然语言处理、垃圾邮件过滤、情感分析和其他分类任务中得到广泛应用。然而,特征独立性假设在所有情况下可能并不成立,如果数据违反了这个假设,算法可能表现不佳。
在接下来的章节中,我们将更深入地研究一些提升和朴素贝叶斯算法。
XGBoost
XGBoost(极梯度提升)是一个开源的机器学习库,旨在高效、灵活和可扩展。它是对梯度提升算法的实现,可用于分类和回归问题。
它基于梯度提升框架,并使用决策树的集成来进行预测。XGBoost 设计用于处理大规模和高维数据,并提供各种技术来防止过拟合,例如正则化和提前停止。
让我们看看使用 R 和 Python 的 XGBoost 的简单示例。在这些示例中,我们将使用本书早期章节中已经使用过的鸢尾花数据集。我们将数据分为训练集和测试集,然后训练我们的 XGBoost 模型来预测物种。最后,我们将使用测试数据测试模型并评估模型性能。
这里是使用 R 的示例:
library(xgboost)
library(caret)
data(iris)
set.seed(123)
trainIndex <- createDataPartition(iris$Species, p = 0.8, list = FALSE)
train <- iris[trainIndex, ]
test <- iris[-trainIndex, ]
train$Species <- as.factor(train$Species)
test$Species <- as.factor(test$Species)
train$label <- as.integer(train$Species) - 1
test$label <- as.integer(test$Species) - 1
xgb_model <- xgboost(data = as.matrix(train[, 1:4]),
label = train$label,
nrounds = 10,
objective = "multi:softmax",
num_class = 3,
eval_metric = "mlogloss")
predictions <- predict(xgb_model, as.matrix(test[, 1:4]))
predictions <- factor(predictions, levels = 0:2, labels = levels(iris$Species))
confusionMatrix(predictions, test$Species)
这里是使用 Python 的示例:
import xgboost as xgb
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=123)
xgb_model = xgb.XGBClassifier(objective="multi:softmax",
n_estimators=10, seed=123)
xgb_model.fit(X_train, y_train)
predictions = xgb_model.predict(X_test)
print(classification_report(y_test, predictions))
高斯朴素贝叶斯
高斯朴素贝叶斯(GNB)是朴素贝叶斯算法的一种变体,它假设输入变量服从高斯(正态)分布。在 GNB 中,每个输入变量的概率分布是使用训练数据分别对每个类别进行估计的。
在测试阶段,模型根据训练期间估计的高斯分布参数计算输入特征属于每个类的可能性。然后,模型应用贝叶斯定理来计算给定输入特征的每个类的后验概率。然后,将具有最高后验概率的类别分配给输入。
GNB 被称为“朴素”是因为它假设输入特征在给定类别标签的条件下是条件独立的。这个假设简化了模型并使得后验概率的计算变得可行。然而,这个假设在某些数据集中可能不成立,因此模型可能表现不佳。尽管如此,GNB 对于独立性假设成立的数据集来说可以是一个快速且准确的分类器。
让我们看看与 XGBoost 类似的分类问题,使用高斯朴素贝叶斯。以下是使用 R 和 Python 的示例代码。再次,我们使用鸢尾花数据集来分类不同的物种。
这里是使用 R 的示例:
library(e1071)
data(iris)
set.seed(123)
trainIndex <- sample(nrow(iris), 0.7 * nrow(iris))
train <- iris[trainIndex, ]
test <- iris[-trainIndex, ]
model <- naiveBayes(Species ~ ., data = train)
predictions <- predict(model, test)
cfm <- table(predictions, test$Species)
print(cfm)
这里是使用 Python 的示例:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import classification_report
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data,
iris.target, test_size=0.3, random_state=123)
model = GaussianNB()
model.fit(X_train, y_train)
predictions = model.predict(X_test)
print(classification_report(y_test, predictions))
现在我们已经熟悉了提升算法和朴素贝叶斯的概念。这些方法在 Qlik AutoML 中得到广泛应用,理解这些算法的概念是处理机器学习问题的一项基本技能。在下一节中,我们将更深入地探讨一些高级机器学习算法,包括神经网络、深度学习和自然语言模型。
神经网络、深度学习和自然语言模型
神经网络是一种受人类大脑结构和功能启发的机器学习算法。它们由多层相互连接的节点或人工神经元组成,这些节点处理和传输信息。
在神经网络中,输入数据被输入到第一层节点,这些节点对数据进行一系列数学变换并产生输出。第一层的输出随后被输入到第二层,该层应用另一组变换以产生另一个输出,依此类推,直到产生最终输出。
神经网络中节点的连接在学习过程中会调整权重,以优化网络做出准确预测或分类的能力。这通常是通过使用随机梯度下降等优化算法来实现的。以下图示展示了神经网络结构的示例:
图 2.2:神经网络的概要架构
神经网络已被用于解决广泛的机器学习问题,包括图像和语音识别、自然语言处理和预测建模。由于它们能够学习输入和输出数据之间的复杂非线性关系,它们在许多应用中已被证明是有效的。
深度学习涉及使用多层神经网络。它在包括计算机视觉、语音识别、自然语言处理和游戏在内的广泛应用中取得了显著的成功。一些值得注意的例子包括在图像识别任务中使用深度学习,例如在照片中识别物体,以及在自然语言处理任务中使用深度学习,例如语言翻译和情感分析。
深度学习的一个关键优势是它能够自动从数据中学习特征,而无需手动特征工程。这使得在具有许多特征的庞大数据集上训练模型成为可能,这在传统机器学习方法中可能是计算上具有挑战性,甚至是不可能的。
然而,由于参数数量庞大和过拟合的风险,训练深度神经网络也可能具有挑战性。为了解决这些挑战,研究人员已经开发出各种技术,包括正则化方法、dropout 和批量归一化,这些技术可以提高深度神经网络的表现力和稳定性。
自然语言模型是一种能够处理和理解人类语言的机器学习模型。这些模型在大量文本数据上训练,如书籍、文章和社交媒体帖子,并学会对自然语言输入生成连贯且语义上有意义的响应。
一种常见的自然语言模型是语言模型,它被训练来预测给定上下文中单词序列的概率。例如,一个语言模型可能被训练来预测在“我想要吃一些通常是圆形并覆盖着配料的东西”的上下文中,“披萨”这个词的概率。
另一种自然语言模型是文本生成模型,它可以用来生成自然语言文本,如新闻文章、故事和聊天机器人响应。这些模型可以被训练生成与特定风格或类型相似或甚至模仿特定作者写作风格的文本。
自然语言模型有广泛的应用,包括语言翻译、情感分析、聊天机器人和虚拟助手以及文本摘要。深度学习和自然语言处理领域的最新进展导致了像 GPT-3 这样的强大语言模型的发展,这些模型可以在广泛的主题上生成连贯且类似人类的文本。Qlik Insight Advisor 是集成了自然语言模型的产品之一。
摘要
在本章中,我们概述了不同的机器学习算法。我们发现了不同的算法如何被用来解决问题以及它们是如何工作的。我们通过熟悉一些最常见的回归算法开始本章,并获得了在 R 和 Python 中使用这些算法的知识。我们通过实际例子发现了如何利用聚类、决策树和随机森林。
在本章的后期部分,我们转向了更复杂的算法,并学习了不同的提升算法、神经网络以及其他高级模型是如何工作的。这些模型在 Qlik AutoML 中得到应用,了解每个模型的架构是很重要的。阅读完本章后,你现在对模型有了基本的了解,并准备好使用 Qlik 工具来利用这些模型。本书的后期部分我们将使用这些算法中的大部分。
在下一章中,我们将关注机器学习环境下的数据素养。数据素养是一个热门话题,同时也是机器学习领域中的一个重要概念。为了能够创建一个运行良好的模型并解释其结果,我们必须能够理解数据。这正是数据素养发挥作用的地方。
第三章:机器学习背景下的数据素养
随着我们进入人工智能和机器学习的时代,发展对数据素养的基础理解变得越来越重要。在本章中,我们将探讨数据素养的概念及其在机器学习世界中的关键作用。
数据素养指的是阅读、分析和理解数据的能力。随着我们日常生活中数据的快速增长,数据素养对个人、企业和组织都已成为一项关键技能。在机器学习的背景下,数据素养尤为重要,因为它构成了整个过程的基石。
机器学习模型的质量仅取决于它们训练所用的数据,数据素养在确保用于训练的数据高质量、相关且无偏见方面发挥着至关重要的作用。
在本章中,我们将探讨以下主要主题:
-
数据素养及其所需技能
-
明智的决策和做出明智决策的方法
-
数据战略以及如何在组织中高效利用数据
什么是数据素养?
如前所述,数据素养指的是阅读、分析和理解数据的能力。它包括一系列技能,包括阅读和解释数据可视化、理解统计概念以及将批判性思维应用于数据分析。在当今以数据驱动为主的世界中,数据素养变得越来越重要,因为个人和组织面临着日益增长的数据量,需要进行分析和解释以做出明智的决策。
在许多领域,如商业、医疗保健和政府,数据素养已成为一项关键技能,在机器学习领域也是如此,因为模型的质量仅取决于它们训练所用的数据。
数据素养不仅关乎技术技能,还包括批判性地评估数据、识别潜在偏见或局限性的能力。它涉及一种好奇心、怀疑态度,以及提问和寻求答案的意愿。最终,数据素养使个人和组织能够做出更明智的决策,推动有意义的变革。
数据素养中包含的一些关键技能如下:
-
数据收集:识别和从各种来源收集数据的能力,包括数据库、API、调查和其他来源
-
数据清洗:清理和预处理数据以确保其准确、一致,并处于可用于分析的可使用格式
-
数据分析:使用统计方法、数据可视化技术、机器学习和其他工具分析数据的能力
-
数据可视化:创建数据视觉表示以促进理解和沟通的能力
-
有效沟通:以清晰简洁的方式将数据分析的见解和发现传达给他人的能力
-
伦理:理解与数据工作相关的伦理影响,包括隐私、安全和偏见等问题
-
技术技能:熟练掌握用于数据分析的工具和技术,例如编程语言(例如 Python、R)、统计软件(例如 SAS、SPSS)和数据可视化工具(例如 Qlik)
-
批判性思维:批判性地评估数据,并识别潜在偏见、局限性和错误的能力
-
领域知识:了解数据被使用的领域或行业,以理解数据的背景及其潜在用途
因此,基本上,数据素养技能可以分为技术和非技术技能。接下来,我们将更详细地探讨一些最基本技能。我们将首先从非技术技能开始。
批判性思维
批判性思维是在处理数据时最重要的技能之一。在数据素养中,批判性思维指的是以系统客观的方式评估数据的能力,考虑潜在的偏见、局限性和错误。它包括质疑假设、分析证据,并对数据的质和可靠性做出明智的判断。它还涉及评估分析的限制,并认识到基于不完整或不充分的数据得出错误结论或过度概括的可能性。
批判性思维的一个方面是考虑数据被使用的更广泛背景。这包括理解分析的目标、预期受众以及发现的可能影响。在这个领域培养的技能将帮助你进行分析性思考,并得出可以导致洞察和行动的结论。在机器学习背景下,这项技能将帮助你理解如何提出适当的问题以及如何为你的分析创建合适的模型。
通常,有一些习惯可以用来培养批判性思维技能。首先,你应该质疑所有假设,不要把任何事情视为理所当然。这样,你可以开始培养一个能够给你带来新想法和观点的习惯。你也应该寻求多样性。这意味着简单地确保你与其他人讨论并听取他们的观点。这个习惯将使你更好地识别可能代表你自身观点的偏见。
最后,你在做决定时应该使用纯粹的逻辑。逐个步骤地推理以确保你理解你所做的一切背后的逻辑是一个好主意。例如,在规划机器学习部署时,逐个步骤地审查你的计划并与他人分享过程和结果总是一个好主意。
研究和领域知识
大多数时候,你可能已经从你所在的工作领域获得了全面的领域知识,但有时在某个特定主题上具备数据素养将需要研究和学习。例如,这可能包括交叉检查你从机器学习模型中获得的结果,或者简单地找到好的数据来源。
研究的另一个方面是它帮助你跟上该领域的最新发展和最佳实践。随着数据的快速增长和数据驱动决策的重要性日益增加,总有东西可以学习,跟上新技术、工具和方法的发展步伐非常重要。
其中还涉及一个道德方面。研究技能对于解决与数据处理相关的道德考虑至关重要,例如隐私问题、偏见以及数据的负 责使用。通过对这些主题进行研究,你可以确保你以道德和负责任的方式使用数据,并为道德指南和最佳实践的制定做出贡献。
研究远不止使用搜索引擎。它涉及找到好的来源并进行交叉参考。它还涉及在项目完成后,仔细得出结论并评估这些结论。一种高效的研究方法是缩小范围。你可以从一个广泛的方法开始,然后深入探讨一些主题。永远不要带着既定的结果开始研究,保持开放的心态。确保核实你的来源。
将研究与你从以往经验中已经获得的专业知识相结合是一项重要的技能。这种方法将使你能够提出相关的问题,识别关键变量,并以有意义的方式解释数据。结合研究、专业知识、有效沟通和技术技能可以帮助你在你的领域或行业中有效地处理数据和机器学习。
沟通
数据素养的个体技能很重要,但能够将数据和发现传达给其他人同样重要。有效的沟通使你能够以清晰、简洁和有意义的方 式传达数据分析的见解和发现。这不仅涉及以清晰易懂的方式呈现数据,还提供背景和解释,帮助观众理解数据的含义和潜在用途。
交流对于在观众中建立信任和信誉同样重要。通过以清晰透明的方式展示数据,你可以建立信任并增加观众使用数据来指导他们决策的可能性。不同的观众可能具有不同的技术知识水平,他们可能对数据的不同方面感兴趣。通过了解观众并调整信息以满足他们的需求,你可以提高沟通的有效性,并确保观众能够理解和利用数据及发现。在机器学习环境中,建立信任并提供关于每个解决方案的可能性和局限性的清晰沟通至关重要。
确保你的观众和同事与你站在同一立场上非常重要,尤其是如果他们参与创建机器学习模型或分析结果。误解可能导致严重的问题和商业影响。
为了提高沟通技巧,有一些策略可以专门应用于关于数据的沟通。首先,实践至关重要。你越练习关于数据的沟通,就会越感到舒适和自信。了解观众并理解他们的知识水平、目标和兴趣也很重要。使用简单语言、提供背景信息以及使用图表和图形等视觉元素可以使复杂数据更容易理解并更具吸引力。
讲故事可以帮助使数据更具吸引力和记忆性。同时,练习积极倾听并以深思熟虑和尊重的方式回应观众的反馈也很重要。从可信赖的同事、导师或顾问那里寻求反馈可以帮助你识别改进领域,并在一段时间内提高你的沟通技巧。
技术技能
技术技能是数据素养的基本方面,因为它们使个人能够有效地使用各种技术工具和平台来处理数据。技术技能包括广泛的能力,包括数据收集、清洗、分析、可视化、编程、数据库管理、数据建模、机器学习以及数据安全和隐私。
数据收集涉及从数据库、网站、API 和其他数据存储库等不同来源收集数据的能力。数据清洗和准备对于消除原始数据中的错误、不一致性和缺失值以及使其准备好分析至关重要。数据分析包括利用统计方法、机器学习算法和其他分析技术来识别数据中的模式、趋势和洞察。数据可视化是使用图表、图形和其他可视化手段创建数据视觉表示的过程,以使数据更容易理解和操作。
其他技术技能可能包括,例如,编程、数据库管理和数据建模。技术技能使个人能够更有效地处理数据,开发准确的预测和洞察,并以易于被听众理解的方式传达他们的发现。由于本书的大部分内容都与技术技能相关,因此我们在此章中不会深入探讨个别技能。
下图总结了数据素养的关键技能:
图 3.1:数据素养的三个领域
在本节中,我们熟悉了数据素养的概念。接下来,我们将更深入地探讨知情决策以及如何使用数据素养技能来支持决策。
知情决策
知情决策是指利用数据做出有证据支持且基于对数据全面理解的决策的过程。它包括识别相关数据、使用适当的工具和技术进行分析,以及基于证据而非假设或直觉得出结论的能力。对于与数据工作的人员来说,知情决策是一项关键技能,因为它使他们能够利用数据推动更好的结果,并做出有证据支持的决策。
要做出知情决策,你必须清楚地了解手头的问题或问题,以及与之相关的数据。你必须能够识别适当的数据来源,评估数据的质量,并选择适当的分析技术来分析它。知情决策还要求你能够解释分析结果,并有效地向他人传达发现。
在决策可能产生重大后果的行业中,如医疗保健、金融和政府,知情决策尤为重要。例如,医疗保健专业人员可能使用数据做出关于患者护理和治疗的知情决策,而金融分析师可能使用数据做出投资决策。
知情决策不仅仅是使用数据来做出决策,还涉及使用数据来评估这些决策的有效性。这要求组织能够监控和衡量决策的结果,并利用这种反馈随着时间的推移改进决策过程。
最终,知情决策是将信息转化为行动并基于知识做出所有决策的能力。
组织中有许多基于信息的决策模型。我们在这里将要看到的一个模型结合了提出正确问题、以正确格式获取正确数据、批判性地分析和评估数据、应用你和其他人的领域知识(意识到潜在的偏见),以及将决策传达给所有相关利益相关者的需求。还有一个机制来监控和迭代流程,使其随着时间的推移变得更好。
让我们更仔细地看看这个过程。我们可以将其分为 12 个不同的步骤:
-
提问:将你的业务问题转化为分析问题。为机器学习起草你的问题。你希望达到的目标结果是什么?
-
获取:找到所有相关的数据。记住利用与你问题相关的内部和公共数据。
-
确保你拥有所有必要的数据,并交叉检查其可靠性。确保数据格式正确。利用配置文件、缩放、标记、标准化和目录功能。确保你正确处理了敏感数据。
-
分析:创建适当的分析和可视化来描述你的数据,包括关键绩效指标(KPIs)。
-
寻找模式和趋势:尝试绘制关系并深入数据。开始思考你的原始问题。它是否可以解决,它是否仍然相关?
-
应用:回顾你迄今为止所取得的成果,并开始将你的领域知识应用于结果。
-
挑战你的发现和数据:寻找任何让你有理由质疑你早期发现的证据。
-
与你的团队和同事一起审查结果:如果你独自工作,试着再次审视并找出可能的偏见。
-
开始利用机器学习:运行多次模拟并构建多个模型。仔细测试所有解决方案并审查结果。用结果增强你早期的分析。
-
宣布:将你的发现和结果传达给你的组织。确保向正确的受众展示。为不同的利益相关者使用不同级别的细节。
-
访问权限:建立一个机制来审查你的工作。监控所做决策的效果。
-
利用收集到的所有反馈,并迭代你的流程。尝试快速失败并立即修复问题。记录你的发现以及这些如何改变了原始流程。
为你和你所在的组织开发一个良好的流程可能需要时间和多次迭代,但最终将极大地造福个人和组织。当决策基于事实和数据时,它们更容易得到辩护,并且比仅基于部分信息或感觉的决策更有可能引导你走上正确的道路。
在更长的时间内,一个精细化的决策过程将导致风险降低、效率提高、资源分配更好、沟通改善和竞争优势。
在本节中,我们探讨了明智决策的方法以及如何在组织层面做出明智的决策。在下一节中,我们将转向更广阔的视角,重点关注数据战略。
数据战略
数据战略是任何组织整体战略的关键要素,因为它使组织能够利用数据来实现其目标。一个设计良好的数据战略会考虑组织的目标、挑战和可用资源,并概述收集、管理、分析和有效使用数据的步骤。
数据治理是数据战略的关键组成部分,它为组织内部的数据管理和使用建立了政策和程序。数据治理包括定义数据所有权、建立数据标准和确保遵守数据法规。通过明确理解数据治理,组织可以确保数据被道德和安全地使用,从而与利益相关者建立信任。
明确定义的数据架构是有效数据战略的另一个基石。数据架构涉及设计管理和存储数据的结构和系统。这包括定义数据模型、选择合适的数据库技术以及确保系统间的数据集成。通过建立强大的数据架构,组织可以确保数据可访问、准确和一致,从而提高决策和运营效率。
数据分析和机器学习可以被视为利用数据战略的核心技术。这涉及使用各种技术通过预测建模、机器学习和数据可视化平台从数据中提取洞察。通过使用数据分析来获得洞察,组织可以做出更明智的决策,识别新的机会,并改进业务流程。
在数据战略中,数据质量至关重要,因为它确保数据是准确、完整和一致的。这包括建立数据质量标准、执行数据验证和根据需要清洗数据。通过确保数据质量,组织可以信任他们用于决策的数据,从而降低出错的风险并提高运营效率。
安全和数据所有权是每个有效数据战略的关键组成部分。数据安全确保数据免受未经授权的访问和网络安全威胁。这包括实施数据安全政策、使用加密技术和建立访问控制。通过保护数据,组织可以防止数据泄露,从而保护其声誉并降低财务和法律处罚的风险。
对于所有数据资产明确所有权将使谁有权批准数据的使用以及更新或修改数据集变得透明。数据管理员或所有者还作为数据资产领域的专家,可以在组织内部成为数据相关问题的一个联系点。
当为一个组织制定数据策略时,有一些关键原则需要遵循。一个有效数据策略的基本内容包括理解关键组件并设计一个与组织的目标、挑战和可用资源相一致的计划。
一个有效数据策略的一些基本内容包括以下:
-
理解组织的目标:数据策略应与组织的整体目标和目标保持一致。这涉及到了解组织想要实现什么以及数据如何支持这些目标。
-
定义数据治理:数据治理对于确保数据得到道德和安全地管理和使用至关重要。这包括定义数据所有权、建立数据标准和确保遵守数据法规。
-
建立数据架构:一个设计良好的数据架构对于有效地管理和存储数据至关重要。这包括定义数据模型、选择合适的数据库技术,并确保系统间的数据集成。
-
使用数据分析:数据分析对于从数据中提取见解并做出明智的决策至关重要。这包括使用各种技术,如预测建模、机器学习和数据可视化。
-
确保数据质量:数据质量对于确保数据准确、完整和一致至关重要。这包括建立数据质量标准、执行数据验证和根据需要清理数据。
-
保护数据安全:数据安全对于保护数据免受未经授权的访问和网络安全威胁至关重要。这涉及到实施数据安全策略、使用加密技术,并建立访问控制。
-
监控和调整:数据策略应定期监控,以确保其与组织的目标保持一致并实现预期的效益。随着组织的目标、挑战或可用资源的变化,可能需要对其进行调整。
下图总结了数据策略的关键支柱:
图 3.2:数据策略的支柱
评估当前数据策略的成熟度是改进的良好起点。现有的数据策略应不断进行评估。为了评估一个组织的数据策略成熟度,有必要评估其与目标和目标的契合程度,以及其有效执行策略的能力。这包括定义与评估成熟度相关的关键标准,例如数据治理政策、数据架构、数据分析能力、数据质量指标和数据安全指南。
下一步是评估组织的当前数据策略与已确定的标准的契合度。这可能涉及审查现有文档、访谈利益相关者以及进行数据分析。基于此评估,应识别出需要解决以改进数据策略成熟度的任何差距或改进领域。
然后,可以根据评估和差距分析制定提高数据策略成熟度的路线图。此路线图应包括实施路线图所需的具体行动项目、时间表和资源。定期监控数据策略实施进度是必要的,并且随着组织目标或数据相关挑战的变化,可能需要调整路线图。
通过定期评估数据策略的成熟度,可以识别出改进领域并制定提高组织能力的路线图。
组织有许多成熟度模型。接下来,我们将简要了解一下一个将多种常见方法结合在一起的模式。
此模型使用四个步骤来描述组织的成熟度:
-
组织刚开始实施数据策略。他们主要使用内部数据和临时分析。没有或只有简单的描述性分析。静态报告和电子表格是常见的工具。
-
组织认识到数据策略的重要性。他们正在做出有洞察力的商业决策,并关注数据质量。分析可以包括诊断用例,通常有一个商业智能平台。
-
组织使用的数据如前一步所述,但他们正在扩展用例并使用外部数据来补充内部数据。用例可以包括预测分析和机器学习。有一个正在实施的数据策略,决策主要基于一个信息化的决策模型。
-
在组织的最高层,领导者和创新者在使用数据方面处于领先地位。他们紧跟最新趋势,并以创新的方式使用数据。他们正在开发机器学习模型,并利用规范性分析自动提出最佳行动方案。他们不断迭代当前的数据战略,并适应新的工作方式。角色和组织结构支持数据的全面使用。
制定数据战略并将组织从成熟度的第一级转变为数据创新者是一个长期项目,本书中不再进一步讨论。关于数据战略有很多材料,强烈建议在处理数据和利用机器学习时考虑更大的图景。
摘要
在本章中,我们首先了解了数据素养作为一个概念的含义。我们研究了成为数据素养的方法,并讨论了如何将这些方法应用到我们的工作中。能够阅读和利用数据是现代世界中的一个重要技能,因为周围的数据量不断增加。
我们发现了什么是基于信息的决策,并使用数据、分析和机器学习的过程来做出基于信息的决策。这个过程将成为我们在下一章开始转向实践时的指南。它将为我们提供指导方针,我们将使用这些指导方针来形成我们的机器学习问题,并在定义解决方案时考虑。
在本章末尾,我们简要讨论了数据战略和成熟度。数据战略是每个现代组织的重要方面,但也是一个广泛的话题。我们从数据的角度探讨了如何定义组织的成熟度,以及数据战略最重要的方面。
在下一章中,我们将开始关注使用机器学习解决问题的实际方法。我们将通过 Qlik 平台创建良好的机器学习解决方案所需的步骤。我们将涵盖如何定义问题和选择模型,如何准备数据,以及可视化最终结果时需要考虑的因素。
第四章:使用 Qlik 平台创建优秀的机器学习解决方案
本章概述了使用 Qlik 创建有效的机器学习解决方案所涉及的关键步骤。这些原则适用于所有机器学习工具和解决方案。
该过程从定义要解决的问题开始,并将其与组织的目标对齐。数据准备至关重要,Qlik 提供了强大的数据准备功能,用于收集、清理和转换数据,以确保其质量和相关性。
使用 Qlik 的功能进行数据探索和可视化对于理解数据模式并告知机器学习模型至关重要。模型选择至关重要,Qlik 为不同的用例提供了一系列算法。
一旦选择了模型,就需要使用相应的工具对其进行训练。使用适当的指标对模型进行评估有助于评估其性能并进行必要的改进。
在 Qlik 环境中部署模型涉及将其集成到应用程序或仪表板中,创建 API,或将其嵌入到 Web 应用程序中。对已部署模型的监控和维护确保其随着时间的推移保持准确性和相关性。解释和传达结果对于推动决策至关重要。Qlik 的可视化和报告功能能够有效地将洞察传达给利益相关者。
在本章中,您将学习以下内容:
-
如何定义机器学习问题并选择正确的模型来解决它
-
清洗和准备数据所需的步骤
-
如何准备和验证机器学习模型
-
如何有效地可视化和传达最终结果
定义机器学习问题
定义机器学习问题涉及识别可以使用机器学习技术解决的问题的具体业务挑战或分析目标。定义问题的过程可以分为几个关键步骤:
-
理解业务目标:首先,要清楚地了解需要解决的总体业务目标或问题。这可能是提高客户保留率、优化定价策略、预测设备故障或识别潜在的欺诈案例等。
-
识别关键问题或挑战:一旦定义了业务目标,就需要使用机器学习来识别需要解决的具体问题或挑战。这涉及到理解当前流程或系统中的关键痛点、限制或差距,这些可以通过机器学习来改进。
-
定义范围和边界:明确定义机器学习问题的范围和边界。这包括确定特定的数据输入和输出、问题的时限以及数据可用性、资源或可行性方面的任何约束或限制。
-
制定问题陈述:制定一个清晰、简洁的问题陈述,以具体和可衡量的方式描述业务挑战或目标。问题陈述应定义明确且可衡量,以便对机器学习解决方案的成功进行客观评估。
-
考虑数据需求:分析机器学习问题的数据需求。确定相关的数据源、数据类型和数据质量要求。考虑数据的可用性、完整性和准确性,以及任何数据隐私或安全考虑。
-
定义评估指标:定义将用于评估机器学习解决方案性能的评估指标。这些指标应与问题陈述和业务目标一致,并提供对解决方案成功程度的定量度量。
-
考虑可行性和影响:评估机器学习解决方案的可行性和潜在影响。考虑实施解决方案的技术可行性、必要资源的可用性以及预期对业务目标或要解决的问题的影响。
通过遵循这些步骤,您可以有效地定义一个机器学习问题,并为构建成功的机器学习解决方案奠定基础。明确的问题定义对于指导整个机器学习过程至关重要,从数据准备到模型训练、评估和部署。
注意
Qlik 使用一个四步框架来帮助定义机器学习问题。该框架包括以下步骤:
- 事件触发
例如:客户下单
- 目标
例如:一年内再次下单(是 | 否)
- 特征
例如:年龄、州、之前的订单数量、运输类型
- 预测点
例如:订单后一个月
这里描述的框架是这个框架的扩展和更全面版本。这个框架可以在第十章中看到其应用。
如果我们打算使用 Qlik AutoML 来创建我们的模型,重要的是要记住以下场景是支持的:
- 二分类:这适用于可以用是或否回答的任何问题。例如:我的客户会流失吗?我的库存会耗尽吗?我的病人会取消他们的预约吗?
注意
理想情况下,我们希望尽可能将每个机器学习问题转化为二分类问题,因为在大多数情况下这将提供最佳的准确性。然而,在某些情况下,使用其他类型的算法可能会得到更好的结果。根据我们正在解决的问题选择正确的算法非常重要。
二分类问题可以用以下图表来描述:
图 4.1:二分类
-
多类分类:存在多个可能结果的问题。例如:客户会购买什么产品?病人将被**转到哪个设施?
多类分类问题可以如图所示进行说明:
图 4.2:多类分类
-
回归:这涉及到对未来某个点的值进行预测。例如:我们年末的销售额是多少?病人的预期等待时间是多长?
回归可以如图所示进行可视化:
图 4.3:回归
注意
其他用例可以通过高级分析集成和工具(包括 R、Python、AWS SageMaker 或 Azure ML Studio)来解决。我们将在下一章中介绍如何设置这些环境。
我们现在已经研究了形成机器学习问题的基本知识以及 Qlik AutoML 可以用来帮助我们解决哪些类型的问题。在下一节中,我们将探讨机器学习大多数任务所需的一些常见数据准备步骤。
数据清理和准备
数据准备是机器学习中的一个关键步骤,因为用于模型训练的数据的质量、相关性和适用性直接影响到最终机器学习模型的准确性、可靠性和有效性。
通用数据准备步骤包括以下内容:
-
移除 空值
-
移除 不需要的列
-
编码(例如,我们在 第二章** 中的一些例子中使用的一热编码)**
-
特征缩放
-
分割成测试集和 训练集
-
设置正确的数据类型
-
移除重复项
-
纠正数据错误
-
移除异常值
在前面的列表中,Qlik AutoML 自动处理的步骤以粗体显示。其余的步骤可以在 Qlik Sense 中完成。
让我们通过一些例子来更详细地看看这些步骤。
示例 1 – 一热编码
假设我们有以下数据集:
ID | 类别 | 食肉动物 |
---|---|---|
1 | 哺乳动物 | 否 |
2 | 鸟类 | 否 |
3 | 哺乳动物 | 是 |
4 | 爬行动物 | 否 |
5 | 爬行动物 | 是 |
表 4.1:示例数据集
如果我们对前面的表进行一热编码,它将看起来像这样:
ID | 哺乳动物 | 爬行动物 | 鸟类 | 食肉动物 |
---|---|---|---|---|
1 | 1 | 0 | 0 | 否 |
2 | 0 | 0 | 1 | 否 |
3 | 1 | 0 | 0 | 是 |
4 | 0 | 1 | 0 | 否 |
5 | 0 | 1 | 0 | 是 |
表 4.2:一热编码示例
下面是使用 Python 实现上述结果的示例代码:
import pandas as pd
from sklearn.preprocessing import OneHotEncoder
data = {
'ID': [1, 2, 3, 4, 5],
'Category': ['Mammal', 'Bird', 'Mammal', 'Reptile', 'Reptile'],
'Carnivore': ['No', 'No', 'Yes', 'No', 'Yes']
}
df = pd.DataFrame(data)
encoder = OneHotEncoder(sparse=False)
category_encoded = encoder.fit_transform(df[['Category']])
category_names = encoder.get_feature_names_out(['Category'])
df[category_names] = category_encoded
df.drop('Category', axis=1, inplace=True)
print(df)
在前面的例子中,我们使用了 scikit-learn 中的OneHotEncoder
对Category
列进行了一热编码。然后,将得到的一热编码值作为新列添加到 DataFrame 中,每个类别在其对应的列中以二进制值(1 或 0)表示。
示例 2 – 特征缩放
特征缩放在机器学习中非常重要,以确保所有特征或变量具有相似的尺度,因为它可以影响许多机器学习算法的性能和收敛性。最小-最大缩放是用于特征缩放常用的方法之一,其中值被缩放到特定的范围,通常在 0 到 1 之间。
假设我们有以下数据集:
ID | Age | Income |
---|---|---|
1 | 25 | 50000 |
2 | 30 | 60000 |
3 | 35 | 70000 |
4 | 40 | 80000 |
5 | 45 | 90000 |
表 4.3:示例数据集
特征缩放后,我们将得到以下输出:
ID | Age | Income |
---|---|---|
1 | 0.00 | 0.00 |
2 | 0.25 | 0.20 |
3 | 0.50 | 0.40 |
4 | 0.75 | 0.60 |
5 | 1.00 | 0.80 |
表 4.4:特征缩放后的示例数据集
下面是实现上述缩放的 Python 代码:
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
data = {
'ID': [1, 2, 3, 4, 5],
'Age': [25, 30, 35, 40, 45],
'Income': [50000, 60000, 70000, 80000, 90000]
}
df = pd.DataFrame(data)
scaler = MinMaxScaler()
df[['Age', 'Income']] = scaler.fit_transform(df[['Age', 'Income']])
print(df)
在前面的例子中,使用 scikit-learn 的MinMaxScaler
对 DataFrame 的Age
和Income
列进行特征缩放。通过调用所选列的fit_transform
方法,根据每列中的最小值和最大值将值缩放到 0 到 1 之间。然后,更新原始 DataFrame 中的缩放值。
前面的例子中的功能由 Qlik AutoML 自动处理,但当你使用高级分析集成时,应考虑这些步骤。本章迄今为止审查的示例是用 Python 编写的,但也可以使用 Qlik 脚本或其他数据处理方法实现相同的功能。此外,null 编码、数据类型处理以及许多其他数据准备任务可以在 Qlik 中完成。我们将在第六章中更详细地探讨这些内容。
现在我们已经熟悉了常见的数据清洗和预处理步骤,让我们来检查模型准备和验证。这些方面对于建立对模型的信任和评估结果非常重要。
准备和验证模型
在第一章中,我们发现了模型验证和准备的一些概念。Qlik AutoML 自动处理模型选择并提供给我们全面的信息以支持验证。我们将在第七章和第八章中更详细地考虑模型选择和验证。在本节中,我们将通过总结 Qlik 中模型准备和验证的最重要步骤来为这些章节做准备。以下步骤是以 Qlik AutoML 的视角编写的。当使用高级分析集成时,根据所选技术(例如 R、Python、Azure ML Studio、AWS SageMaker 等)可能会有一些小的差异。
通用验证和准备步骤包括以下内容:
-
数据准备:首先,为机器学习准备你的数据。将你的数据加载到 Qlik Sense 中,对其进行清理和预处理,处理缺失值,并在必要时进行特征工程。Qlik AutoML 支持各种数据类型,包括数值、分类和文本数据。
-
模型选择:为你的问题选择合适的机器学习算法。Qlik AutoML 提供了广泛的算法,包括决策树、随机森林、梯度提升、支持向量机等。你可以选择多个算法同时进行评估,以比较模型。
-
模型训练:一旦你选择了算法,Qlik AutoML 会自动使用不同的超参数配置训练多个模型。这些模型使用交叉验证在你的数据的一部分上训练,这有助于评估它们的性能并选择表现最佳的模型。
-
模型评估:在模型训练完成后,Qlik AutoML 提供了全面的模型评估指标,如准确率、AUC 和 F1 分数,以评估每个模型的性能。你可以比较不同模型的性能,并选择在你数据上表现最佳的模型。
-
模型部署:一旦你选择了最佳模型,你可以在 Qlik Sense 应用中部署它。Qlik AutoML 生成必要的代码,以在你的应用中实现模型,这使得将模型集成到你的分析工作流程中变得容易。
-
模型监控:Qlik AutoML 允许你实时监控你部署的模型性能。你可以跟踪关键性能指标,并在模型性能随时间下降时采取必要的行动。
-
模型验证:最后,使用真实世界的数据验证你部署的模型性能非常重要。监控模型的预测结果,并将其与实际结果进行比较,以确保模型在真实世界环境中做出准确和可靠的预测。
在本节中,我们概述了模型准备和验证的方法。机器学习项目的最后一部分通常是最终结果的可视化。让我们在下一节中探讨这一般原则。
可视化最终结果
在可视化最终结果时,我们在机器学习解决方案创建的不同部分有几种选项需要考虑。我们将在第九章中深入探讨可视化技术和不同的图表类型。然而,以下是一些一般步骤供你考虑:
-
加载数据:将你的机器学习结果数据加载到 Qlik Sense 中,可以使用数据源或直接连接到 Qlik AutoML 或第三方机器学习平台。这些数据可以包括预测值、实际值、模型评估指标和其他相关信息。
-
创建可视化:使用 Qlik Sense 内置的可视化工具创建机器学习结果的视觉表示。您可以根据数据类型和想要传达的见解选择各种图表类型。规划一个干净且视觉上吸引人的用户界面是一个重要的步骤。
-
自定义可视化:自定义可视化的外观和属性,使其更具视觉吸引力并富有信息性。尽量选择最佳组件来增强机器学习结果的易读性和理解性。如有需要,可辅以书面说明。
-
共享和协作:使用 Qlik Sense 的共享和协作功能,将您的机器学习结果可视化与相关利益相关者(如团队成员、经理或客户)分享。您可以将可视化发布到 Qlik Sense 应用程序中,将它们嵌入到其他应用程序中,或以 PDF、图像或 HTML 等多种格式导出,以便轻松共享和传播。鼓励使用 Qlik Alerting、笔记、故事讲述和其他高级功能。
规划可视化并有效地传达结果是推动用户采用您的机器学习解决方案的重要部分。通过利用 Qlik Sense 的可视化能力,您可以有效地以视觉吸引力和互动的方式传达和展示您的机器学习结果,使用户能够根据机器学习模型的成果获得见解并做出明智的决策。
在下面的屏幕截图中,我们可以看到一个 Qlik Sense 仪表板的示例,它用于可视化 Qlik AutoML 模型的结果:
图 4.4:展示 Qlik AutoML 结果的示例仪表板
摘要
在本章中,我们开始逐步接近使用 Qlik 工具实现机器学习解决方案。我们发现了形成正确业务问题的必要性以及形成问题时应该考虑的方面。
我们发现了一些数据准备的一般步骤以及这些步骤应该如何处理。更详细的数据建模和转换技术将在第六章中介绍。我们还简要探讨了模型准备和验证的概念。
在本章末尾,我们讨论了演示的重要性以及使用 Qlik 可视化结果时应考虑的因素。这一主题将在第九章中更详细地讨论。
在下一章中,我们将了解如何为我们的机器学习解决方案准备环境。我们将安装 R 和 Python 的本地集成,了解如何利用 API 和高级分析集成与 Azure ML Studio 和 AWS SageMaker 交互,以及如何为 AutoML 设置 Qlik 租户。这些步骤对于使我们的环境准备好实际实施至关重要。
第二部分:使用 Qlik 的机器学习算法和模型
本节将涵盖使用 Qlik 工具创建机器学习项目的实际操作,并通过实例进行说明。本节从有效利用工具所需的设置过程开始。第六章涵盖了使用 Qlik Sense 进行数据预处理的必要技术,随后是监控模型和处理部署的最佳实践。在本节的最后,我们将通过具体示例介绍 Qlik AutoML 的功能。在本节的最后,我们将探讨可视化结果的重要方面。
本节包含以下章节:
-
第五章**: 设置环境
-
第六章**: 使用 Qlik Sense 进行数据预处理和探索
-
第七章**: 部署和监控机器学习模型
-
第八章**: 利用 Qlik AutoML
-
第九章**: 机器学习解决方案的高级数据可视化技术
第五章:设置环境
在前面的章节中,我们发现了机器学习问题背后的某些理论和框架。在本章中,我们将转向实际实施。安装 Qlik 机器学习环境是利用 Qlik Sense 中机器学习力量的关键步骤。在本章中,我们将介绍安装和设置各种 Qlik 机器学习环境的过程。
到本章结束时,我们将对 Qlik 机器学习环境的安装和配置过程有一个扎实的理解,这将使我们能够利用 Qlik Sense 中的机器学习力量进行数据驱动决策。
作为本章的一部分,我们将学习以下内容:
-
R 和 Python 的高级分析集成
-
设置 Qlik AutoML
-
使用 REST 的云集成
R 和 Python 的高级分析集成
高级分析集成是一个功能,它允许用户在 Qlik Sense 环境中执行高级数据分析与预测建模任务。通过高级分析集成,用户可以使用流行的统计分析与机器学习工具,例如 R 和 Python,来构建预测模型,执行数据挖掘任务,并从他们的数据中获得洞察。
通过高级分析连接从第三方系统获取的数据与由 Qlik 关联引擎处理的数据相结合。
高级分析集成的工作流程在下图中展示:
图 5.1:高级分析集成工作流程
接下来,我们将逐步查看 R 和 Python 集成的安装过程。
安装 R 的高级分析集成
在本节中,我们将安装 R 并在 Qlik Sense 客户端管理的环境中启用高级分析集成。让我们按照以下步骤进行:
-
先决条件:您需要安装并正确授权的最新版本的客户端管理的 Qlik Sense(自 Qlik Sense 2018 年 2 月发布以来支持服务器端扩展)。您还应拥有适当的访问权限的用户账户,以便在 Qlik 管理 控制台(QMC)中配置连接。
-
首先,我们需要下载并安装 R 环境。它可以从
cloud.r-project.org/
下载。R 的基本包就足够了。在撰写本文时,R-4.3.1 是最新版本,但您应使用最新版本。正确的二进制文件取决于您的操作系统。您可以在与客户端管理的 Qlik Sense 实例相同的服务器上安装 R,或者在一个单独的服务器上。在这个例子中,我们将把 R 安装在 Qlik Sense 的同一服务器上。您可以在安装程序中使用默认设置。
-
接下来,我们需要在我们的 R 环境中安装
Rserve
包,以便通过 TCP/IP 将 R 功能扩展到应用程序。Rserve 使得远程调用 R 脚本成为可能,而 SSE 桥接器正是利用它作为通信流程的一部分。打开 Windows 命令行,导航到 R 环境目录的bin
文件夹。你可能需要运行一个需要管理员权限的提升命令提示符。在我们的例子中,导航到正确目录的命令如下:cd C:\Program Files\R\R-4.3.0\bin
一旦你进入了正确的目录,通过输入
R
并按 Enter 键打开 R 环境。你应该会看到一个类似于以下截图所示的视图:
图 5.2:在命令行上运行的 R 环境
输入以下命令来安装 Rserve
包:
Rserve is now installed on our environment. You can invoke it by typing the following commands:
library(Rserve)
Rserve 现在正在运行,并准备好接收命令:
> Rserve: Ok, ready to answer queries.
- 我们需要在 Rserve 和 Qlik Sense 之间建立一个桥接组件。Qlik 为 R 提供了一个开源的桥接组件插件版本,我们将在本例中使用它。也有可能开发自己的桥接器。从以下网址下载桥接器:
github.com/qlik-oss/sse-r-plugin
。
注意
插件是用 C# 编写的,默认情况下必须构建。在存储库的 releases
部分中有一个预构建的插件版本:github.com/qlik-oss/sse-r-plugin/releases/tag/v1.2.1
。
在本例中,我们将使用最新的预构建版本,因为编译 C# 源代码超出了本书的范围。《桥接》组件用于在 Qlik 高级分析连接器和第三方分析引擎之间提供接口。它基于 Google 远程过程调用。
一旦你构建了包或下载了预构建版本,打开一个新的命令行,导航到包含 SSEtoRserve.exe
的文件夹,并在命令行中启动它。以下视图应该会出现:
图 5.3:在命令行上运行的 SSEtoRserve
我们现在已经验证了桥接组件可以连接到 Rserve。在进入下一步之前,你应该现在关闭所有打开的命令行窗口!
注意
桥接组件可以在与 Qlik Sense 环境或 R 环境相同的服务器上运行,或者在不同的服务器上。通常建议将桥接器安装在 Qlik Sense 相同的服务器上。在本例中,我们将把所有组件都安装在同一个服务器上。
如果网桥组件和 R 环境(R environment)位于不同的服务器上,您必须配置网桥组件以连接到 Rserve 运行的正确 IP 地址和端口。为此,修改与 SSEtoRserve.exe
同目录下的 SSEtoRserve.exe.config
文件中的值。此文件中还有其他选项,包括证书设置等。
-
接下来,我们将设置 R 和我们的 SSE 到 R 网桥作为服务运行。这将使我们能够始终拥有一个运行的环境,而无需手动从命令行重新启动服务。有多种工具可以将命令行脚本和程序作为服务运行。在此示例中,我们将使用一个名为 NSSM 的免费工具。NSSM 使安装和管理 Windows 服务变得更容易。让我们从以下链接下载 NSSM 开始:
nssm.cc/download
。下载完 NSSM 后,从
.zip
包中提取文件,并使用命令行导航到提取文件夹中的win64
文件夹(如果您使用的是 32 位环境,则为win32
)。确保您使用管理员权限运行命令行。我们将首先安装 Rserve 作为服务。要启动 NSSM,请输入以下命令:
Rserve.exe is located. An example of these settings is shown in the following screenshot:
图 5.4:NSSM Rserve 设置
点击 安装服务(Install service)按钮,您应该会收到一条消息,表明服务已成功安装。
要成功运行我们的 Rserve 服务,我们需要在环境变量中定义我们的 R 环境路径。为此,让我们首先打开环境变量窗口。可以通过启动 控制面板(Control Panel) -> 系统和安全(System and Security) -> 系统(System)并选择左侧的 高级系统设置(Advanced system settings)来找到它。将打开 系统属性(System Properties)窗口。点击窗口底部的 环境变量(Environment Variables)按钮。
选择 路径 并激活它。然后,点击 编辑(Edit)按钮。将打开 编辑环境变量(Edit environment variable)窗口。
在窗口右侧选择 新建(New),并输入包含您的 R 可执行文件的目录的正确路径。以下是一个示例路径(您应在此处使用您 R 安装的实际路径):
C:\Program Files\R\R-4.3.0\bin\x64
通过在 变量名(Variable name)字段中选择 R_HOME
环境变量并添加 R 环境根文件夹的路径到 变量值(Variable value)字段中来确认编辑。
下面的截图展示了示例:
图 5.5:系统变量示例
在所有三个窗口上点击 确定(OK),直到返回到 控制面板(Control Panel)。此时,系统变量已创建。
接下来,我们将安装网桥组件作为服务。首先,在之前步骤中使用的相同命令行窗口中输入以下命令:
nssm install SSEtoRServe
应该会出现与之前步骤中看到的类似设置窗口。在这里,我们将设置路径指向我们桥接连接文件夹中的 SSEtoRServe.exe
文件。一个示例路径如下:
C:\Users\qmi\Downloads\sse-r-plugin-1.2.1-qlik-oss\sse-r-plugin-1.2.1-qlik-oss\SSEtoRserve.exe
设置应该看起来与以下截图类似:
图 5.6:NSSM SSEtoRserve 设置
接下来,我们将 RserveService
设置为 SSEtoRServe
服务的依赖项。为此,按照以下方式打开 RserveService
:
图 5.7:SSEtoRServe 依赖项配置
在按下 安装服务 按钮后,我们应该会收到成功安装的确认。
接下来,我们可以从 Windows 中打开 服务 视图并启动我们的 SSEtoRserve 服务。这也应该会启动 RserveService。在继续下一步之前,请验证这两个服务是否正在正确运行。
- 下一步是在 QMC 中配置高级分析连接。打开
R
2.localhost
3.50051
4.20
5.0
以下截图显示了设置示例:
图 5.8:QMC 中的分析连接设置
-
接下来,我们可以测试我们的连接是否正确工作。打开任何 Qlik Sense 应用程序或创建一个新的应用程序并添加一些虚拟数据。在应用程序中添加一个新的表单,并将 KPI 对象拖放到画布上。
将以下公式插入 KPI 对象的表达式字段中:
R.ScriptEval('1+2')
脚本的第一部分告诉引擎使用我们新创建的分析连接。您可以使用 QMC 中定义的名称来引用任何分析连接。在这种情况下,我们连接的名称是
R
。第二部分是由我们的桥接插件提供的一个函数。总共提供了八个函数。我们将在 第七章 中更深入地探讨如何使用这些函数。在这个测试中,我们将向 R 环境发送一个简单的公式来求和两个数字。R 返回我们的计算总和,我们应该在 KPI 对象中看到它被显示:
图 5.9:R 中计算的 KPI 示例
我们现在已经验证了我们的环境正在正确工作。您可以在数据加载期间或实时利用加载脚本中的连接,就像我们在示例 KPI 中所做的那样。
备注
SSEtoRserve
组件将日志写入桥接根文件夹中的 /logs
文件夹。该日志是调试可能的问题和监控环境和模型性能的好地方。
备注
如果您想在 Qlik Sense 桌面实例上运行高级分析连接,可以将连接详细信息添加到位于 Documents/Qlik/Sense
下的 Settings.ini
文件中。要创建到 R 环境的连接,请添加以下行:
SSEPlugin=R,localhost:50051
记得在文件末尾添加一个空行,然后保存。现在,您的 Qlik Sense 桌面实例应该能够通过高级分析连接连接到 R。(注意,在启动 Qlik Sense 桌面之前,SSEtoRserve
桥接和 Rserve 必须在您的计算机上运行。)
安装与 Python 的高级分析集成
我们还可以利用高级分析连接使用 Python。在本节中,我们将按照以下步骤在客户端管理的 Qlik Sense 环境中安装具有高级分析集成的 Python。让我们这样做:
-
先决条件:您需要安装最新版本的客户端管理的 Qlik Sense 并正确授权。您还应该有一个具有适当访问权限的用户账户,以便在 QMC 中配置连接。
-
下载并安装 Python:
www.python.org/downloads/
.当安装程序启动时,选择 将 python.exe 添加到 PATH 并按 安装现在。
安装程序的这一阶段可以在以下屏幕截图中看到:
图 5.10:Python 安装设置
-
在成功安装 Python 之后,我们将向其中添加一些库。在这里,我们正在安装一些通过桥接组件进行通信所需的常见统计库。根据您的需求,您也可以安装额外的库。打开一个新的命令行窗口并输入以下命令:
python -m pip install --upgrade pip python -m pip install grpcio python -m pip install numpy python -m pip install nose python -m pip install google python -m pip install protobuf==3.20.*
- 对于本例,我们还将使用由 Qlik 创建的预定义桥接。从
github.com/qlik-oss/server-side-extension/releases/tag/v1.1.0
下载它并将其提取到服务器上。
- 对于本例,我们还将使用由 Qlik 创建的预定义桥接。从
-
接下来,我们将在 QMC 中配置我们的分析连接。打开
Script
4.localhost
5.50051
6.20
7.0
-
接下来,我们将导入我们的示例应用程序。导航到包含已下载桥接文件的文件夹。从那里,导航到
\examples\python\FullScriptSupport
文件夹并查找名为SSE_Full_Script_Support.qvf
的应用程序。将其导入到您的 Qlik Sense 环境中。 -
打开命令行,导航到包含已下载桥接文件的文件夹。从那里,导航到
\examples\python\FullScriptSupport
文件夹。输入以下命令并按 Enter:python ExtensionService_Script.py
您应该在命令行窗口中看到以下行:
2023-04-23 13:29:19,950 — INFO — Logging enabled 2023-04-23 13:29:19,966 — INFO - *** Running server in insecure mode on port: 50051 ***
Python 环境现在正在运行,并准备好接收来自 Qlik 应用程序的命令。
注意
如果您在之前 R 示例相同的环境中安装此示例,您需要更改此 Python 示例的端口号。为此,您可以修改位于我们 步骤 7 中运行示例的同一文件夹中的 ExtensionService_Script.py
文件中的代码。端口号定义在第 117 行:
parser.add_argument('—port',
nargs='?', default='50051')
更改它,并在 QMC 的 分析连接 中进行相应的更改。
注意
您也可以使用前面描述的与 R 组件相同的方法来设置 Python 环境,以便作为服务运行。我们在这里不会详细说明这部分内容,但基本上,您可以使用 NSSM 安装 Python 作为服务,并将脚本作为参数传递。
- 打开我们在 步骤 6 中导入的
SSE_Full_Script_Support.qvf
文件,以验证其功能。如果您打开应用程序的第一张工作表,您应该看到以下内容:
图 5.11:Python 连接工作
我们现在已成功在 Qlik 上安装了带有高级分析连接的 Python。
设置 Qlik AutoML
由于 Qlik AutoML 是一个 SaaS 解决方案,所需的设置很少。在本节中,我们将查看利用 AutoML 所需的必要步骤。我们将假设 Qlik Cloud 租户已经启动并运行。Qlik AutoML 的基本层包含在 Qlik Cloud 订阅许可证中。我们将在 第八章 中深入了解 Qlik AutoML 本身。为了为那一章做准备,需要以下步骤:
-
导航到 Qlik Cloud 中的 管理控制台 并打开 设置 选项卡。
-
在 功能控制 部分,确保已启用 机器学习端点,如下面的截图所示:
图 5.12:机器学习端点设置
- 选择
ML
实验
。这将是我们完成 第八章 中所有工作的空间。
我们现在已设置并准备好了云环境。我们将现在探索我们可以与 Qlik Cloud 一起使用的各种集成。
通过 REST 进行云集成
市场上有许多第三方机器学习和人工智能平台。您可以从 Qlik Cloud 连接到这些平台中的大多数。在本节中,我们将简要介绍每个连接的不同选项和需求。在本章中,我们不会在第三方工具之上创建实际模型。
要开始使用第三方机器学习端点的连接,您必须从 Qlik Cloud 的 管理控制台 中启用它们。如果您从本章开始一直跟随,我们已经在上一节中完成了这一步骤。
对于最常用的机器学习工具,都有专门的连接器。在撰写本书时,连接器如下:
-
通用高级分析连接器
-
Amazon Comprehend 连接器
-
Amazon SageMaker 连接器
-
Azure ML 连接器
-
Azure OpenAI 连接器
-
Databricks MLflow 连接器
-
DataRobot 连接器
-
Qlik AutoML 连接器
-
Qlik GeoOperations 连接器
-
OpenAI 连接器
当你在 Qlik Cloud 中选择 添加新 - 数据连接 时,所有这些连接都可用。分析连接可以将数据发送到外部机器学习端点进行计算。该功能与我们在此章前面发现的 R 和 Python 连接类似。数据连接可以从加载脚本或 实时 从可视化表达式利用。我们将在 第七章 中更深入地探讨语法。
让我们更详细地看看这些连接器之一。
通用高级分析连接器
要使用通用连接器,必须有一个连接到的端点,并且此端点必须由 Qlik Cloud 环境公开访问。这些连接的参数如下:
-
URL: 部署模型的平台的宿主 URL。
-
方法: GET 或 POST。
-
application/json
。 -
HTTP 头部: 每个请求中发送的自定义头部。
-
查询参数: 将附加到 URL 结尾的参数。
-
授权方法: 无、Bearer 令牌或 AWS Auth v4 签名。
-
请求: 请求的格式和内容。
-
响应字段: 是否加载所有字段。如果没有选择,可以指定要加载的字段。
-
响应表: 定义特定表字段。如果之前未选中参数,则使用此参数确定要加载的字段。
-
关联: 包含唯一标识符的字段。结果表将使用此信息与源表关联。这可以是包含唯一 ID 的任何字段。
-
名称: 连接名称。
创建连接后,它将出现在 数据连接 下的 数据加载编辑器 中。
Amazon SageMaker 连接器
Amazon SageMaker 是一个知名的机器学习平台。有一个专门的连接器用于从 Qlik Cloud 与 SageMaker 交互。要连接到 SageMaker 端点,它必须对 Qlik Cloud 公开可访问。此连接器的参数如下:
-
端点名称: 在 AWS 环境中端点使用的标识符。
-
模型名称: 在 AWS 中为部署的模型给出的名称。
-
模型变体名称: 如果部署了多模型端点,则此参数用于识别变体。对于简单端点,不应提供此参数。
-
设置: 区域 指定服务的 AWS 区域,使用 FIPS 端点 指定是否需要符合 FIPS 的端点。
-
认证: 在此处,我们使用 AWS 控制台中找到的 AWS 访问密钥和秘密密钥。
-
响应格式: JSON 或文本数组。大多数模型使用 JSON。
-
响应表: 返回表名称 识别模型返回的表,表路径 可以用于使用 JMES path 指定表。
-
响应字段: 是否加载所有字段。如果没有选择,可以使用 表字段 选择器指定要加载的字段。
-
关联: 包含唯一标识符的字段。结果表将使用此信息与源表关联。这可以是任何具有唯一 ID 的字段。
-
名称: 连接名称。
Azure ML 连接器
Azure ML 是另一个知名的机器学习平台。要连接到 Azure ML 端点,它必须对 Qlik Cloud 公开访问。此连接器的参数如下:
-
格式: Azure ML 或 Azure ML(旧版)。对于在 2022 年 1 月之前创建的模型,应使用旧版格式。
-
端点名称: 在 Azure 中用于端点的标识符。
-
身份验证: 从 Azure 门户获取的 Azure ML 端点密钥。
-
请求: Web 服务输入名称是模型期望的 JSON 对象名称。
-
响应表: 在这里,返回表名称标识模型返回的表,表路径可以用于使用 JMES 路径指定表。
-
响应字段: 是否加载所有字段。如果不选择此选项,您可以使用表字段选择器指定要加载的字段。
-
关联: 包含唯一标识符的字段。结果表将使用此信息与源表关联。这可以是任何具有唯一 ID 的字段。
-
名称: 连接名称。
Qlik AutoML 连接器
Qlik AutoML 是 Qlik Cloud 中的一个机器学习环境,并拥有其专用的连接。我们将在第八章中更详细地探讨 AutoML 及其使用方法。Qlik AutoML 连接器的参数如下:
-
连接: 已部署的机器学习模型名称。
-
响应表: 返回表名称是模型返回的表。您还可以指定是否希望包括 SHAP 值、源数据集和任何错误。
-
关联: 包含唯一标识符的字段。结果表将使用此信息与源表关联。这可以是任何具有唯一 ID 的字段。
-
名称: 连接名称。
我们现在简要地查看了一些 Qlik Cloud 到第三方机器学习环境和 Qlik AutoML 所需的参数。我们将在本书的后续部分利用这些端点。
注意
分析连接包的一个有趣部分是 OpenAI 连接器和 Azure OpenAI 连接器。这些连接器将为生成式 AI 模型提供无缝集成。连接的原则与其他分析连接类似,但可能性无穷无尽。在本章中,我们不会深入探讨设置连接,但您可以在 Qlik 帮助网站上找到详细说明。
摘要
在本章中,我们开始转向使用 Qlik 实现机器学习模型的实际应用。为了为即将到来的章节做准备,我们安装了不同的环境。
首先,我们完成了 R 环境的安装以及从客户端管理的 Qlik Sense 实例中连接高级分析环境的步骤。我们介绍了如何以服务的形式运行组件,并创建了一个简单的示例应用程序来验证其功能。
我们还安装了 Python 环境,并使用高级分析集成将其连接到我们的 Qlik 环境。我们通过一个示例应用程序展示了该环境的功能。在本章的结尾,我们从本地环境迁移到了云端环境,并了解了如何使用 REST 创建到外部 AI 和机器学习平台的连接。我们还为 AutoML 环境进行了一些设置步骤,以便为接下来的章节做好准备。
在下一章中,我们将研究 Qlik Sense 的数据建模能力。我们将学习如何创建数据模型,如何清理数据,以及如何分析数据。我们将了解不同的技术和工具,以便能够为机器学习目的准备一个完美的数据集。在下一章开始实施和创建实际的机器学习模型时,我们将利用在这里学到的技能。
第六章:使用 Qlik Sense 预处理和探索数据
数据处理和探索是数据分析过程中的关键步骤。它们包括将原始数据转化为有意义的见解,识别模式,以及更深入地理解数据。Qlik Sense 是一款强大的数据分析工具,它允许用户轻松地处理和探索数据。凭借其数据清洗、转换和集成功能,Qlik Sense 使准备数据进行分析以及生成用于机器学习模型的良好数据集变得容易。
本章将介绍使用 Qlik Sense 进行数据预处理和探索。我们将涵盖以下主要主题:
-
使用数据管理器创建数据模型
-
使用 Qlik 脚本创建数据模型和修改数据
-
验证数据
-
利用数据溯源和数据目录
-
使用 Insight Advisor 探索数据和发现见解
使用数据管理器创建数据模型
一个好的数据模型非常重要,因为它构成了有效数据分析的基础。数据模型是数据集内结构和关系的表示,它定义了数据存储、访问和使用规则。
Qlik 的数据管理器是 Qlik Sense 平台的一部分,是一款数据准备和管理工具。它提供了一个用户友好的界面,用于设计和构建数据模型,以及从各种来源清洗、转换和集成数据。
Qlik 的数据管理器提供了一系列功能来支持数据准备和管理,包括以下内容:
-
数据概览:Qlik 的数据管理器提供了帮助用户理解数据的工具,包括数据概览功能,这些功能允许用户识别数据质量问题,例如缺失值、重复值和异常值。
-
数据转换:Qlik 的数据管理器提供了一系列用于清洗和转换数据的工具,包括去除重复项、填充缺失值以及转换数据类型的能力。它还提供了高级转换功能,如数据透视和数据归一化。
-
数据集成:Qlik 的数据管理器允许用户从各种来源集成数据,包括 Excel 电子表格、CSV 文件、数据库和基于云的服务。它提供了对流行数据源的内置连接器,以及为其他数据源创建自定义连接器的功能。
-
数据建模:Qlik 的数据管理器允许用户通过图形界面创建数据模型。它提供了定义表、字段以及表之间关系、添加计算字段以及构建复杂数据模型的工具。
接下来,我们将通过一个示例数据集来探讨数据管理器的这些功能。由于这超出了本书的范围,我们不会详细涵盖完整数据模型的创建。
备注
这些示例中使用的示例数据集可以在本书的 GitHub 仓库中找到。
数据管理器简介
让我们通过查看用户界面来开始熟悉数据管理器。作为准备步骤,我们在 Qlik 云租户中创建了一个新的分析应用程序,并上传了我们的样本数据集(Sales Multi Table.xlsx
)。数据管理器视图将打开。该视图的一个示例可以在以下图中看到:
图 6.1:数据管理器视图
在此图中,我们将数据管理器分为三个不同的部分,我们将在下面介绍:
-
数据建模:在这个空间中,您可以创建实际的数据模型。一个气泡代表数据实体,例如 Excel 表或数据库表。当在气泡上单击鼠标左键时,其他气泡的颜色将改变。这种颜色代表这两个实体之间如何相互关联。
-
数据预览:如果您激活了一个数据实体或气泡,数据预览将显示有关实体的所有列和样本数据的快照。在数据建模视图中,活动实体以较深的边框突出显示。您可以从此视图进入数据编辑视图、刷新和删除数据实体。
-
关联:数据管理器发现的实体之间的所有关联都可以在屏幕右侧看到。您可以使用此视图预览关联并批准这些关联。
接下来,我们将查看如何使用我们的样本数据集创建数据模型。我们将首先将一个名为类别的数据实体拖放到名为产品的数据实体上方。当我们开始拖动类别实体时,我们将看到一个类似于以下视图:
图 6.2:数据管理器 – 将表链接在一起
在这张图片中,我们可以看到产品实体在外边缘有一个绿色弧线,而其他几个实体有橙色弧线。弧线和颜色代表两个实体之间的匹配。由于产品实体是最匹配的,我们可以在产品上方放下我们的类别实体。我们现在已经将这两个数据实体链接在一起。实际的链接表在数据建模视图的底部可见。在以下图中已突出显示:
图 6.3:数据管理器 – 关联完成
如果你想编辑链接字段,可以通过按下高亮区域中间的按钮来完成。现在你可以继续构建数据模型的其余部分。这可以通过逐个进行或通过选择应用全部按钮来完成,该按钮位于关联视图的顶部部分,如图所示:
图 6.4:应用全部按钮
您应该看到准备好的数据模型。它应该看起来像以下图中的那样:
图 6.5:数据模型就绪
接下来,我们将更详细地查看数据管理器中的编辑功能。我们将首先选择Employees实体。我们应该在数据****预览部分看到Employees的内容。
要修改实体,我们将选择位于数据预览部分底部的笔形图标。数据编辑视图将打开,应该看起来像以下图所示:
图 6.6:数据编辑视图
数据编辑视图分为以下部分:
-
datetime
字段,并将坐标分配给地理数据。 -
数据摘要:数据摘要将显示数据的统计信息和分布。本节适用于验证和异常值检测。本节还将告诉您在特定列中有多少总值和唯一值。
-
数据编辑:数据编辑部分将允许您使用图形工具对数据字段执行多个操作。这些操作包括空值替换、用其他值替换某些值、创建桶和分割数据。例如,空值替换是机器学习的重要预处理步骤。
接下来,我们将以Employees实体为例,更详细地查看一些部分。让我们选择Salary列,并在摘要部分将其类型更改为度量。你应该会看到以下图所示的内容:
图 6.7:数据编辑视图中的活动薪资字段
我们可以看到,数据预览部分显示了最小值、中位数、平均值和最大值以及每个单独值的分布。数据编辑部分将为我们提供创建数据桶、替换某些值和将值设置为空字段等选项。
接下来,我们将激活EmployeeName字段。我们将看到以下视图,该视图将与我们之前看到的Salary字段的视图略有不同:
图 6.8:数据编辑视图中的活动 EmployeeName 字段
现在,我们可以在数据摘要部分看到不同的视图,该视图显示了唯一值和总值。我们也会在我们的数据编辑部分看到新的选项。例如,可以将字段分割为姓氏和名字,并且还可以设置顺序。由于EmployeeName是一个文本字段,因此我们不会看到与此字段相关的桶选项。
在右上角,我们可以看到添加字段按钮,在其下方,我们可以添加一个计算字段。如果我们选择该选项,将出现一个引导我们创建字段的向导。让我们为我们的Employee实体创建一个计算字段。如图所示,应该可以看到以下图:
图 6.9:添加计算字段
在这种情况下,我们希望计算员工的月工资,保留两位小数。我们将字段命名为MontlySalary
,并在表达式字段中给出以下表达式:
Round((Salary/12),0.01)
预览部分将在我们输入计算时显示样本值。您可以使用表达式部分下的按钮访问字段、函数和运算符。准备好后,按创建按钮将计算字段添加到我们的数据实体中。
当您查看每个字段的标题部分时,您可以看到以下图中突出显示的图标:
图 6.10:数据编辑视图中的标题
左侧的图标将提供更改每个字段数据类型的选项。数据管理器应自动识别大多数数据字段。例如,在前面的图像中,Date
类型有一个小日历图标,而其他字段是通用类型。可用的字段类型有通用、日期、时间戳和地理数据。
具有关联的字段带有链形图标,如前图所示,位于Employees.EmployeeID
字段和Employees.Office
字段上方。您可以通过选择链形图标来编辑或断开关联。
最右侧的图标将提供修改字段的选项。下面,您可以找到重命名字段、将字段与其他表关联、编辑排序、隐藏字段以供分析以及查看详细信息的选项。
我们现在已经简要地浏览了数据管理器中的大多数功能。下一步是将数据加载到 Qlik 的引擎中。为此,我们可以选择位于右上角的加载数据按钮。数据加载将开始,之后我们可以继续到可视化部分。
在下一节中,我们将简要介绍 Qlik 脚本。我们将发现一些我们可以在我们的机器学习和数据可视化解决方案中利用的重要函数。
注意
数据管理器在后台生成 Qlik 脚本。一种开始研究脚本的好方法是使用数据管理器创建数据模型,然后切换到数据加载编辑器以查看生成的脚本。
注意
可以使用数据模型查看器来查看数据模型。数据模型查看器将表示表之间的关系,并给出每个表包含的数据样本。我们在这本书中不会深入介绍其用法。
Qlik 脚本简介
Qlik 脚本是一种脚本语言,用于在 Qlik Sense 和 QlikView 中从各种来源加载数据和转换数据到 Qlik 的关联数据模型。它是一种强大且灵活的脚本语言,允许用户从数据库、电子表格和平面文件等各种来源提取、转换和加载数据,然后为分析准备这些数据。
Qlik 脚本在语法和结构上类似于 SQL,但它包括额外的功能和函数,使其更强大和灵活。使用 Qlik 脚本,用户可以执行复杂的数据转换、创建计算字段、生成变量并对数据进行筛选。脚本可以用来定义数据模型、指定数据源并从它们中加载数据,以及定义数据转换。我们在上一节中使用的数据管理器在后台生成 Qlik 脚本,并且可以使用脚本执行使用数据管理器所做的所有操作。
在使用 Qlik 脚本时,创建应用程序数据模型通常涉及以下过程:
-
连接到数据源:首先,我们需要建立一个与数据源的连接。这可能是一个数据库、Excel 文件、CSV 文件或任何其他受支持的数据格式。本书中不会详细介绍创建数据连接。
-
LOAD
关键字。 -
LOAD
语句用于从数据源中提取数据到 Qlik。指定要加载的字段和源表或文件。在本例中,我们将从Sales Multi Table.xlsx
加载Employees
表和Office
表。这些表将通过[Office]
字段进行链接,因为在 Qlik 脚本中,具有相似名称的字段将形成一个链接。您可以使用as
关键字修改名称。[Employees]: LOAD [EmployeeID], [Extension], [EmployeeName], [Hire Date], [Office], [Reports To], [Title], [Year Salary] AS [Salary] FROM [lib://DataFiles/Sales Multi Table.xlsx] (ooxml, embedded labels, table is Employees); [Offices]: LOAD [Office], [SalesOffice], APPLYMAP( '__cityKey2GeoPoint', APPLYMAP( '__cityName2Key', LOWER([SalesOffice])), '-') AS [Offices.SalesOffice_GeoInfo] FROM [lib://DataFiles/Sales Multi Table.xlsx] (ooxml, embedded labels, table is Offices);
-
转换和清洗数据:对加载的数据执行任何必要的转换或清洗操作。这可能包括重命名字段、更改数据类型、过滤行或连接表。Qlik 提供了各种函数和运算符来操作数据。我们将在下一节中更详细地探讨一些函数。
-
创建表关联:Qlik 的关联数据模型允许您根据公共字段在表之间建立关系。您还可以在表之间创建连接,并在需要时连接数据。
-
保存和重新加载脚本:完成脚本后,保存它并点击重新加载按钮。这将加载数据到 Qlik 应用程序并创建数据模型。
Qlik 脚本中的重要函数
在本节中,我们将更详细地探讨 Qlik 脚本中的一些函数,这些函数在创建机器学习准备好的数据模型时非常有用:
-
Date()
、Year()
、Month()
、Day()
和Quarter()
,用于从字段中提取和操作日期相关信息。 -
Len()
、Upper()
、Lower()
、Concatenate()
、Left()
、Right()
、Mid()
和SubField()
,用于字符串操作和格式化。这是一个使用
Upper()
函数的示例:LOAD CustomerID, Upper(CustomerName) AS CustomerName FROM [Customers.csv];
-
用于执行计算和聚合的
Sum()
、Avg()
、Min()
、Max()
、Count()
、Round()
、Ceil()
、Floor()
和Abs()
函数。这些函数在准备数据用于机器学习时非常有用。这是一个使用
Sum()
函数的示例:LOAD CustomerID, Sum(SalesAmount) AS TotalSales FROM [Sales.csv] GROUP BY CustomerID;
-
AGGR
函数用于根据用户定义的表达式动态聚合数据。它允许你在不同的粒度级别执行计算。这是一个示例:
Sales: LOAD Product, Category, Price, Quantity FROM [Sales.csv]; CategorySales: LOAD Category, AGGR(Sum(Price * Quantity), Category) AS TotalSales RESIDENT Sales GROUP BY Category;
在这个示例中,我们有一个销售交易数据集(
Sales
)。我们想要通过计算每个交易的金额和数量的乘积来计算每个类别的总销售额。 -
IF-THEN-ELSE:IF-THEN-ELSE 语句用于执行条件逻辑。它允许您创建条件表达式并根据条件执行不同的操作。
这是一个示例:
Sales: LOAD Product, Category, Price, If(Category = 'Electronics', Price * 0.9, Price) AS DiscountedPrice FROM [Sales.csv];
在这个示例中,如果
Category
字段等于Electronics
,则DiscountedPrice
字段将计算为原始价格的 90%(Price * 0.9
)。否则,如果Category
不是Electronics
,则DiscountedPrice
字段将与原始价格相同(Price
)。 -
FOR...NEXT
循环允许您执行指定次数的脚本代码块。通常在您事先知道迭代次数时使用。 -
DO...WHILE
循环在条件为真时重复执行代码块。当您想要迭代直到满足特定条件时,它很有用。 -
FOR EACH...NEXT
循环允许您遍历字段的唯一值或表达式。它为每个唯一值执行代码块。 -
WHILE...WEND
循环在条件为真时重复执行代码块。当您想要迭代直到特定条件变为假时,它很有用。 -
其他可能在为机器学习建模数据时很有用的函数列在这里:
-
APPLYMAP
函数允许您通过引用外部映射表来执行映射操作。这在将分类值映射到数值代码或反之亦然时可能很有用,这在机器学习任务中通常是必需的。 -
RESIDENT
函数允许您对先前加载的表执行操作。这对于创建派生表或对现有数据进行转换很有用,这有助于为机器学习算法准备数据。 -
PIVOT
和UNPIVOT
函数使您能够重塑数据,在宽格式和长格式之间进行转换。这种功能在机器学习工作流程中的特征工程和数据预处理中可能非常有价值。 -
CONCATENATE
函数允许您将具有相同结构的多个表合并为一个表。这在从不同来源汇总数据或合并数据集时可能很有用,这对于机器学习任务通常是必要的。 -
LOAD INLINE
语句允许您在脚本中定义内联数据。当您有小型数据集或需要为测试机器学习算法定义示例数据时,这很有用。 -
PRECEDING LOAD
功能使您能够在负载脚本中计算和存储派生字段。它允许您即时执行计算和转换,这在特征工程或创建机器学习模型的目标变量时可能是有益的。 -
APPLY
和GROUP BY APPLY
函数允许您对数据组执行高级计算和转换。它们提供了一种在组内应用复杂表达式和聚合的方法,这对于创建特征或为机器学习算法生成汇总统计信息可能很有益。 -
QUALIFY
和UNQUALIFY
函数用于指定字段限定符。当处理包含在 Qlik 脚本中具有特殊意义的字符的字段时,它们尤其有用,例如空格或特殊字符,这在机器学习任务的特征名称或标签中很常见。
-
注意
一个包含示例的完整 Qlik 脚本参考指南可在 Qlik 帮助网站上找到。
现在我们已经简要概述了 Qlik 脚本中一些最重要的功能。Qlik 脚本是一个强大的数据处理和创建数据模型工具。接下来,我们将更详细地探讨使用 Qlik Cloud 中的多个工具进行数据验证。
验证数据
在进入数据编辑和分析阶段之前,我们有多种选项可以使用 Qlik Cloud 验证和调查我们的数据。让我们首先使用数据目录。我们将在本章下一节更详细地探讨数据目录,但在这个部分,我们将介绍一些数据验证的功能。首先,我们将打开Sales Multi table.xlsx
并移动到数据目录中的字段部分。让我们也选择员工标签。我们应该看到以下视图:
图 6.11:数据目录
在这里,我们可以看到员工实体中所有字段的数据分布。默认情况下,我们在目录中打开了瓷砖视图。以下图表示我们的Salary字段的瓷砖。让我们接下来更仔细地看看它:
图 6.12:数据目录中的 Salary 字段
Salary瓷砖将显示Salary字段的最低值、平均值和最大值。它还将告诉我们不同值的数量。使用这些信息,我们已能识别可能的异常值并获得数据分布的初步了解。
接下来,我们将通过右上角的小图标(以下图中已突出显示)从瓷砖视图切换到列表视图。以下视图应该可见:
图 6.13:数据目录 – 列表视图
此视图将告诉我们每个字段的数据类型和不同值以及空值的数量,并为每个字段提供值样本。数据类型和空值数量在开始创建机器学习解决方案时特别有价值。
接下来,我们将继续使用数据管理器进行数据验证。在前一节中,我们已经介绍了一些数据管理器的功能。我们正在使用导入到数据管理器中的Sales Multi Table.xlsx
文件,并且已经打开了员工实体进行编辑。如有需要,请参考本章早期关于数据管理器的部分。
接下来,我们将激活员工姓名字段。数据摘要部分应该如下所示:
图 6.14:员工姓名字段摘要
在这里,我们可以看到这个字段被处理为一个维度,总共有 47 个值。所有值都是唯一的,我们可以看到分布情况。接下来,我们可以激活雇佣日期字段。以下摘要可见:
图 6.15:雇佣日期字段摘要
在这里,我们可以看到数据的分布以及总数和唯一值的数量。我们还可以看到数据的值范围。当调查数据并寻找潜在的异常值时,这些信息非常有用。接下来,我们可以选择薪资字段,应该会看到以下内容(可能需要将类型从维度更改为度量):
图 6.16:薪资字段摘要
薪资字段摘要将告诉我们分布情况、总数和唯一值的数量,以及最小值、中位数、平均值和最大值。这些信息将有助于我们进一步进行数据调查和验证。
验证数据的第三种方法是利用 Qlik 的分析对象,并在数据模型之上创建一个视图。我们将在本书的后续章节中介绍这一点。在本章的后面部分,我们将探讨洞察顾问及其如何用于数据分析。洞察顾问是数据验证的强大工具。
现在我们对数据验证有了概述,我们将探讨数据血缘和数据目录的可能性。这些工具将帮助我们更好地理解数据,并帮助我们可视化数据管道。
数据血缘和数据目录
在 Qlik Sense 中,数据血缘和数据目录是两个重要的功能,帮助用户更好地理解、管理和治理他们的数据。
数据血缘指的是数据从源头到目的地的路径,包括沿途发生的所有转换。在 Qlik Sense 中,数据血缘提供了数据在系统中如何转换的视觉表示。这有助于用户了解数据的来源和质量,以及识别数据流中的任何问题或瓶颈。有了数据血缘,用户可以追踪数据回其原始来源,识别任何数据依赖关系,并确保数据准确可靠。
数据目录指的是一个集中式存储库,其中包含描述组织数据资产元数据的元数据。在 Qlik Sense 中,数据目录提供了一种发现、理解和协作数据资产的方法。使用数据目录,用户可以搜索数据资产,查看元数据和血统信息,并与他人协作处理数据。数据目录还有助于确保数据得到适当的治理,通过提供数据定义、数据质量规则和其他重要元数据的单一来源。
数据血统和数据目录共同提供了一个组织数据资产的综合视图,从其起源到其使用,使用户能够更好地理解和治理他们的数据,并基于可靠的信息做出明智的决策。
让我们接下来更详细地查看这两个功能。
数据血统
数据血统功能可以在 Qlik Cloud 租户的应用选项下找到(应用图块右侧的三点)。以下图中显示了突出显示的血统选项:
图 6.17:Qlik 的应用选项下的血统功能
选择血统后,将打开一个新视图,可视化所选应用程序的整个血统路径。以下图中可见该视图的一个示例:
图 6.18:数据血统视图
血统视图将向我们展示数据是如何从源系统流入我们的端用户应用程序的。在这种情况下,我们的源系统是 Azure SQL 服务器,我们有一个名为QVD Generator的 Qlik 应用程序,它将生成 QVD 文件并将它们存储在 Qlik Cloud 中。然后,这些 QVD 文件和来自我们云环境中其他文件夹的文件被用作端用户应用程序(称为Wide World Importers)的基础数据。也有可能查看表级别的血统。以下图表示了我们端用户应用程序中找到的国家表的血统视图:
图 6.19:端用户应用程序中单个表的数据血统
从这个视图中,我们可以轻松验证哪些数据被组合到国家表中,以及这些数据是从哪里来的。
数据血统是调查数据来源和转换的强大工具,当处理数据时非常有用。它具有许多功能,我们在这里只介绍了最基本的使用案例。如果您想了解更多信息,Qlik Cloud 的帮助页面中有大量相关材料。
接下来,我们将更详细地探讨数据目录以及如何调查单个数据对象。
数据目录
我们在本章中已经发现了数据目录的一些数据验证功能。接下来,让我们更详细地看看数据目录的其他方面。我们将首先在 Qlik Cloud 中打开 Sales Multi Table.xlsx
文件。一旦您将文件上传到云端,您应该会看到以下图块:
图 6.20:Sales Multi Table.xlsx 数据集图块
选择打开数据集,您将进入数据目录。您的视图应该如下所示:
图 6.21:数据目录的首页
数据目录包含以下部分:
-
元数据:这是关于文件的一般元数据。本节将说明数据上传的时间、使用位置以及所有者是谁。它还将提供关于数据集的流行度和数据结构的信息。
-
分类:如果任何字段被分类为个人信息、敏感或其他标签,这些信息可以在此处看到。如果数据被分类,我们在使用时应极为小心。我们还可以使用本节在数据集级别设置分类。
-
字段:本节将为我们提供字段和每个字段中的数据的概述。这在本章的数据验证部分已有更详细的介绍。
接下来,我们可以更仔细地查看分类。让我们转到字段选项卡并选择员工实体。在其下,我们可以选择薪资字段。我们应该看到以下内容:
图 6.22:目录中的数据分类
在数据分类视图中,我们可以为每个字段提供别名并给出描述。我们还可以标记单个字段并说明它们是否包含个人信息或敏感信息。使用标签和描述来增强信息非常重要,因为您的组织中可能有许多人并不熟悉数据。提供这些信息还可以帮助我们创建机器学习解决方案,因为我们可以在提供额外信息的情况下更好地理解数据。
数据目录将帮助我们熟悉数据并构建良好的数据集集合。接下来,我们将更详细地探讨 Insight Advisor 以及它如何帮助我们熟悉数据并轻松创建可视化。
探索数据和发现洞察
Qlik Insight Advisor 是 Qlik Sense 中的一项功能,它使用自然语言处理和人工智能来帮助用户探索数据并发现洞察。通过使用 Qlik Insight Advisor,您可以利用自然语言处理和人工智能的力量来探索您的数据,提出问题,并发现有意义的洞察。
在第一章中,我们已经学习了洞察顾问的一些基础知识。在没有增强智能功能的情况下,我们也可以使用 Qlik 对象和可视化来探索数据和发现洞察。我们将在本书的后续部分更详细地探讨如何以这种方式创建可视化。在本节中,我们将了解洞察顾问将如何帮助我们从数据中获得有意义的洞察。
我们将首先使用Sales Multi Table.xlsx
文件作为我们的源数据。我们已经在本章早期创建了一个数据模型,并将数据加载到一个关联引擎中。数据加载完成后,我们可以选择转到工作表并看到以下三个选项:
图 6.23:在新应用程序中查找数据选项
在这种情况下,我们将选择探索数据。这将启动洞察顾问,并应出现以下视图:
图 6.24:洞察顾问
在这个图中,我们可以看到四个不同的部分:
-
数据探索:此部分包含我们源数据中的所有字段以及我们应用程序中(如果我们创建了这些)的所有主项目。
-
自然语言输入:此输入字段允许我们从洞察顾问提出自然语言问题
-
选项:本节将指导我们使用洞察顾问支持的不同分析类型
-
分析类型:本节将为我们提供到不同分析类型的快捷方式
让我们从选择第一部分列表中的一个字段开始我们的数据探索。例如,我们可以选择名为国家的字段。以下视图将出现,为我们提供关于国家字段中数据的详细信息:
图 6.25:洞察顾问 – 字段信息
此视图将显示不同国家的数量作为关键绩效指标(KPI),一个按名称列出所有国家的表格,以及一个显示实际区域的地图。我们可以通过选择取消返回到上一个视图。
接下来,我们将研究引导分析类型。让我们首先从分析类型部分选择排名。我们应该看到以下内容:
图 6.26:洞察顾问 – 排名
在这个视图中,我们可以选择用于排名图的度量值和维度。让我们选择销售额作为度量值,销售办公室作为维度。这将按销售额排名我们的销售办公室。我们可以看到,洞察顾问正在使用求和作为销售额字段的聚合器。在这种情况下这是正确的,但如果需要,可以修改。现在我们应该看到以下视图:
图 6.27:洞察顾问 – 排名结果
我们可以看到,洞察顾问为我们生成了一个表示每个销售办公室总销售额的柱状图。它还为我们提供了有关总销售额和表现最佳的销售办公室的一些额外信息。还有相同数据的其他表示形式。
我们可以将柱状图添加到我们的表格中进行进一步分析,但它已经告诉我们一些关于数据的重要事实。接下来,我们将调查一种更复杂的分析。通过选择取消并选择创建分析,我们可以返回到之前的视图。以下屏幕应显示所有可用的分析类型:
图 6.28:洞察顾问 – 分析类型
从这个分析类型列表中,我们将接下来调查聚类。从列表中选择聚类(k-means)。接下来,选择销售额的总和和折扣的平均值作为度量,以及产品名称作为维度。以下屏幕将出现:
图 6.29:洞察顾问 – 聚类
如我们所见,根据总销售额和平均折扣,识别出了五组不同的产品。这将帮助我们更深入地调查我们的产品销售。我们还将从洞察顾问那里获得有关聚类的额外信息。支持许多不同类型的分析,许多在探索机器学习解决方案的数据时都很有益。强烈建议您查看所有分析类型的功能以及您可以获得的结果。
接下来,我们将探讨自然语言输入如何与洞察顾问一起工作。我们可以通过选择取消首先返回到基本视图。现在我们可以在屏幕顶部的字段中开始键入输入。键入以下查询:
Give me total sales by CategoryName in each country
当我们键入查询时,我们可以看到洞察顾问将建议不同的字段。查询将返回以下视图:
图 6.30:洞察顾问 – 自然语言查询结果
如我们所见,洞察顾问产生了各种图表。我们得到了一个表示按国家/地区和地图划分的每个产品类别销售的树状图,一个帕累托图和一个柱状图作为替代结果。我们还得到了一些书面形式的见解。
洞察顾问是一个强大的工具,可以探索数据和创建可视化。在本节中,我们简要介绍了它的基础知识。更多信息可以在 Qlik 的帮助页面中找到。学习使用它们的好方法是通过一些简单的数据集进行尝试。
摘要
在本章中,我们首先通过 Qlik 的数据管理器获得了一些实际操作经验,并学习了如何使用它创建数据模型。我们还学习了如何创建计算字段和调查数据。创建一个好的数据模型和修改数据以适合机器学习是成功的关键。
我们还发现了 Qlik 脚本的某些基础知识以及如何使用它来执行数据转换。我们发现了 Qlik 脚本的一些重要函数和特性。脚本是一种创建数据模型和操作数据的替代方法。它是一个强大的工具,也可以与数据管理器中创建的模型结合使用。
在本章的后续部分,我们学习了一些验证和调查数据的方法。我们熟悉了数据目录和数据血缘视图,并学会了如何在数据验证中利用它们。数据验证是任何机器学习或数据分析项目中的关键步骤,在创建解决方案之前理解数据非常重要。
本章的最后部分教我们如何使用洞察顾问进行数据发现。洞察顾问是一个强大的工具,用于使用增强智能进行分析,掌握它将帮助我们更快地熟悉数据。
在下一章中,我们将继续我们的动手实践之旅,学习如何在本地和云环境中部署和监控机器学习模型。这将为本书的最后几章打下良好的基础,在这些章节中,我们将实现一些更高级的模型。
第七章:部署和监控机器学习模型
在前面的章节中,我们学习了关于不同模型和技术的很多知识。理解概念和构建机器学习模型只是实现其实际价值的旅程的开始。这些模型的成功部署和持续监控对于确保它们在实际场景中的有效性和可靠性至关重要。
确保模型表现最佳、无缝集成到现有系统中,并适应不断变化的需求,需要对部署过程及其相关考虑因素有全面的了解。在 Qlik 平台的情况下,大多数典型痛点都由平台本身和组件的设计处理,但仍有一些事情我们需要牢记。
一旦部署了机器学习模型,持续监控其性能以识别潜在问题、保持准确性和防范意外故障至关重要。监控可以提供关于模型行为的洞察,帮助检测数据漂移或概念漂移,并促进识别随时间推移的性能下降。通过主动监控和分析关键指标,组织可以做出有关模型维护、重新训练和更新的明智决策,以确保可靠的和最新的预测。
在本章中,我们将熟悉以下主要主题:
-
使用高级分析集成在本地环境中构建模型
-
监控和调试模型
本章重点介绍本地环境。我们将在下一章中看到如何使用 Qlik AutoML 部署和监控模型。
使用高级分析连接在本地环境中构建模型
在第五章中,我们使用 Qlik 的高级分析连接为 R 和 Python 准备了一个环境。在本章中,我们将利用这个相同的环境。这个练习将特别使用 R。
通常,有两种方式可以利用 Qlik 应用程序的高级分析连接。以下是这两种方式:
- 实时连接:实时连接在用户与应用程序交互的同时与第三方机器学习环境进行交互。实时连接允许进行“如果...将会怎样”的场景、模拟和类似用例。它最适合不需要大量训练的轻量级模型。实时连接背后的理念在以下图中解释:
图 7.1:高级分析连接
- 加载时连接:加载时连接是在执行 Qlik 加载脚本时进行的一次性预测模型运行。当在加载时使用高级分析连接时,结果将保存到 Qlik 数据模型中的一个表中。然后,可以在创建应用程序时使用这些结果。加载时连接适用于只需要一个预测值的用例。例如,如果我们正在预测产品未来的销售额并希望将预测保存到数据模型中以供以后分析,则使用加载时连接。它也适用于需要大量训练的模型。可以将实时连接与加载时连接结合使用,在数据加载时预测一些值,并交互式地利用情景分析。
注意
准备好的模型可以在加载时或实时模式下保存和重用。这样,如果模型的参数没有变化并且已知之前表现良好,我们可以在部署过程中节省一些时间。例如,要在 R 中保存一个模型,我们可以使用以下命令:
使用 saveRDS()
和 readRDS()
函数:此方法允许您使用 saveRDS()
函数将任何 R 对象(包括机器学习模型)保存到文件中,并使用 readRDS()
函数重新加载它。
使用 save()
和 load()
函数:save()
函数允许您将多个 R 对象(包括模型)保存到二进制格式的文件中,可以使用 load()
函数加载这些文件。
使用特定包的函数:R 中的某些机器学习包提供了用于保存和加载模型的专用函数。例如,如果你正在使用 caret
包,你可以使用 saveModel()
和 loadModel()
函数。
在下一个动手示例中,我们将利用加载时的高级分析连接并创建一个简单的 K-means 聚类模型。首先,我们应该确保我们的 R 环境正在运行,并且 Sales Multi Table.xlsx
在 Qlik 应用程序中已加载,并带有准备好的数据模型。
在以下示例中,我们希望根据产品类别、销售额和平均折扣创建聚类,以检查不同的产品类别与给定的折扣相比会产生怎样的销售额。我们还将创建一个切片器来控制显示的聚类数量。
我们将首先为我们的应用程序创建一个简单的布局。我们将向工作表添加散点图对象、柱状图、筛选面板、变量切片器和两个关键绩效指标(KPI)对象。它应该看起来像以下屏幕截图:
图 7.2:聚类示例布局
要添加用于变量输入的切片器,需要安装仪表板扩展包。创建一个名为 clusters
的变量,并将其默认值设置为 4
。变量及其输入的设置分别在下述屏幕截图中进行展示:
图 7.3:变量设置
图 7.4:变量输入设置
接下来,我们配置我们的散点图并开始创建我们的聚类模型。首先添加 ProductName
作为维度,sum(Sales)
作为 x 轴度量,avg(Discount)
作为 y 轴度量。这将产生以下图表:
图 7.5:具有维度和度量的散点图
我们希望使用 R 的聚类模型来定义气泡颜色。让我们先选择 外观 - 颜色和图例。关闭自动着色并选择 按表达式 颜色。
在 表达式 字段中输入以下公式:
R.ScriptEval('
q$id <- 1:nrow(q);
F2 <- q[order(q$sales,q$discount),];
F3 <- data.frame(sales=F2$sales ,discount=F2$discount);
rows <- nrow(F2);
if(rows >= $(clusters)){
set.seed(5);
clusterdata <- kmeans(F3,$(clusters),nstart = 20);
df <- data.frame(rowid=F2$id,data=clusterdata$cluster);
out <- df[order(df$rowid),];
}else{
out$data <- c(rep(1,rows))
}
out$data',
Sum(Sales) as sales,
avg(Discount) as discount)
上述代码以 R.ScriptEval
函数开始,它告诉 Qlik 引擎表达式应该使用高级分析连接执行。R
是连接名称,ScriptEval
是本例中使用的函数。总共,以下表达式类型由 R 服务器端 扩展 (SSE) 支持:
函数名称 | 函数类型 | 参数类型 | 返回类型 |
---|---|---|---|
ScriptEval | 标量,张量 | 数值 | 数值 |
ScriptEvalStr | 标量,张量 | 字符串 | 字符串 |
ScriptAggr | 聚合 | 数值 | 数值 |
ScriptAggrStr | 聚合 | 字符串 | 字符串 |
ScriptEvalEx | 标量,张量 | 数值或字符串 | 数值 |
ScriptEvalExStr | 标量,张量 | 数值或字符串 | 字符串 |
ScriptAggrEx | 聚合 | 数值或字符串 | 数值 |
ScriptAggrExStr | 聚合 | 数值或字符串 | 字符串 |
ScriptEvalEx | 标量,张量 | 数值或字符串 | 数值 |
表 7.1:R SSE 支持的函数
在初始函数调用之后,我们可以编写实际的 R 代码。在上面的例子中,我们使用 k-means 函数计算每个产品的聚类数。最后两行是从 Qlik 传递到 R 环境的数据。Qlik 引擎创建了一个名为 q 的数据框,其中包含发送的数据。在这种情况下,它包含我们的聚合销售额 q$sales
和我们的折扣 q$discount
。我们使用之前创建的变量聚类来描述代码中的聚类数量。以下是对代码的逐步分解:
-
q$id <- 1:nrow(q)
: 这一行在q
数据框中创建了一个名为id
的新列,并给它分配从1
到0071
行数的值。这个列用于在排序和聚类过程中保留原始行顺序。 -
F2 <- q[order(q$sales, q$discount), ]
: 这里,q
数据框根据sales
列按升序排序,然后在每个sales
值内部,根据discount
列排序。排序后的数据存储在F2
数据框中。 -
F3 <- data.frame(sales = F2$sales, discount = F2$discount)
: 这行代码创建了一个新的F3
数据框,其中只包含来自F2
的sales
和discount
列。这实际上是从这两个列中提取数据以进行进一步处理。 -
rows <- nrow(F2)
: 这行代码计算F2
数据框中的行数,并将其分配给rows
变量。 -
if(rows >= clusters) { ... } else { ... }
: 这是一个 if-else 语句,它检查F2
中的行数是否大于或等于clusters
变量的值。如果是,则执行聚类;否则,将默认值1
分配给所有行。 -
set.seed(5)
: 这行代码为聚类算法的可重复结果设置了一个种子值。在这种情况下,使用的是5
这个种子值。 -
clusterdata <- kmeans(F3, clusters, nstart = 20)
: 这行代码将 k-means 聚类算法应用于F3
数据框。clusters
变量确定要形成的聚类数量,而nstart = 20
指定算法将以不同的初始聚类分配重新启动的次数。 -
df <- data.frame(rowid = F2$id, data = clusterdata$cluster)
: 在这里,创建了一个新的df
数据框,包含两个列,rowid
和data
。rowid
列包含来自F2
的原始行标识符,而data
列包含从clusterdata
对象获得的聚类分配。 -
out <- df[order(df$rowid), ]
: 这行代码根据rowid
列对df
数据框的行进行排序,以原始行顺序重新排列。排序后的数据框存储在out
变量中。 -
out$data
: 最后,这行代码从out
数据框中检索data
列,它代表聚类分配或每行的默认值1
。
Qlik 从out
数据框中获取数据字段,并将值分配给每个产品名称。然后,我们可以使用聚类编号作为我们的散点图中的颜色维度。
要获得可见的结果,我们应该禁用表达式是颜色代码设置,并选择发散类别作为颜色方案。具有五个聚类(您可以使用切片器将变量值设置为五)的结果应类似于以下截图:
图 7.6:以聚类为颜色的散点图
如您所见,我们有五组具有相似特征的项目,这些特征包括总销售额和平均折扣。如果将鼠标悬停在单个气泡上,可以看到聚类编号。
注意
始终鼓励使用主项。在生产环境中,聚类应作为主项创建。这样,对模型所做的更改将继承到所有图表中。
作为最后一步,我们可以完成我们的布局。将sum(Sales)和avg(Discount)插入 KPI 对象中,并将一些维度添加到筛选面板中。最后,将按产品名称划分的销售数据添加到柱状图中。您应该得到一个类似于以下截图的视图:
图 7.7:最终布局
我们现在已经成功使用 R 和高级分析集成创建了第一个模型。接下来,我们将更详细地查看调试和监控。我们将在第十章中实现一个具有稍微更高级用例的另一个模型。
监控和调试模型
在开发过程中调试模型是一个关键的开发步骤。在本地环境中,通过高级分析集成,我们有几种选项来调试我们的模型并了解其性能。
在交互式场景中,开始调试的第一个和最合逻辑的地方是查看图表输出。如果代码有问题,你将在这里得到错误信息。在以下示例中,我们可以看到环境中缺少名为forecast
的库:
图 7.8:图表中的错误信息
有时,你可能需要从实际的 R 代码中获得更全面的信息或调试打印。由于 R 作为服务运行,在执行过程中没有简单的方法来获取调试打印。然而,你可以使用文件写入。回到我们之前的Rserve
示例,添加以下代码将在我们的Rserve
主文件夹中生成一个名为debug.txt
的文件(添加的代码用粗体标出):
R.ScriptEval('
q$id <- 1:nrow(q);
F2 <- q[order(q$sales,q$discount),];
F3 <- data.frame(sales=F2$sales ,discount=F2$discount);
rows <- nrow(F2);
write(c("----------------"),file="debug.txt",append=TRUE);
summary<-summary(q);
head<-capture.output(head(q))
write(summary,file="debug.txt",append=TRUE);
write(c("----------------"),file="debug.txt",append=TRUE);
write(head,file="debug.txt",append=TRUE);
write(c("----------------"),file="debug.txt",append=TRUE);
if(rows >= $(clusters)){
set.seed(5);
clusterdata <- kmeans(F3,$(clusters),nstart = 20);
df <- data.frame(rowid=F2$id,data=clusterdata$cluster);
out <- df[order(df$rowid),];
}else{
out$data <- c(rep(1,rows))
}
out$data',
Sum(Sales) as sales,
avg(Discount) as discount)
以下代码将使用capture.output
函数打印q
数据框的摘要及其样本:
----------------
Min. : 348.8
1st Qu.: 6491.4
Median : 10984.5
Mean : 23157.8
3rd Qu.: 25525.6
Max. :408674.5
Min. : 1.224
1st Qu.: 11.709
Median : 28.048
Mean : 47.583
3rd Qu.: 52.524
Max. :609.970
Min. : 1
1st Qu.:20
Median :39
Mean :39
3rd Qu.:58
Max. :77
----------------
sales discount id
1 6833.144 15.36303 1
2 7815.963 11.11661 2
3 13523.793 15.85746 3
4 24966.158 41.04122 4
5 3633.208 11.70914 5
6 15295.435 45.96056 6
----------------
注意
如果需要定义文件路径,可以在文件参数中定义。如果没有定义路径,文件将被写入到Rserve
的主目录。一个示例路径是C:\Program Files\R\R-4.3.0\library\Rserve\libs\x64
。
如果需要调试桥接组件的操作,服务器端扩展的根目录下的/logs
文件夹中存储有日志文件。日志文件是按天创建和存储的。如果代码执行有问题,这些日志文件是开始调试的好方法。你还可以使用这些日志文件监控返回的数据和执行时间。以下是在我们的聚类示例执行期间编写的部分样本输入:
2023-05-30 21:12:10.3865 INFO EvaluateScript called from client (ipv6:[::1]:49924), hashid (38116153)
2023-05-30 21:12:10.3865 DEBUG EvaluateScript header info: AppId (bedcb600-18c3-4e6e-a1dc-55562ac21e48), UserId (UserDirectory=QMI-QS-06C0; UserId=qmi), Cardinality (77 rows)
2023-05-30 21:12:10.3865 INFO EvaluateScript call with hashid(38116153) got Param names: sales discount
2023-05-30 21:12:10.3865 DEBUG Evaluating R script, hashid (38116153):
q$id <- 1:nrow(q);
F2 <- q[order(q$sales,q$discount),];
F3 <- data.frame(sales=F2$sales ,discount=F2$discount);
rows <- nrow(F2);
write(c("----------------"),file="debug.txt",append=TRUE);
summary<-summary(q);
head<-capture.output(head(q))
write(summary,file="debug.txt",append=TRUE);
write(c("----------------"),file="debug.txt",append=TRUE);
write(head,file="debug.txt",append=TRUE);
write(c("----------------"),file="debug.txt",append=TRUE);
if(rows >= 4){
set.seed(5);
clusterdata <- kmeans(F3,4,nstart = 20);
df <- data.frame(rowid=F2$id,data=clusterdata$cluster);
out <- df[order(df$rowid),];
}else{
out$data <- c(rep(1,rows))
}
out$data
2023-05-30 21:12:10.4115 INFO Rserve result: 77 rows, hashid (38116153)
2023-05-30 21:12:10.4115 DEBUG Took 23 ms, hashid (38116153)
上述日志条目首先为我们提供了来自 Qlik 引擎的传入请求的一些信息。它详细说明了哪个用户正在调用以及从哪个应用程序。它还告诉我们数据的基数。当评估性能时,这些信息很重要。
接下来,我们获取从 Qlik 传递的函数和参数信息。如果启用了DEBUG-level
,它还会将整个代码打印到日志中。最后,我们获取关于总执行时间和返回行数的信息。这些日志条目是评估模型性能的好起点。更全面的性能指标可以写入模型代码,并使用本节之前描述的方法进行评估。
摘要
在本章中,我们更详细地探讨了使用高级分析集成和本地环境中的服务器端 R 扩展来创建和部署模型。在第五章中完成了初始环境设置之后。
我们在本章的开始部分通过熟悉利用高级分析集成的两个概念来开启我们的旅程。然后,我们深入研究了即时数据分析用例,并创建了一个与 R 实时集成的 k-means 聚类示例。
我们构建了一个简单的仪表板来支持我们的分析,并深入研究了高级分析集成的语法。在本章的后半部分,我们学习了如何在本地环境中调试和监控我们的模型。
在下一章中,我们将我们的重点转向 Qlik AutoML。我们将学习与 AutoML 一起使用的实现模型,以及如何在 Qlik Cloud 和本地环境中利用这个工具。我们还将学习如何使用 AutoML 部署和监控模型。
第八章:利用 Qlik AutoML
Qlik AutoML 利用人工智能和自动化的力量,让所有技能水平的用户都能构建和部署机器学习模型,而无需广泛的编码或数据科学背景。通过自动化重复性任务并提供智能推荐,Qlik AutoML 简化了整个机器学习工作流程,使其对更广泛的受众变得可访问。
在本章中,我们将深入探讨 Qlik AutoML 的世界,了解其功能、优势和实际应用。我们将全面概述支持 Qlik AutoML 自动化机器学习过程的底层概念和技术。此外,我们将指导您在 Qlik 生态系统中逐步实现 AutoML 模型,突出其与 Qlik Sense 分析平台的无缝集成。
在本章中,我们将涵盖以下主题:
-
Qlik AutoML 的功能
-
在云环境中使用 Qlik AutoML
-
使用 Qlik AutoML 创建和监控机器学习模型
-
将 Qlik AutoML 连接到本地环境
-
使用 Qlik AutoML 的最佳实践
Qlik AutoML 的功能
Qlik AutoML 是 Qlik Sense 分析平台中的一个工具,它自动化了构建和部署机器学习模型的过程。它简化了机器学习工作流程,并允许用户创建预测模型,而无需深入了解数据科学或编程。Qlik AutoML 的一些关键特性包括以下内容:
-
自动模型选择:Qlik AutoML 根据数据和预测任务自动选择最佳的机器学习算法,从而节省用户手动探索和比较不同算法的时间。
-
超参数调整:Qlik AutoML 优化所选机器学习模型的超参数,以提高其性能和准确性。超参数调整有助于微调模型的行为,使其在预测方面更加有效。
-
交叉验证:Qlik AutoML 使用交叉验证技术来评估模型的性能。它将数据分成多个子集,并在不同的组合上训练和测试模型,从而提供更稳健的性能指标。
-
模型评估:Qlik AutoML 提供各种性能指标来评估模型,例如准确率、精确率、召回率和 F1 分数。这些指标帮助用户评估模型的预测能力,并选择最适合其用例的最佳性能模型。
-
模型部署:一旦模型构建并选定,Qlik AutoML 就可以在 Qlik Sense 环境中轻松部署。用户可以将预测模型无缝集成到现有的 Qlik 应用和仪表板中,以实现实时洞察和决策。
注意
一些功能(包括超参数优化和预测 API)将需要 Qlik AutoML 的付费级别。此外,部署数量、并发任务和数据集限制由许可证级别定义。具体的许可证级别限制应由 Qlik 销售部门核实。
Qlik AutoML 旨在使机器学习民主化,并赋予业务用户利用高级分析能力的能力,而无需广泛的技术专业知识。在第四章中,我们探讨了创建良好的机器学习解决方案的一般概念。
如您从那章中记得的,Qlik AutoML 可以解决三种类型的机器学习问题:
-
二元分类:任何可以用是或否回答的问题
-
多类分类:可能有多个结果选择的问题
-
回归/数值型:预测未来某个点的数值
Qlik AutoML 作为 Qlik Cloud 服务的一部分提供。在下一节中,我们将熟悉从我们的训练数据中获得部署、生产就绪模型的实际过程。
在云环境中使用 Qlik AutoML
使用 Qlik AutoML 部署机器学习模型时,有几个步骤。这些步骤在下图中展示:
图 8.1:AutoML 工作流程
如您从我们前面的章节中记得的,每个机器学习项目的第一步是定义业务问题和问题,然后是数据清洗、准备和建模所需的步骤。通常,数据清洗和转换部分可以占用项目 80-90%的时间。
一旦我们有了机器学习准备好的数据集,我们将继续创建机器学习实验。
在自动化机器学习中,对特定数据集和目标的机器学习算法进行训练的过程是自动化的。当您创建一个实验并加载您的数据集时,系统会自动检查并准备数据以供机器学习使用。它为您提供了关于每一列的统计信息和洞察,有助于选择目标变量。一旦开始训练,多个算法分析数据,寻找模式。
在训练过程完成后,您可以使用分数和排名来评估生成的机器学习模型的性能。通过调整参数并重复训练,您可以生成多个模型版本。在仔细评估选项后,您可以选择在您的数据集上表现最佳的模型。一个实验可以有多个版本,每个版本使用一个或多个算法,一个实验可以导致多个机器学习部署。
简单来说,在实验阶段,我们将微调模型并尝试达到最佳可能的准确度。一旦我们对模型满意,我们就可以将其部署到生产环境中,并开始在我们的分析中使用它。我们将在下一节的动手示例中逐一介绍这些步骤。
使用 Qlik AutoML 创建和监控机器学习模型
在本节中,我们将使用 Qlik AutoML 创建一个实际实现。我们将利用本书中已经使用过的著名 Iris 数据集。Iris 数据集的数据准备部分已经完成,因此我们可以直接进入模型训练和实验部分。
注意
您可以在本书的 GitHub 仓库中找到本例中使用的数据集。
注意
只有拥有专业权限的用户才能创建实验。这是许可证级别的一个限制。
假设我们已将iris
数据集上传到我们的云租户。现在,我们将开始定义一个业务问题。这个问题定义了我们希望从机器学习模型中实现的目标。
如我们所知,Iris 数据集包含了三种不同品种的 Iris 花的四个特征的测量值。这些特征如下:
-
花瓣宽度: 花瓣的宽度
-
花瓣宽度: 花瓣的宽度
-
花瓣长度: 花瓣的长度,这些是花内部五彩斑斓的叶状结构
-
花瓣宽度: 花瓣的宽度
数据集包含 150 个实例或样本,其中每种 Iris 品种(setosa
、versicolor
和virginica
)各有 50 个样本。为了定义一个机器学习问题来预测 Iris 数据集中的物种,我们将将其构建为一个多类分类问题。以下是我们将在调查之前形成的样本问题:
给定花瓣长度、花瓣宽度、花瓣长度和花瓣宽度的测量值,我们能否准确地将 Iris 花的品种分类为 setosa、versicolor 或 virginica?
在这种情况下,机器学习任务涉及训练一个模型来学习输入特征(花瓣长度、花瓣宽度、花瓣长度和花瓣宽度)与相应的输出类别(setosa
、versicolor
和virginica
)之间的模式和关系。目标是开发一个预测模型,能够根据它们的测量值,准确地将新的 Iris 花实例分类为三种品种之一。AutoML 将根据选定的目标和变量为我们选择表现最佳的模型。
我们将通过创建一个新的机器学习实验来开始实际的模型创建。为此,选择+ 添加新 → 新 ML 实验,如图下所示:
图 8.2:一个新的机器学习实验
将打开一个新窗口。为您的实验插入一个名称,并选择一个空间。在我的例子中,我将实验命名为Iris exp
。选择创建以继续。
然后,您可以选择一个用于训练的数据集。选择我们之前上传到我们的租户的iris.csv
。将打开一个预览窗口。在这个窗口中,我们将定义我们的目标字段。它还将给我们提供关于数据集的重要信息。您应该看到一个类似于以下预览窗口:
图 8.3:机器学习实验向导中的模式视图
您目前处于species
字段的String
和Float (Double)
字段的Float (Double)
。
所有列都已识别为数值
或分类
字段。如果需要,可以分别为每个字段进行更改。我们还可以从洞察
列中看到,我们的“物种”特征已被自动进行独热编码。如果有任何与某些特征相关的警告,我们也可以看到。以下信息在洞察
列中展示:
-
常数:该列的所有行都具有相同的值。该列不能用作目标或包含的特征。这是 Qlik AutoML 中预设的限制,以防止出现错误的结果。
-
独热编码:特征类型为分类,且该列有少于 14 个唯一值。
-
影响编码:特征类型为分类,且该列有 14 个或更多唯一值。
-
高基数:该列有太多唯一值,如果用作特征可能会对模型性能产生负面影响。该列不能用作目标。
-
null
值。该列不能用作目标或包含的特征。 -
代表性不足的类别:该列有一个少于 10 行的类别。列不能用作目标,但可以作为特征包含在内。
在选择我们的目标字段之前,我们可以将我们的视图更改为数据视图。您可以从数据预览区域右上角进行此操作。您应该看到以下视图:
图 8.4:机器学习实验向导中的数据视图
在此视图中,我们可以更深入地研究数据内容。我们将看到表示每个数值字段中数据分布的迷你图表,以及分类字段中的分布。我们还将获得有关唯一和null
值的信息。
现在让我们切换回模式视图,并将我们的species
特征作为目标选择。为此,选择species
,如以下截图所示:
图 8.5:目标选择
所有其他特征都将自动包含在我们的实验中。在这种情况下,我们希望保留所有特征,但通常我们可能想要删除一些字段。在右侧,我们可以看到关于实验的摘要信息:
图 8.6:实验摘要
首先,我们得到训练数据的摘要。我们将看到数据集中的总单元格数、列数和行数,以及有多少被包含在实验中。在我们的案例中,所有数据都被包含在内,因为我们决定保留实验中的所有特征。
现在,我们可以看到一些关于我们的目标的信息。我们也可以在运行实验之前更改目标。在这种情况下,我们的目标是 species
。下一节将给出所选特征的摘要。我们将选择数据集中的所有特征作为实验的一部分。
在算法部分,我们可以看到 AutoML 根据我们的目标字段将我们的模型识别为多类分类。如果我们想的话,我们可以决定排除实验中的一些算法。通常,建议保留所有包含的算法。
在模型优化部分,我们可以启用超参数优化并设置实验运行优化的最大时间。启用此选项时,超参数优化将创建一系列模型,通过系统地搜索算法超参数的最佳组合,以最大化模型性能。如果启用此选项,实验可能需要很长时间才能运行,但结果可能更准确。
最终,我们将得到 AutoML 将为我们处理的预处理步骤的提醒。具体如下:
-
特征中至少有 50% 的值被填充的
null
值。根据每个特征的数据类型,AutoML 选择MEAN
或OTHER
填充。 -
编码分类特征: AutoML 自动将你的分类特征转换为数值,以便算法能够有效地处理和从你的分类训练数据中学习。对于有 13 个或更少值的特征,AutoML 使用独热编码。对于有 14 个或更多值的特征,AutoML 使用影响编码。
-
特征缩放: AutoML 使用特征缩放来规范化训练数据中独立变量的范围。AutoML 计算每一列的均值和标准差,然后计算每一行与均值的标准差数。
-
自动保留训练数据: AutoML 从你的训练数据集中提取 20% 的数据用于最终模型评估。AutoML 在模型训练完成后才会保留这些数据,用于评估模型的性能。保留数据的优点是,在训练过程中模型不会看到这些数据(与交叉验证数据不同),因此非常适合验证模型性能。
-
五折交叉验证:在应用之前的预处理步骤之后,AutoML 将剩余的训练数据随机排序成五个不同的组,称为“折”,用于交叉验证。AutoML 将每个折与使用其他四个折训练的模型进行测试。换句话说,每个训练模型都在模型从未见过的数据上进行了测试。
我们现在已经准备好了实验设置,可以通过选择 运行实验 来继续。实际的模型预处理和训练阶段将开始;完成需要一段时间。实验完成后,我们将看到 模型指标 屏幕,如下面的截图所示:
图 8.7:模型指标
我们可以看到,表现最好的模型是 XGBoost 分类算法,其 F1 Macro
得分为 0.967
。我们还获得了关于 F1 Micro
、F1 Weighted
和 Accuracy
得分的信息。我们在第一章中介绍了 F1 分数的含义。微、宏和加权 F1 分数之间的区别如下:
-
宏 F1 是每个类别的平均 F1 值,不进行加权(所有类别都同等对待)。
-
微 F1 是在整个混淆矩阵上计算的 F1 值。计算微 F1 分数等同于计算全局精确度或全局召回率。
-
加权 F1 对应于二分类 F1。它为每个类别计算,然后作为一个加权平均值组合,考虑每个类别的记录数量。
如您可能记得,准确度衡量模型平均上正确预测的频率。在我们的例子中,准确度得分为 0.967,这意味着我们的模型在 97% 的情况下是正确的。
在 超参数
下,我们还可以调查模型参数。对于我们的最佳模型,这些参数看起来如下:
图 8.8:XGBoost 分类超参数
这些旨在为我们提供关于模型的更详细信息。参数是算法特定的。
现在,我们将更仔细地研究 排列重要性 和 SHAP 重要性 图表。我们在 第一章 中探讨了这两个图表的基本概念。以下图显示了图表的示例:
图 8.9:排列重要性和 SHAP 重要性的图表
如您可能记得,排列重要性是衡量一个特征对模型整体预测重要性的度量。基本上,它描述了如果移除模型从该特征学习的能力,模型会受到怎样的影响。AutoML 使用 scikit-learn 工具包来计算排列重要性。
SHAP 重要性是一种用于解释机器学习模型预测的方法。它提供了关于每个特征对特定实例或一组实例预测贡献的见解。基本上,它表示一个特征相对于该行中的其他特征以及数据集的平均结果对单个行预测的影响。SHAP 重要性在行级别进行衡量,AutoML 使用各种算法来计算 SHAP 重要性分数。
从前面的图表中,我们可以看到花瓣长度是我们预测中的一个重要特征,无论是从排列还是 SHAP 重要性来看。在多类问题中,我们还可以调查每个类的 SHAP 重要性。让我们通过类别来调查每个特征的 SHAP 值。使用 SHAP 图表上的下拉菜单更改图表类型,并选择按类别特征 SHAP。你应该会看到以下图表:
图 8.10:按类别 SHAP
从前面的图表中,我们可以看到花瓣长度可以用来区分setosa、versicolor和virginica。其他特征随后用于进一步确定物种。如果我们从下拉菜单更改图表类型,我们还可以看到每个特定类的 SHAP 重要性。
如果我们想更改我们的实验,我们可以选择配置 v2并修改其参数。在这种情况下,我们对我们的模型感到满意。要部署我们的模型,我们可以选择部署。如果我们对自动生成的模型不满意,我们可以为其提供一个名称并决定其所在的空间。AutoML 会在描述字段中自动填充有关模型的一些细节。确保启用实时 API 访问选项已启用,并选择部署。然后,从弹出窗口中选择打开,你应该会被重定向到我们新的机器学习模型。你应该会看到以下视图:
图 8.11:已部署的机器学习模型
在左侧,你可以看到一个已部署模型的架构图。这个架构图会告诉我们,当使用模型进行预测时,模型期望我们提供什么类型的数据。在右侧,我们可以看到我们模型的详细信息。其他两个标签页将提供关于手动运行预测和REST
端点连接性的信息。仔细查看这些信息,完成后返回架构视图。
我们可以通过选择创建预测并上传模型所需的 CSV 或其他数据文件来直接使用我们的模型。这样,我们的结果将作为文件存储在 Qlik Cloud 中。还有可能安排预测并动态命名结果文件。然而,更稳健地利用我们新模型的方法是通过数据连接器使用它。让我们接下来更详细地看看这一点。
对于我们的应用程序,我们将使用另一个名为iris_test.csv
的数据集。首先,将文件上传到 Qlik Cloud。创建一个新的 Qlik 应用程序,并将iris_test
数据添加到其中。现在,我们将id
字段添加到我们的测试数据中。为此,你可以使用以下代码:
iris:
LOAD
RowNo() as id,
sepal_length,
sepal_width,
petal_length,
petal_width
FROM [lib://<PATH TO DATAFILE>/iris_test.csv]
(txt, utf8, embedded labels, delimiter is ',', msq);
注意
我们的iris_test.csv
数据集是随机生成的,以模拟原始iris
数据集的特征,并不代表实际数据。它应仅用于演示目的。
现在,我们将创建与我们的部署机器学习模型的连接。在数据连接下选择创建新连接,然后选择Qlik AutoML。将打开一个如下视图:
图 8.12:机器学习模型的连接数据
从predictions
中选择我们的部署模型。选择包含 SHAP和包含错误,因为我们希望我们的结果表也包含这些列。SHAP 不是每个算法都可用,但选择它是良好的实践。如果不可用,它将不会出现在结果表中。在我们的情况下,这些值不可用。
在id
。这是一个将生成的预测和我们的原始数据联系在一起的字段。我们在之前的数据中生成了id
字段。为你的数据连接提供一个名称,然后点击保存。你应该在你的应用程序中看到一个新数据连接出现;让我们使用它。点击选择数据,如下截图所示:
图 8.13:在 AutoML 连接中选择数据
将出现数据选择向导,如下截图所示:
图 8.14:数据选择向导
在iris
。这是我们原始数据集,我们将用它来获取预测。在表部分下选择predictions
表。这是我们的结果表。没有预览可用,但你可以看到生成的脚本。选择插入脚本。我们现在可以看到我们的连接器生成了以下脚本:
[predictions]:
LOAD * EXTENSION endpoints.ScriptEval('{"RequestType":"endpoint", "endpoint":{"connectionname":"ML demos:Iris"}}', iris);
基本上,我们的连接器使用 API 将iris
表发送到我们的机器学习模型,并返回预测表。它以连接名称作为参数,并将我们的数据表(iris
)作为输入。我们现在可以加载我们的应用程序并调查数据模型查看器。你应该看到一个如下所示的数据模型:
图 8.15:数据模型
如我们所见,我们的连接器返回了一个与我们的原始数据表通过id
作为键连接的预测表。预测表包含实际预测、每行的可能错误消息以及每个鸢尾花物种的概率。
现在,我们将进一步调查我们的预测结果。创建一个新的工作表,并向其中添加以下元素:
-
一个过滤器面板,顶部包含所有我们的特征。
-
一个散点图,
Avg(petal_width)
在y轴上,Avg(petal_length)
在x轴上,Id
作为气泡。按维度着色,并选择species_predicted
作为着色维度。 -
包含所有特征的表格。
-
一个柱状图,
Count(species_predicted)
作为柱高,species_predicted
作为维度。 -
我们稍后将要配置的四个 KPI 对象。
-
四个变量输入,每个输入的左侧都有一个文本和图像容器。
您应该得到以下布局:
图 8.16:应用程序布局
注意
您可以在本书的 GitHub 仓库中找到完整的应用程序。
如您从结果中看到的那样,我们已经使用我们的模型成功预测了物种。如果我们查看散点图,似乎我们的模型给出了良好的结果,考虑到我们的数据是随机生成的。作为最后一步,我们将创建一个将利用我们模型 API 的模拟。
我们将首先创建以下变量:
v_sepal_length
v_sepal_width
v_petal_length
v_petal_width
将每个变量的默认值设为0
。由于我们已经创建了变量输入和标签,我们可以将变量分配到输入中,并将正确的标签输入到相应位置。最终您应该得到以下视图:
图 8.17:模拟视图
现在,我们将设置 KPI 对象。选择第一个 KPI,并将标签输入为Prediction
。在表达式字段中输入以下公式:
=endpoints.ScriptEvalExStr('NNNN','{"RequestType":"endpoint", "endpoint":{"connectionname":"ML demos:Iris","column":"species_predicted"}}',
v_petal_length as petal_length,
v_petal_width as petal_width,
v_sepal_length as sepal_length,
v_sepal_width as sepal_width
)
这种语法可能看起来很熟悉。我们在之前的 R 示例中使用了相同的原则。AutoML 连接器利用了高级分析集成语法。
通过高级分析集成,我们有两组脚本函数:
-
ScriptEval:在超立方体聚合后,指定列中的所有行都发送到连接器。期望的响应是单列。如果返回多个列,则将选择与输入行数相同的第一个列。返回列中的行必须与输入的顺序相同。
-
ScriptAggr
使用多个维度调用。
对于前面提到的两个集合,有四种基于数据类型的函数:
-
ScriptEval(Script, Field 1, [Field n])
: 输入字段和响应必须是数值。 -
ScriptEvalStr(Script, Field 1, [Field n])
: 输入字段和响应必须是字符串。 -
ScriptEvalEx(DataTypes, Script, Field 1, [Field n])
: 输入字段可以是字符串或数值,第一个参数是数据类型的字符串,响应必须是数值。 -
ScriptEvalExStr(DataTypes, Script, Field 1, [Field n])
: 输入字段可以是字符串或数值,第一个参数是数据类型的字符串,响应必须是字符串。
在前面的示例中,我们使用了ScriptEvalExStr
函数,并定义了输入字段的数据类型,因为它们是数值型的,但响应是字符串(数值字段为'NNNN'
)。
注意到我们的脚本还包含了要使用的连接的详细信息:
'{"RequestType":"endpoint", "endpoint":{"connectionname":"ML demos:Iris","column":"species_predicted"}}'.
连接名称指的是我们之前创建的数据连接器。我们还确定了要从模型中获取的列。在我们的例子中,它是species_predicted
。选择正确的返回值很重要。如果您在数据加载期间也使用了模型,您可以看到所有可能的字段——例如,从数据管理器中。
在我们脚本的最后部分,我们将变量值作为输入传递给我们的模型。名称应与我们的模型模式名称匹配。这就是为什么我们将使用as
运算符来重命名变量。
在配置 KPI 对象之后,你应该会看到setosa
作为一个值出现。由于我们所有的变量都被定义为0
,我们的模型将根据这些信息进行预测。
将以下配置添加到剩余的三个 KPI 对象中:
-
标签:Setosa
-
脚本:
=endpoints.ScriptEvalEx('NNNN','{"RequestType":"endpoint", "endpoint":{"connectionname":"ML demos:Iris","column":"species_setosa"}}', v_petal_length as petal_length, v_petal_width as petal_width, v_sepal_length as sepal_length, v_sepal_width as sepal_width )
-
标签:Versicolor
-
脚本:
=endpoints.ScriptEvalEx('NNNN','{"RequestType":"endpoint", "endpoint":{"connectionname":"ML demos:Iris","column":"species_versicolor"}}', v_petal_length as petal_length, v_petal_width as petal_width, v_sepal_length as sepal_length, v_sepal_width as sepal_width )
-
标签:Virginica
-
脚本:
=endpoints.ScriptEvalEx('NNNN','{"RequestType":"endpoint", "endpoint":{"connectionname":"ML demos:Iris","column":"species_virginica"}}', v_petal_length as petal_length, v_petal_width as petal_width, v_sepal_length as sepal_length, v_sepal_width as sepal_width )
如您可能已经注意到的,我们的脚本在所有 KPI 中几乎相同。我们通过改变模型返回列的值来定义输出。这样,我们将获得每个物种的概率。
尝试修改输入字段中的值,你应该会实时获得每个物种的预测和概率。
我们现在已经成功完成了应用程序,并学习了如何在云环境中使用 Qlik AutoML,同时使用加载时和实时集成。在下一节中,我们将探讨设置本地环境以与 Qlik AutoML 集成的过程。
将 Qlik AutoML 连接到本地环境
Qlik AutoML 是一个与云租户紧密集成的云工具。然而,可以利用本地环境的特性。需要注意的是,由于 Qlik AutoML 仍然在云环境中运行,所有数据也会传递到 Qlik Cloud 租户。如果数据不能离开本地环境,则此方法不适用。连接是加密和安全的,Qlik Cloud 拥有所有主要的安全认证。还需要注意的是,此方法将需要有效的 Qlik Cloud 许可证。
注意
关于 Qlik Cloud 安全和合规性的更多信息可在 Qlik 信任网站上找到:www.qlik.com/us/trust
我们可以在以下图中看到将 AutoML 与本地环境集成的基本架构:
图 8.18:Qlik AutoML – 本地与 SaaS 集成
在前面的图中,我们的本地环境位于底部。在这个架构中,我们将在这个本地环境中处理大部分数据加载。在准备了一个机器学习准备好的数据集之后,我们可以利用 Qlik 数据网关、Qlik CLI 或手动上传到云租户。这些数据可以使用来自其他云源的数据进行补充。当我们的训练数据在云中时,训练机器学习模型将涉及上一节中相同的流程。还可以使用任务、应用程序自动化和 Qlik CLI 自动化整个流程。一旦模型训练完成,我们就可以直接从本地环境利用预测 API。
关于实现所述环境的特定细节在每个组织中都不同。前面的图可以作为粗略的参考,但具体的实现应针对每个案例进行规划。
本节的目标是提供一些关于在混合场景中使用 Qlik AutoML 的想法。在下一节中,我们将探讨一些使用 Qlik AutoML 的最佳实践。
Qlik AutoML 的最佳实践
在使用 Qlik AutoML 时,有一些通用的指南和最佳实践。遵循这些实践和原则将使您更容易获得准确的结果并处理机器学习项目流程。一般原则包括以下内容:
-
定义问题:明确定义您使用 Qlik AutoML 尝试解决的问题。确定您想要预测的变量,并了解可用的数据。这是最重要的最佳实践之一。
-
准备和清理数据:确保您的数据适合分析。这可能涉及清理缺失值、处理异常值、转换变量、清理重复项,并确保数据格式良好。这通常是机器学习项目中耗时最长的部分。
-
特征工程:从原始数据中探索和创建有意义的特征。Qlik AutoML 可以自动化一些特征工程任务,但仍然重要的是要了解您的数据并将领域知识应用于生成相关特征。
-
可解释性和可说明性:理解和解释您模型的成果。Qlik AutoML 提供了解释生成的模型的工具,并了解不同特征对预测的贡献。
-
验证和评估:使用适当的评估指标来评估您模型的性能。Qlik AutoML 可以提供默认指标,但始终在可能的情况下交叉验证结果。
-
监控和维护:持续监控生产中模型的性能。当有新数据可用时,定期更新和重新训练模型。
-
迭代过程:机器学习是一个迭代过程,因此请准备好根据反馈和新见解对您的模型进行优化和改进。
Qlik AutoML 是一个强大的工具,可以以自动化的方式构建机器学习模型,并且它可以使最终用户更容易理解复杂的模型。在利用该工具时,并牢记之前描述的基本原则,组织可以从他们的数据中获得更多。记住,没有任何机器学习工具是一个可以解决世界上所有商业问题的魔法盒子。你准备的问题定义和训练数据越好,从模型中获得的结果就越准确。
摘要
在本章中,我们发现了 Qlik AutoML 的用法。我们首先学习了该工具将为用户带来什么以及它的关键特性是什么。我们使用著名的 Iris 数据集,用 Qlik AutoML 构建了我们第一个机器学习模型。在本节中,我们发现了如何运行实验并从实验中部署模型。我们还发现了如何在 Qlik 应用程序中利用模型,无论是在数据加载期间还是在实时中。我们从不同的指标中学习了我们的模型表现如何。
在本章的后半部分,我们快速浏览了本地环境。我们学习了如何在混合场景中利用 Qlik AutoML 以及如何在这些用例中设置我们的环境。我们还发现了与 Qlik AutoML 一起使用的最佳实践。
在下一章中,我们将深入探讨数据可视化。我们将发现可视化机器学习相关数据的技术,并调查一些较少使用的图形类型的使用。我们还将了解常见的图表和可视化,并发现一些可以帮助我们充分利用数据的设置和配置。
第九章:适用于机器学习解决方案的高级数据可视化技术
在数据分析和机器学习快速发展的世界中,有效地可视化复杂信息的能力变得至关重要。随着组织努力从大量数据中提取有价值的见解,他们需要能够将原始数字转换为有意义的视觉表示的强大工具。
在本章中,我们深入探讨机器学习解决方案背景下的高级数据可视化技术。我们探讨 Qlik 的复杂视觉分析能力如何增强对机器学习模型及其输出的理解和解读。
本章将为您提供利用 Qlik 的视觉分析能力以获得更深入见解、做出明智决策并在机器学习和大数据时代推动可操作成果所需的知识和技能。
本章涵盖的主要主题如下:
-
可视化机器学习数据
-
Qlik 中的图表和可视化类型
可视化机器学习数据
在可视化机器学习数据时,应考虑几个重要方面,以确保有效沟通和解读洞察力。以下应考虑的事项(这些不是特定工具的):
-
理解数据:深入了解您正在处理的数据。分析其结构、分布和关系,以识别关键变量和模式。这种理解将指导您选择适当的可视化技术。
-
选择合适的可视化技术:选择最能代表数据特征和关系的可视化技术。常见的技术包括散点图、折线图、柱状图、直方图、热图和网络图。选择能够有效传达您想要传达的信息的技术。在下一章中,我们将发现 Qlik 提供的不同可视化。
-
简化并减少复杂性:尽可能使可视化简单明了。避免杂乱和过多的细节,这可能会使观众困惑。突出最重要的见解,并使用颜色和注释等视觉线索来引导观众的注意力。
-
使用适当的视觉编码:利用视觉编码有效地表示数据的各种属性。利用位置、长度、角度、颜色、大小和形状来编码变量并传达有意义的信息。确保所选编码准确代表数据属性。
-
考虑缩放和归一化:如果数据具有广泛的值范围或不同的尺度,请考虑缩放或归一化数据以确保准确的可视化。如标准化或最小-最大缩放等缩放技术可以帮助将数据调整到可比较的范围内,以便进行适当的可视化。
-
利用交互式可视化:将交互性融入你的可视化中,使用户能够动态地探索数据。允许缩放、平移、过滤和选择感兴趣的数据点。交互式可视化增强了用户对数据的参与度和理解。使用 Qlik 工具时,交互性是内置的,因此无需额外步骤。
-
提供背景和解释:包括清晰的标签、标题和轴描述,以提供背景和指导解释。解释可视化数据的含义,并提供相关的背景信息。添加标题、图例或工具提示,以帮助观众理解视觉元素。
-
考虑多个视图或多个可视化:有时,通过多个视图或多个可视化来呈现数据可以提供更全面的理解。结合不同的技术,如叠加多个图表或使用小 multiples,以揭示数据的各个方面。在 Qlik Sense 中,考虑应用程序的结构以及如何利用工作表将数据划分为信息视图。
-
测试和迭代:通过不同的用户或利益相关者测试可视化,以收集反馈并提高其有效性。根据用户反馈迭代设计,并细化可视化以确保它们清晰、有洞察力,并达到预期的目标。
-
针对观众调整可视化:在设计可视化时,考虑观众的知识和专业知识。根据观众的理解调整可视化的细节、技术性和复杂性。根据需要提供解释和背景信息。
任何数据可视化的一个重要方面是有效使用颜色。在设计数据可视化的颜色方案时,应考虑以下方面:
-
选择有目的的颜色调色板:选择与可视化目的和上下文相符的颜色调色板。考虑使用定性颜色方案(为不同类别使用不同的颜色)、顺序颜色方案(有序数据的颜色渐变)或差异颜色方案(突出极端或差异)。您可以使用颜色选择器或在线颜色调色板生成器来找到和谐且视觉上令人愉悦的颜色组合。
-
区分类别:在表示不同的类别或组时,使用不同的颜色以确保清晰的区分。避免使用可能引起混淆或难以区分类别的相似色调。确保所选颜色在视觉上可区分,即使对于色觉缺陷者也是如此。
-
使用颜色的一致性:在整个可视化中保持颜色使用的一致性。在整个可视化中为同一类别或变量分配相同的颜色,以提供视觉连续性并帮助解释。一致性有助于用户在颜色和相应的数据元素之间建立心理联系。
-
突出关键元素:利用颜色来吸引对重要元素或特定感兴趣的数据点的注意。使用对比或鲜艳的颜色来强调。例如,可以突出异常值、最大值和最小值,或满足特定标准的数据点,使它们在视觉上更加突出。
-
考虑颜色象征意义:注意不同文化或环境中颜色所固有的象征意义。在不同的背景下,颜色可能有不同的含义或象征。考虑文化敏感性,并确保颜色选择不会无意中传达误导或不恰当的信息。
-
保持可访问性:确保所选颜色对广泛的用户都是可访问的,包括那些有色彩视觉缺陷的用户。避免仅依靠颜色来传达信息。使用图案、标签或纹理等替代视觉线索来补充或替换颜色区分。ColorBrewer 和可访问颜色调色板生成器等工具可以帮助创建符合可访问性指南的颜色调色板。
-
平衡视觉层次:使用颜色在可视化中建立视觉层次。使用颜色的不同色调或强度来表示不同的重要性或显著性水平。较浅的颜色可用于背景或不太重要的元素,而较深或较重的颜色可用于关键元素或主要焦点区域。
-
限制颜色数量:在单一的可视化中避免使用过多的颜色,因为这可能导致视觉混乱和困惑。根据所表示的类别或变量的数量,将调色板限制在可管理的不同颜色数量内。如有必要,考虑使用大小、形状或纹理等额外的视觉编码技术来补充颜色区分。
注意
Qlik 应用程序的颜色主题和渐变可以通过主题定义,或者直接放入应用程序中。如果有应该跨多个应用程序使用的通用颜色主题,建议创建一个自定义主题。
现在我们已经学习了一些关于数据可视化和颜色的基本原则,在下一节中,我们将更详细地探讨 Qlik Sense 提供的一些图表。
Qlik 中的图表和可视化类型
在本节中,我们将更详细地探讨 Qlik 中的不同可视化类型。我们还将了解布局的一般设置。截至编写本章时,以下可视化类型得到支持(加粗的在本章中更详细地介绍):
图表:
-
条形图
-
箱线图
-
子弹图表
-
组合图表
-
分布图
-
仪表盘
-
直方图
-
折线图
-
地图
-
饼图
-
散点图
-
树状图
-
瀑布图
基于文本的可视化:
-
过滤面板
-
关键绩效指标(KPIs)
-
交叉表
-
表格
-
文本和图像
仪表板对象:
-
按钮
-
容器
注意
在本章中,我们只介绍原生可视化。可视化包和仪表板包中也有可用的可视化,包括 Qlik 支持的扩展对象。还可以创建完全定制的可视化扩展或使用社区创建的扩展。然而,这些内容超出了本书的范围。
条形图
条形图是最常见的可视化类型之一。通常用于比较多个值。维度轴表示比较的类别项目,而度量轴显示每个项目的值。条形图在处理离散或分类数据时特别有用。在机器学习环境中,条形图通常用于特征分析、模型评估或类别分布等。在我们之前的鸢尾花数据集示例中,我们使用条形图来表示预测的鸢尾花物种的分布。此图表如下所示:
图 9.1:表示预测的鸢尾花物种计数的条形图示例
此示例表示一个简单的条形图。更复杂的表示包括分组或堆叠的条形图,可以同时表示多个类别。分组条形图适用于比较,而堆叠条形图可以用来可视化构成总体的子类别的相互关系。
例如,分组条形图可以用来并列比较不同年份的销售和预测,而堆叠条形图可以用来分析不同产品类别的销售。在这种情况下,条形图的总高度是总销售量。
箱线图
箱线图,也称为箱线图,是理解数值数据分布和统计属性的有价值可视化工具。箱线图适用于比较数值数据组的范围和分布,用箱和须表示。须代表高和低参考值。箱线图可以组织大量数据并有效地可视化异常值。箱线图在机器学习数据中的典型用途包括数据探索、特征比较和异常值检测。以下示例表示显示预测物种平均花瓣长度分布的箱线图:
图 9.2:表示预测物种平均花瓣长度的箱线图示例
在 Qlik 中,您可以选择箱线图的预设,或者自己定义每个组件的公式。在前一个图中,我们可以看到一些异常值超出了触须,这些异常值由蓝色点表示。我们可以看到,versicolor 的花瓣长度箱和触须最长。这告诉我们,在我们模型中预测为 versicolor 的物种具有最大的花瓣长度分布。每个预测物种的平均花瓣长度在每个箱子中由一条水平线标记。
子弹图
子弹图是结合了柱状图和范围图特性的强大可视化工具。它们提供了紧凑且信息丰富的数据表示,因此对于比较实际值与目标值以及显示性能指标非常有用。子弹图使得比较和测量性能成为可能,并提供了丰富信息。这是一个根据目标比较性能的好图表。以下是一个子弹图的示例:
图 9.3:表示花瓣长度的子弹图示例
在这个例子中,我们将最大花瓣长度设置为目标,使用白色垂直线进行可视化。我们将颜色方案设置为表示目标 30%和 70%的标记,黑色条形图可视化了每个鸢尾物种的平均花瓣长度。
分布图
分布图,也称为密度图,是理解数据集中数值变量分布的有用可视化工具。它显示了数据在不同区间或箱中的概率密度。使用分布图,您可以直观地探索和理解机器学习数据的分布特性。它们提供了关于数值变量的形状、中心趋势和变异性的见解,有助于数据探索、特征工程和模型构建过程。分布图适用于比较数值数据组的范围和分布。以下是一个示例:
图 9.4:表示花瓣长度的分布图示例
在这个图中,我们可以看到花瓣长度的单个测量值用蓝色点标记,测量值的分布用灰色背景标记。我们可以轻松地看到数据的构建。在图中,单个测量值的气泡大小参数被调整为小于默认大小,以获得更清晰的图表。如果数据点很多,也可以启用抖动。这将使用不同的垂直位置将单个点分开。
直方图
直方图是一种常见的可视化技术,用于表示数值数据的分布。它们提供了对预定义区间或箱中值的频率或计数的洞察。它们适合于显示在区间或固定期间内数值数据的分布。数据被分成箱,每个条形代表每个箱中的频率。以下示例中,我们正在可视化加利福尼亚地区的房屋价值的频率和分布:
图 9.5:可视化房屋价值分布的直方图示例
在此示例中,我们可以看到直方图略微向左倾斜。这告诉我们,大多数房屋的价值在 10 万至 30 万美元之间,但仍有部分房屋价值高于这个范围。这些形成了右侧的长“尾巴”。我们还可以看到,平均而言,每个价格区间大约有 31 栋房屋。在 Qlik Sense 中,您可以修改柱子的数量和颜色等许多其他参数。在此示例中,柱子的数量已增加到 200,以获得更准确的结果。
地图
Qlik Sense 中的地图是一个非常灵活的可视化对象,可以用多种方式使用。地图可以包含多个图层,并在同一可视化中显示不同类型的信息。当数据基于地理时,利用地图的最佳和最自然的方式,但地图对象也可以用于在 SVG 图像等不同背景上可视化数据。Qlik Sense 中的地图支持多种坐标系,并且与 GeoAnalytics 连接器结合使用时,可以对数据进行进一步计算。以下示例展示了一个具有不同可视化的示例地图:
图 9.6:在具有渐变色彩方案的地图上绘制预测房屋价值示例
此示例在地图上可视化加利福尼亚州预测的房屋价值。每个点代表一栋房屋,颜色表示预测的价值。颜色越深,表示房屋越贵。热力图有助于在地图上可视化点的密度。在以下示例中,我们将单个房屋映射到热力图中:
图 9.7:绘制单个房屋的热力图示例
热力图上的较暗区域表示该区域房屋的密集度更高。将不同图层组合到可视化中是一种非常强大的展示地理数据的方式。
在下一个示例中,我们可以看到位于挪威道路网络 300 公里驾驶范围内的特斯拉超级充电站。驾驶范围是通过 GeoAnalytics 连接器计算的,并在地图上可视化:
图 9.8:显示挪威每个特斯拉超级充电站 300 公里驾驶范围的地图示例
如前图所示,地图是强大的可视化对象,并且强烈推荐与地理数据一起使用。在许多机器学习解决方案中,我们可以将结果放置在地图上。
散点图
散点图是一种数据可视化类型,显示两个数值变量之间的关系。它使用二维平面上的点表示单个数据点,其中一个变量绘制在 x 轴上,另一个变量绘制在 y 轴上。散点图可用于帮助识别模式、相关性或异常值,并协助选择特征、识别重要变量以及理解数据的行为。散点图也适用于数据的交叉验证和机器学习模型的验证。以下图例展示了使用鸢尾花数据集的散点图示例:
图 9.9:按花瓣宽度和长度绘制的鸢尾花物种散点图示例
在这个例子中,我们绘制了鸢尾花数据集的个体 ID,其中花瓣宽度在垂直轴上,花瓣长度在水平轴上。然后我们使用预测的物种作为颜色。这样我们可以在数据中看到清晰的模式。
如果数据点很多,散点图也是一种很好的可视化类型。如果数据点的数量超过最大值,它将自动切换到压缩视图。这个值可以在图表设置中调整。以下是一个压缩视图的示例:
图 9.10:散点图—压缩视图
压缩示例可视化了急诊室单位预测等待时间与实际测量等待时间之间的交叉验证。关系应该是线性的,但由于我们看到了一些异常值,我们知道在这种情况下,我们实际的模型仍需要进行优化。示例图中的压缩视图显示了 64,000 个数据点。
水流图
水流图是各种因素如何影响最终值的视觉表示。它们有助于理解数据集中正负变化的累积效应。虽然水流图常用于财务分析,但它们也可以用于分析和解释机器学习数据。当可视化 Qlik AutoML 模型的 SHAP 值时,水流图非常有用,以了解单个特征如何影响预测值。以下示例表示了加利福尼亚住房数据集的 SHAP 值:
图 9.11:水流图示例—SHAP 值
在这个例子中,我们可以看到中位数收入
和海洋接近度
对预测值有重大影响。这些特征的总体影响是负面的,但如果我们调查最高预测价格,我们可以看到这个群体的影响是正面的。这将在以下图中描述:
图 9.12:可视化并过滤了预测价格超过 300,000 美元的房屋的 SHAP 值
这样,我们可以研究不同变量如何影响预测和模型行为。瀑布图是处理这种情况的良好选择,因为它可以轻松地可视化各种因素如何贡献到一个最终值。
注意
我们将在下一章中通过使用加利福尼亚房价数据的全交互示例来介绍。
选择可视化类型
当涉及到数据可视化时,一个关键目标是有效地展示关系和模式,以便可以快速获得洞察。Qlik Sense 提供了一系列的视觉化和图表,以满足各种数据可视化需求。每个图表都有其独特的优势,以不同的方式表示数据,可以根据不同的分析目的进行定制。
在选择适合您数据的相关图表时,考虑您想要获得的特定洞察至关重要。了解您想要可视化的内容和您想要讲述的故事对于选择最合适的图表类型至关重要。不同的图表强调数据的不同方面,例如趋势、比较、分布或关系。
Qlik Sense 提供了广泛的可视化选项。每种图表类型都有独特的特性和功能,以满足特定的数据分析需求。例如,条形图适用于比较分类数据,而折线图适用于可视化随时间变化的趋势。散点图适用于展示两个变量之间的关系,而树状图可以有效地说明层次化的数据结构。
通过在 Qlik Sense 中仔细选择合适的图表类型,您可以利用每种可视化的优势,从数据中获得有意义的洞察。了解您的数据和您想要回答的问题将帮助您做出明智的决定,选择哪些图表来准确展示您的数据,并促进数据驱动的决策。
在上一节中,我们通过示例介绍了一些不常见的可视化类型,并学习了为什么这些图表适合可视化机器学习相关数据。我们没有涵盖所有图表,而且有很多选项可以调整所有可用的图表。熟悉不同选项的最佳方式是亲自尝试图表。在下一章中,我们将从头开始构建几个机器学习用例,并在构建过程中介绍一些图表设置。
摘要
可视化机器学习数据是数据分析过程中的关键步骤,它使你能够获得洞察力,识别模式,并有效地传达结果。在本章中,我们熟悉了不同的可视化方法和可视化机器学习数据的技术。在本章的开头,我们发现了创建良好可视化的常见原则,并熟悉了色彩的关键原则。
在本章的末尾,我们发现了 Qlik 提供的不同可视化类型,并学习了如何有效地使用一些图表类型。我们学习了最常用可视化的原则,以及如何在 Qlik 中微调这些可视化,同时考虑到机器学习的上下文。
在下一章中,我们将探讨机器学习解决方案的实际应用。我们将学习如何从头开始构建几个不同的机器学习模型和应用,并利用前几章所学的一切。
第三部分:案例研究和最佳实践
本节将涵盖不同的使用案例,并附带实际操作示例。使用案例是从零开始构建的,包括问题定义阶段。结果是利用机器学习的一个工作分析应用。本节将提供利用前几章所学技能的可能性。本节还涵盖了机器学习和人工智能的当前和未来趋势,并专注于大趋势的特点。
本节包含以下章节:
-
第十章**: 示例和案例研究
-
第十一章**: 未来方向
第十章:例子和案例研究
本章开始了一段探索机器学习领域的旅程,探讨了其实际应用和现实世界的例子,展示了其力量和潜力。在前几章中,我们已经学习了构建良好的机器学习解决方案所需的所有基本技能。在本章中,我们将利用所获得的所有知识,从头开始构建以下示例:
-
线性回归示例
-
客户流失示例
线性回归示例
在本例中,我们将创建一个线性回归模型来预测加利福尼亚地区房屋的价值。让我们首先熟悉数据集。我们将使用一个常见的加利福尼亚房屋价值数据集。这是一个关于美国加利福尼亚州各个地区住宅房地产数据的集合,常用于机器学习和数据分析任务中,基于各种特征预测房价。
我们将使用的数据集包含以下字段:
-
medianIncome
: 特定区域家庭的中位数收入。 -
housingMedianAge
: 该区域内房屋的中位数年龄。 -
totalRooms
: 该区域内房屋的总房间数。 -
totalBedrooms
: 该区域内房屋的总卧室数。 -
population
: 该区域的总人口。 -
households
: 该区域内家庭的总数(居住在家庭单元内的一群人)。 -
latitude
: 房屋地理位置的纬度。 -
longitude
: 房屋地理位置的经度。 -
medianHouseValue
: 该区域内房屋的中位数价值。 -
oceanProximity
: 海洋距离的类别描述
下面是数据的一个样本:
图 10.1:加利福尼亚住房数据集的样本数据
注意
示例数据集可以在本书的 GitHub 仓库中找到。其他数据集的一个好地方是,例如,www.kaggle.com/datasets
。
我们机器学习项目的第一步是定义我们想用我们的模型回答的问题。在这种情况下,我们使用的是一个相对简单的历史数据集,因此所使用的框架略有修改。让我们确定以下特征以开始:
-
触发器: 数据集中插入新的房屋数据
-
目标: 美元计价的房屋价值
-
特征: 纬度,经度,中位数年龄,总房间数,总卧室数,人口,家庭数,中位数收入,海洋接近度
-
机器学习问题: 预测加利福尼亚地区的房屋价值会是多少?
为了开始我们的实际工作,让我们首先将housing_test.csv
和housing_train.csv
上传到我们的 Qlik 云租户。这些文件可以在本书的 GitHub 仓库中找到。如您所见,数据集已经被分割成训练集和测试集。
在一个正常的机器学习项目中,我们需要注意对分类字段进行编码、处理空值、缩放等,但在这个案例中,Qlik AutoML 负责所有这些步骤。我们的下一个任务是创建一个新的机器学习实验(添加新 🡪 新 ML 实验)。
给您的实验起一个名字,定义您想要使用的空间,然后按housing_train.csv
,这是我们之前上传的。你应该会看到以下内容:
图 10.2:房价实验 – 目标选择
接下来,我们将选择我们的目标变量。我们还可以选择用于实验的特征。选择median_house_value
作为目标,所有其他字段应自动选择以包含在我们的实验中。你应该会看到以下内容:
图 10.3:选定的目标和特征
在之前的图像中,我们还用红色方块标记了total_bedrooms
的特征类型。Qlik 已经识别这个字段为字符串,并默认将其形成一个分类特征。将其更改为total_bedrooms
,我们可以从右下角选择运行实验。过了一会儿,你应该会看到以下内容:
图 10.4:房价实验 – 第一次结果
当查看我们实验的第一个版本的 SHAP 图时,我们可以看到median_income
字段与预测的房价有相当高的相关性。让我们尝试配置一个没有该字段的第二个版本的实验。
如下图中选择median_income
:
图 10.5:特征重新配置
选择total_rooms
是最决定性的特征,但我们的 R2 分数也有所下降。在这种情况下,我们将选择实验的第一个版本,因为它给了我们更好的准确度。您可以尝试配置多个版本并实验模型以获得更好的模型。
在屏幕顶部部分的列表中,向下滚动直到您看到第一次运行的最佳模型并选择它。您的屏幕应该如下所示:
图 10.6:部署所选模型。
从右下角选择部署。输入一个名称并定义您新部署的模型的空间。确保启用实时 API 访问被选中,然后按部署。我们的模型现在已部署并准备好使用。
正如我们在前面的章节中学到的,部署的模型本身提供了有关所需模式、部署的算法和实验的一些元数据的信息。您现在可以打开部署的模型并更详细地查看这些信息。
我们下一个任务是将预测结果放入最终的应用程序中,需要创建一个新的 Qlik 分析应用程序。
对于我们应用程序中的数据,我们将导入housing_test.csv
。之后,我们将为我们在早期步骤中部署的 Qlik AutoML 模型创建一个新的数据连接。
在Id
下创建一个新的 Qlik AutoML 连接。连接器设置应类似于以下内容:
图 10.7:连接器设置
测试连接并在之后保存它。接下来,我们将选择要加载的数据。在housing_test.csv
中,选择housing_predictions
以包含在内。你应该看到以下内容:
图 10.8:选择要加载的数据窗口。
选择插入脚本并将数据加载到应用程序中。你现在可以创建实际的仪表板了。
注意
如果你在创建应用程序时遇到问题,这本书的 GitHub 仓库中有示例应用程序供你参考。
我们将不会详细讲解仪表板创建部分,以便给你机会尝试不同的可视化选项。以下图像代表一个示例仪表板,它使用渐变色方案在地图上显示预测的房屋价值,使用直方图显示价格分布,以及使用瀑布图可视化 SHAP 值。利用前几章学到的技能,创建一个自己的仪表板来可视化数据。
图 10.9:房价 – 示例仪表板
如果你用不同的参数重新运行实验,可以创建多个仪表板并尝试交叉引用多个模型的数据。尝试调整不同的设置和图表类型,以找到有效的可视化方法。
现在我们已经实现了一个线性回归示例,是时候转向另一个稍微复杂一点的示例了。我们将研究客户流失示例。
客户流失示例
在我们的第二个示例中,我们将创建一个二进制模型来预测银行客户的客户流失。我们将使用包含以下字段的数据集:
-
customer_id
:每个客户的唯一标识符。 -
credit_score
:客户信用度的数值表示。 -
country
:客户居住的国家。 -
gender
:客户的性别。 -
age
:客户的年龄。 -
tenure
:客户与公司关系的持续时间。 -
balance
:客户账户中的当前余额。 -
products_number
:客户从公司购买的产品数量。 -
credit_card
:一个二进制指示器,显示客户是否持有公司的信用卡。 -
active_member
:一个二进制指示器,表示客户是否目前是公司的活跃成员。 -
estimated_salary
:对客户工资的大致估计。 -
churn
:一个二元指示器,显示客户是否已经流失(1
)或未流失(0
)。流失指的是与公司结束关系的客户。
这里是数据集的一个样本:
图 10.10:客户流失 - 样本数据
要开始我们的机器学习项目,我们首先将Bank Customer Churn Prediction.csv
上传到 Qlik Cloud。这个数据文件可以在本书的 GitHub 仓库中找到。我们还必须分割数据集。Qlik AutoML 在实验阶段分割数据集,但我们将创建单独的训练集和测试集,以更好地理解模型的性能。为了分割数据集,我们将使用 70:30 的比例来分割训练和测试数据。
在 Qlik 中可以分割数据集。为此,我们首先创建一个新的分析应用程序,并将其命名为Churn Data Prep
。然后,创建一个数据连接到包含之前上传的Bank Customer Churn Prediction.csv
文件的目录。您可以使用以下代码进行分割:
banking_churn_data:
LOAD
RowNo() as row,
customer_id,
credit_score,
country,
gender,
"age",
tenure,
balance,
products_number,
credit_card,
active_member,
estimated_salary,
churn
FROM [lib://<connection>/Bank Customer Churn Prediction.csv]
(txt, codepage is 28599, embedded labels, delimiter is ',', msq);
banking_churn_train:
NoConcatenate Load *
Resident banking_churn_data
Where row <= (NoOfRows('banking_churn_data')*0.7);
banking_churn_test:
NoConcatenate Load *
Resident banking_churn_data
Where row > (NoOfRows('banking_churn_data')*0.7);
drop Fields row From banking_churn_train, banking_churn_test;
Store banking_churn_train into [lib:// <connection>/banking_churn_train.qvd] (qvd);
Store banking_churn_test into [lib:// <connection>/banking_churn_test.qvd] (qvd);
之前的代码使用文件数据连接读取Bank Customer Churn.csv
,并为每一行添加一个行号。然后,使用这个行号创建了两个子集(训练集和测试集),并将它们存储在 QVD 文件中。在存储之前删除了行号
字段,因为我们不需要在机器学习项目中使用它。因此,脚本生成的新的数据文件(banking_churn_train.qvd
和banking_churn_test.qvd
)存储在原始数据文件相同的目录下。
接下来,我们将开始调查数据以形成机器学习问题。数据探索可以在您分割数据的同一 Qlik 应用程序中进行。记住在继续进行可视化之前删除测试和训练表。以下图表示例了一个分析视图:
图 10.11:客户流失示例 - 初始分析
如果我们使用直方图来绘制这些值,我们可以看到credit_score
和age
遵循正态分布。如果我们查看余额,有很多零值,但其余数据是正态分布的。如果我们查看任期,只有少数客户有 1 年的任期,其中 95 个已经流失。这在定义我们的预测窗口时是重要信息。我们还可以看到数据中没有问题。您可以在熟悉数据时尝试不同的可视化。一个例子可以在本书的 GitHub 仓库中找到。
在调查数据后,我们可以使用以下框架来形成我们的机器学习问题:
-
事件触发器:当新客户订阅时
-
目标:当客户离开公司服务(流失)
-
二元结果:是或否
-
预测范围基于平均流失客户任期长度(大约五年)
-
-
活跃会员
、年龄
、余额
、国家
、信用卡
、信用评分
、估计工资
、性别
、产品数量
和任期
-
预测点:订阅后一年
-
机器学习问题:作为客户活动一年后,客户在第一五年内会流失吗?
通过使用框架定义我们的模型,我们定义了在新客户签约后,我们将收集第一年的数据,然后预测客户在第一五年内是否会流失。在获得新数据(例如,在初始结果后的每六个月)后,我们可以在初始结果之后定期重新计算预测。由于我们在第一年内流失的客户数量很少,我们的数据积累窗口(事件触发和预测点之间的时间)并不太长。
现在让我们使用我们的训练数据集创建实际的机器学习实验。首先创建一个新的实验,并选择正确的数据集(banking_churn_train.qvd
)。选择流失
作为目标,并将除customer_id
之外的所有其他字段作为特征。以下图表示第一个实验设置:
图 10.12:实验设置
我们可以看到,Qlik AutoML 识别了分类特征,并将自动将这些字段应用一热编码。你现在可以运行实验。第一次运行后,实验返回以下结果:
图 10.13:实验的第一批结果
如我们从混淆矩阵中可以看到,假阴性的比率相当大,我们的 ROC 曲线表明我们的模型表现不佳。从排列和 SHAP 重要性图中我们可以看到,年龄
和产品数量
与结果高度相关。让我们尝试再次运行,但不包括这些变量,看看我们是否会得到更准确的结果。选择年龄
和产品数量
,然后按运行 v2。你应该看到以下结果:
图 10.14:修改后的结果
如我们所见,模型的准确性下降,因此我们的更改没有带来好处。经过几次迭代后,我们将找到最佳的特征组合。之后,通过从设置中启用超参数优化并定义一个时间窗口,我们可以进一步微调模型。你可以尝试不同的组合并调查模型性能。完成后,配置新版本并选择以下字段:年龄
、产品数量
、活跃会员
、性别
、余额
和国家
。还要启用超参数优化并将窗口设置为一个小时。你应该看到以下结果:
图 10.15:优化实验的结果
我们可以看到,我们最终模型的准确率为 84.4%,F1 分数为 0.623。该模型并非表现最佳,但会给我们带来相对较好的结果。选择表现最佳的模型并按下部署。这将为我们创建一个机器学习部署。您可以打开已部署的模型。验证您是否看到了以下架构:
图 10.16:银行客户流失架构
我们现在可以创建一个新的分析应用程序并将banking_churn_test.qvd
加载到其中作为数据表。您应该在脚本视图中这样做。我们还应该创建到我们新部署的模型的数据连接。要创建正确的数据连接,从连接列表中选择 Qlik AutoML 并从下拉菜单中选择模型。为返回的表命名并选择要包含的 SHAP 值和错误。在关联字段中输入customer_id
。您的设置应类似于以下内容:
图 10.17:连接设置
接下来,将预测结果添加到脚本中。在居民表字段中输入banking_churn_test
表的名称并选择结果集。选择插入脚本。您的代码应如下所示:
banking_churn_test:
LOAD
customer_id,
credit_score,
country,
gender,
"age",
tenure,
balance,
products_number,
credit_card,
active_member,
estimated_salary,
churn
FROM [lib://ML demos:DataFiles/banking_churn_test.qvd]
(qvd);
[churn_predicted]:
LOAD * EXTENSION endpoints.ScriptEval('{"RequestType":"endpoint", "endpoint":{"connectionname":"ML demos:Banking churn"}}', banking_churn_test);
我们将在前面的代码中加载测试数据集,然后通过数据连接器调用模型端点。完成脚本后,选择加载数据。打开数据模型查看器并验证您是否可以看到两个表连接在一起。接下来,我们将专注于创建实际的应用程序。您应该尝试不同的可视化类型,并使用服务器端扩展(SSE)语法连接到模型。一个示例仪表板可能看起来如下:
图 10.18:客户流失分析示例
由于您应该对数据和可视化进行实验,因此本章不会涵盖每个可视化的创建。一个示例应用程序作为 GitHub 仓库中的材料提供。我们现在已经成功实现了两个不同用例的机器学习解决方案,并研究了如何形成要回答的机器学习问题。我们还学习了如何优化和微调模型。
摘要
在本章中,我们通过实现两个不同的用例来利用了前几章学到的技能。在我们的第一个例子中,我们研究了加利福尼亚州的房屋数据,并创建了一个基于房屋相关变量的模型来预测其价格。我们创建了一个应用程序来利用我们的模型,并学习了迭代以及如何解释实验结果。
在我们的第二个例子中,我们学习了如何构建客户流失模型,并利用它在多种方式下。我们还学习了如何从原始数据文件中创建不同的数据集,以及如何使用框架来构建机器学习问题。我们使用 Qlik Sense 的本地可视化来展示结果。
在我们接下来的最后一章中,我们将展望未来。我们将探讨当前机器学习和人工智能的趋势,并尝试预测这些趋势在未来可能如何演变。我们还将研究重大趋势,并熟悉重大趋势的特征。我们还将思考对可能出现的重大趋势的评估。理解重大趋势是能够在竞争中发展和进化的关键技能。
第十一章:未来方向
在技术进步的广阔领域中,很少有创新能像机器学习和人工智能(AI)那样吸引世界的想象力并深刻地改变行业。这些开创性的领域有力量重塑我们的社会,改变我们的工作方式,并从根本上改变人类存在的进程。站在新时代的边缘,本章旨在探索机器学习和人工智能的未来,揭示这些技术的复杂性,并展望它们对我们生活的各个方面可能产生的影响。
在本章中,我们将探讨机器学习和人工智能的当前和未来趋势。我们还将学习大趋势的生命周期以及如何解读它们。
在本章中,我们将学习以下主题:
-
机器学习和人工智能的未来趋势
-
如何识别潜在的大趋势
机器学习和人工智能的未来趋势
机器学习,作为人工智能的一个子领域,赋予计算机从数据中学习并做出预测或采取行动的能力,而无需被明确编程。通过利用我们互联互通的世界产生的海量信息,机器学习算法能够识别模式、提取洞察力,以前所未有的准确性和速度推动决策制定。
人工智能,通常被视为技术成就的巅峰,超越了机器学习,涵盖了更广泛的能够模拟人类行为的智能系统。从自然语言处理和计算机视觉到机器人技术和专家系统,人工智能已经发展到以惊人的方式复制和增强人类智能。
机器学习和人工智能的影响远远超出了学术界和研究实验室。这些技术已经在医疗保健、金融、交通和制造业等行业中引发革命。通过自动化、预测分析和个性化体验,企业正在利用机器学习和人工智能来获得竞争优势并提高其运营效率。以下趋势可以从当前的机器学习和人工智能领域识别出来:
-
深度学习和神经网络:近年来,深度学习获得了巨大的普及,并继续成为机器学习和人工智能领域的主导趋势。具有多层结构的神经网络已被证明在图像和语音识别、自然语言处理和自动驾驶等任务中非常有效。未来将见证架构、优化技术和模型可解释性的进步,使更复杂和准确的预测成为可能。
-
强化学习:强化学习,作为机器学习的一个分支,涉及训练智能体与环境交互并通过试错学习,已经取得了显著进展。强化学习的未来趋势将集中在解决更复杂和现实场景上,如机器人技术、工业自动化和游戏。算法和技术的发展,包括基于模型的强化学习和元学习,将增强自主系统的能力。
-
边缘计算和联邦学习:随着物联网(IoT)设备的普及和实时决策的需求,边缘计算正在获得动力。边缘设备,如智能手机和物联网传感器,配备了处理能力,以实现设备上的机器学习。联邦学习,一种在去中心化数据上训练机器学习模型的分布式方法,对于在边缘计算环境中保护隐私和可扩展性至关重要,因为它允许数据留在边缘设备上,从而保护用户隐私并符合数据法规。
-
可解释人工智能和伦理考量:随着机器学习和人工智能技术在我们的生活中越来越深入,对透明度和可解释性的需求日益增长。可解释人工智能技术旨在揭示模型如何做出决策,使用户能够理解和信任结果。此外,公平性、责任和偏见缓解等伦理考量将在塑造机器学习和人工智能的未来中发挥关键作用,确保这些技术的负责任和道德部署。
-
生成模型和无监督学习:生成模型,如生成对抗网络(GANs)和变分自编码器(VAEs),在生成逼真的图像、文本甚至音乐方面展示了非凡的能力。无监督学习,其中模型在无需明确标签的情况下学习数据中的模式和结构,具有发现隐藏洞察和减少对标记数据依赖的巨大潜力。生成模型和无监督学习的未来进步将在创意、数据合成和异常检测方面开启新的可能性。
-
增强智能和人类-人工智能协作:机器学习和人工智能的未来不仅在于取代人类,更在于增强人类的能力。增强智能旨在结合人类和机器的优势,实现协作决策并放大人类的专业知识。这一趋势将强调以人为本的设计、用户友好的界面和赋予个人在各个领域(从医疗保健和金融到创意和科学研究)权力的交互式人工智能系统。
-
量子机器学习:量子计算虽然仍处于早期阶段,但有望解决经典计算机无法触及的复杂问题。正在开发量子机器学习算法,以利用量子特性并加速计算,为药物发现、优化、密码学等领域的发展铺平道路。未来将见证量子计算与机器学习的交汇,开辟创新和突破的新途径。
机器学习和人工智能的当前和未来趋势反映了一个快速发展的格局,既提供了令人兴奋的机会,也带来了挑战。从深度学习到强化学习,再到边缘计算和可解释人工智能,这些趋势正在推动创新,改变行业,塑造我们的未来。强调道德、合作和负责任的部署,机器学习和人工智能的未来有望创造一个更智能、更高效、更包容的世界。
忽视人工智能开发中的道德、合作和责任可能导致一系列负面后果。这些包括偏见和歧视的持续,通过个人数据不当处理侵犯隐私,开发者和服务系统缺乏问责制,自动驾驶汽车等应用中的潜在安全风险,缺乏适当的人力资源规划导致的就业流失,人工智能在没有人类监督的情况下做出决策,易受攻击的人工智能系统的安全威胁,用户在理解人工智能决策方面的困难,由于道德担忧而引发的社会动荡,以及与人工智能进步和伦理相关的潜在国际紧张局势和冲突。
现在我们已经熟悉了一些潜在的大趋势以及机器学习和人工智能的方向,我们将探讨如何预测大趋势以及如何评估技术进步是否会成为其中之一。这将使你能够在第一前沿做出反应并立即利用新技术。
如何识别潜在的大趋势
大趋势指的是一种长期而普遍的转变或模式,它对社会、经济和人类生活的各个方面产生重大影响。大趋势是塑造我们生活世界的强大力量,通常具有深远的影响,跨越多个行业、地区和几代人。它们通常在几十年内展开,可以影响技术进步、文化规范、经济体系和社会结构。
大趋势的特点是它们广泛而持久的影响,以及它们带来变革性变化的能力。它们反映了人口、技术、环境因素、价值观和全球动态的潜在转变。大趋势可以影响消费者行为、商业策略、政策制定和社会规范,推动创新,塑造市场,创造新的机遇或挑战。
要充分利用上升的大趋势,你应该处于认识即将到来的变化的尖端。识别大趋势需要观察、分析和理解影响社会、技术、经济和人口的各种因素。以下原则可用于识别潜在的大趋势:
-
保持信息更新:关注不同领域的最新新闻、研究和进展。跟踪可靠的信息来源,包括行业报告、学术出版物和专家意见。参加与感兴趣领域相关的会议、研讨会和网络研讨会,以了解新兴趋势。
-
分析历史数据:查看历史数据和趋势,以识别模式和了解过去大趋势的轨迹。检查技术进步、消费者行为的变化、监管变化和其他影响过去主要趋势的有影响力的因素。
-
监测社会和文化变迁:关注社会和文化规范、价值观和态度的变化。人口结构、生活方式偏好和社会动态的变化往往预示着新兴的大趋势。研究不同世代和不同群体的演变需求和愿望,以识别潜在的变化驱动因素。
-
研究技术进步:技术是大趋势的关键驱动力。密切关注各个领域的突破性技术和创新,如人工智能、生物技术、可再生能源、机器人和量子计算。了解这些技术在塑造未来趋势中的潜在影响和变革力量。
-
考虑经济和地缘政治因素:分析经济指标、全球贸易模式和地缘政治动态,以识别潜在的大趋势。经济增长、收入不平等、资源稀缺、政治稳定和国际关系等因素可以显著影响长期趋势。
-
寻找融合和关联:大趋势通常源于多个因素的融合及其相互关联。探索不同领域、行业和技术如何相互交叉和互动。确定一个领域的进步如何催化其他领域的变革性变化。
-
寻求跨学科视角:采用多学科方法,全面理解大趋势。与来自不同领域的专家和专业人士建立联系,包括科学、技术、经济、社会学和心理学。促进讨论和合作,以获得不同的观点和见解。
-
识别长期趋势:大趋势以其长期性和持久性为特征。寻找那些有可能在较长时间内重塑行业、社会甚至全球系统的趋势。关注那些可能产生持续影响并创造重大机遇或挑战的变革。
-
预测未来需求和挑战:识别社会未来将面临的新需求、问题和挑战。预测技术、社会和经济趋势如何解决或加剧这些问题。大趋势通常作为对紧迫问题或变化需求的回应而出现。
-
连接点:最后,将各种信息和观察结果联系起来,以识别总体主题和大趋势。寻找重复出现的模式、共同点和指向长期变革的信号。发展对不同因素之间复杂互动的全面理解,以识别和验证大趋势。
大趋势的例子
全球化:全球化是通过贸易、投资、技术和文化交流增加国家之间相互联系和相互依赖的趋势。它导致了一个更加紧密的世界经济,贸易扩大,跨国公司增多。经济影响包括经济增长和供应链整合。从地缘政治角度看,它导致了贸易紧张、资源竞争和各国间力量动态的变化。全球化推动了国际贸易、投资和全球供应链的整合,促进了经济增长和多国公司的出现。它还通过改变权力结构、国际联盟和资源竞争,重塑了地缘政治动态。社会经历了文化交流、移民和经济增长的益处,但也面临着收入不平等和文化紧张。
数字化和技术进步:这一大趋势涵盖了数字技术的快速发展和它们融入社会和经济各个方面的过程。它导致了技术创新、生产率提高和新行业的出现。在经济上,它推动了增长并改变了信息技术等领域的格局。在地缘政治上,它引发了各国之间对技术主导权的竞争,提高了网络安全问题,并引发了关于数据治理和隐私的讨论。数字化推动了技术创新,提高了生产率,创造了全新的行业。它赋予了科技巨头力量,并改变了经济格局。关于数据治理、隐私和知识产权的辩论成为焦点。社会变得更加互联和依赖数字技术,既带来了机遇也带来了挑战。
整体影响和相互作用:全球化和数字化之间的相互作用促进了全球网络经济,使企业能够触及全球客户,并实现信息流的无缝流动。这种融合导致了快速的创新,颠覆性地改变了传统产业。然而,它也引入了脆弱性,如网络安全威胁和数据隐私问题。全球生态系统进行了适应,数字化支持可持续实践和绿色技术,使环境问题成为经济和地缘政治讨论的核心。
记住,识别大趋势并不是一门精确的科学,其中总存在一定的不确定性。这需要结合研究、批判性思维和直觉来识别和理解那些将塑造我们未来的潜在大趋势。
一旦你识别出一个潜在的大趋势,你应该能够评估其潜在的重要性。评估大趋势的重要性涉及评估其潜在影响、规模和长期相关性。在评估大趋势的重要性时,应考虑以下关键因素:
-
规模和范围:考虑大趋势的规模和范围。它是全球现象还是更局部化?进行仔细的分析、研究和持续监测对于准确判断大趋势的全球或局部性质至关重要。它是否影响多个行业、部门或人口群体?具有广泛影响范围的大趋势通常更为重要,因为它可以塑造社会、经济和产业的总体轨迹。
-
持续时间和持久性:评估大趋势的预期持续时间和持久性。预测大趋势的确切持续时间本质上是不可确定的,许多因素可以影响其持久性。大趋势以其长期性和持久性为特征。预期将持续数十年或更长时间的趋势通常更为重要,因为它可以在生活的各个方面产生持续的影响。
-
变革潜力:评估大趋势的变革潜力。它是否有能力带来重大变化,颠覆现有系统,并创造新的机遇或挑战?能够重塑产业、技术或社会结构的大趋势通常更为重要,因为它们可以导致我们生活和工作的方式发生重大转变。
-
经济影响:考虑重大趋势的经济影响。它如何影响经济体系、商业模式和市场动态?推动显著经济增长、创造新市场或塑造消费者行为的重大趋势通常被认为很重要,因为它们对金融稳定、就业创造和财富分配有影响。例如,“绿色能源转型”这一重大趋势说明了全球向更清洁的能源实践转变如何推动经济增长、开辟新市场并影响消费者行为。这一转型导致了可再生能源产业的快速增长,催生了电动汽车和能源存储等新市场,并塑造了消费者对可持续性的选择。这不仅解决了环境问题,还促进了就业创造、财富分配和金融稳定,展示了重大趋势对经济和社会的显著影响。
-
社会和文化影响:评估重大趋势对社会规范、价值观和文化实践的影响。它是否塑造了行为、态度或社会结构?对文化实践、社会互动或价值观体系有深远影响的重大趋势被认为是重要的,因为它们可以影响社会的结构。
-
相互关联性:考虑重大趋势与其他趋势和领域的相互关联性。它是否与其他影响因素相互作用或放大?与其他重大趋势有强烈联系或能作为其他趋势催化剂的重大趋势往往更为重要,因为它们可以产生协同效应并推动进一步的变革。例如,城市化和数字化是相互关联性强的重大趋势。共同地,它们影响着城市、经济和社会的发展与转型,对人们在城市环境中的生活、工作和互动方式产生影响。
-
长期相关性:评估重大趋势的长期相关性和可持续性。它是否可能在未来保持重要性和影响力,或者随着时间的推移而失去相关性?预计将保持重要性和适应不断变化的情况的重大趋势在制定战略和决策方面更有价值。
-
专家共识:考虑专家、研究人员和行业领导者的观点和见解。与对重大趋势及其影响有深刻理解的个人进行交流。专家共识和专家意见可以为评估重大趋势的重要性和潜力提供有价值的视角。
需要注意的是,评估一个重大趋势的重要性涉及一定程度的不确定性,因为未来本质上是不可预测的。因此,持续的监控和重新评估是必不可少的,以便适应不断变化的情况并识别可能超越或与现有趋势交叉的新兴重大趋势。
摘要
在本章中,我们简要地探讨了机器学习和人工智能的未来。这些变革性技术吸引了世界的想象力,并拥有深刻地重塑社会和产业的力量。我们探讨了机器学习和人工智能的当前和未来趋势,揭示了它们在推动创新和革命化各个部门方面所持有的潜力。
认识到大趋势的重要性至关重要,我们在本章提供了一个路线图来识别和评估这些变革性转变。通过保持信息灵通,分析历史数据,监测社会变迁,研究技术进步,以及考虑经济和地缘政治因素,我们可以获得关于大趋势潜在影响的宝贵见解。
面向未来,我们的目标是导航机器学习和人工智能的复杂性,揭示其复杂性,并展望它们对我们生活各方面可能产生的影响。通过理解这些趋势和识别大趋势的出现,我们可以利用这些技术的力量,塑造一个智能、包容和可持续的未来。
我们本章一开始就探讨了机器学习和人工智能当前及未来的趋势,然后我们考察了如何识别和评估潜在的大趋势,以及如何从中获得全部的益处。