数据挖掘的机器学习-全-

数据挖掘的机器学习(全)

原文:annas-archive.org/md5/e2db9ab88aba428b48a1049780195520

译者:飞龙

协议:CC BY-NC-SA 4.0

前言

30%的数据挖掘职位也涉及机器学习。而且,那些涉及机器学习的职位比其他职位高出 30%。如果您参与数据挖掘,您需要在机器学习占据上风之前掌握它。

动手实践数据挖掘中的机器学习》为您提供了将机器学习的力量带入数据挖掘工作的所有必需品。本书将使您能够将最佳算法与合适的工具和流程相结合。您将了解系统如何从数据中学习,识别模式,并在数据上做出预测,这一切都需最小化人为干预。

本书面向的对象

如果您是一位希望通过添加机器学习技能来获得 30%更高薪资的数据挖掘专业人士,那么这门课程非常适合您。本书假设您没有机器学习的先验知识。

本书涵盖的内容

第一章,介绍机器学习预测模型,向您介绍了预测模型背后的理论,探讨了它们的工作原理,并提供了对预测建模类型的洞察,例如在本章中简要解释的神经网络模型。

第二章,机器学习入门,向您介绍了神经网络模型的实现,并深入探讨了支持向量机(SVMs)的实现。

第三章,理解模型,解释了不同类型的模型以及它们各自理想的使用场景。

第四章,改进单个模型,展示了我们可以改进模型的不同方法。本章将向您展示四种提高模型准确性的方法。

第五章,提高模型的高级方法,专注于以不同的方式结合不同的模型以获得越来越好的结果。在本章中,我们将看到数据集的一个部分,它对神经网络模型的结果贡献不大,但在 CHAID 和 C5.0 决策树模型上表现非常好。我们还将了解如何对错误进行建模以准备我们的模型。

要充分利用本书

  • 了解数据挖掘是什么以及机器学习的基本概念,将为本书的起点奠定基础。

  • 对任何机器学习模型器的熟悉,特别是 IBM 提供的 SPSS Modeler,将是一个加分项,但不是必需的。

下载示例代码文件

您可以从www.packt.com的账户下载本书的示例代码文件。如果您在其他地方购买了本书,您可以访问www.packt.com/support并注册,以便将文件直接通过电子邮件发送给您。

您可以通过以下步骤下载代码文件:

  1. www.packt.com上登录或注册。

  2. 选择支持选项卡。

  3. 点击代码下载和勘误。

  4. 在搜索框中输入书籍名称,并遵循屏幕上的说明。

文件下载完成后,请确保使用最新版本解压缩或提取文件夹:

  • 适用于 Windows 的 WinRAR/7-Zip

  • 适用于 Mac 的 Zipeg/iZip/UnRarX

  • 适用于 Linux 的 7-Zip/PeaZip

本书代码包也托管在 GitHub 上,网址为github.com/PacktPublishing/Machine-Learning-for-Data-Mining。如果代码有更新,它将在现有的 GitHub 仓库中更新。

我们还有其他来自我们丰富的书籍和视频目录的代码包可供在github.com/PacktPublishing/上获取。查看它们吧!

下载彩色图像

我们还提供了一份包含本书中使用的截图/图表的彩色图像的 PDF 文件。您可以从这里下载:www.packtpub.com/sites/default/files/downloads/9781838828974_ColorImages.pdf

使用的约定

本书使用了多种文本约定。

CodeInText: 表示文本中的代码单词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 昵称。以下是一个示例:“将下载的WebStorm-10*.dmg磁盘映像文件作为系统中的另一个磁盘挂载。”

粗体: 表示新术语、重要单词或你在屏幕上看到的单词。例如,菜单或对话框中的单词在文本中显示如下。以下是一个示例:“从管理面板中选择系统信息。”

警告或重要提示显示如下。

小技巧显示如下。

联系我们

我们欢迎读者的反馈。

一般反馈: 如果你对本书的任何方面有疑问,请在邮件主题中提及书名,并通过customercare@packtpub.com给我们发送邮件。

勘误: 尽管我们已经尽一切努力确保内容的准确性,但错误仍然可能发生。如果你在这本书中发现了错误,我们将不胜感激,如果你能向我们报告这个错误。请访问www.packt.com/submit-errata,选择你的书籍,点击勘误提交表单链接,并输入详细信息。

盗版: 如果你在互联网上以任何形式遇到我们作品的非法副本,如果你能提供位置地址或网站名称,我们将不胜感激。请通过copyright@packt.com与我们联系,并附上材料的链接。

如果你有兴趣成为作者: 如果你有一个你擅长的主题,并且你对撰写或为书籍做出贡献感兴趣,请访问authors.packtpub.com

评论

请留下您的评价。一旦您阅读并使用过这本书,为何不在购买它的网站上留下评价呢?潜在读者可以查看并使用您的客观意见来做出购买决定,我们 Packt 可以了解您对我们产品的看法,而我们的作者也可以看到他们对书籍的反馈。谢谢!

如需了解 Packt 的更多信息,请访问packt.com.

第一章:介绍机器学习预测模型

大部分数据挖掘机会都涉及机器学习,这些机会通常伴随着更大的经济回报。本章将为你提供将机器学习的力量带入数据挖掘工作的基本知识。在本章中,我们将讨论机器学习模型的特点,并查看一些这些模型的示例。

以下是我们将在本章中涉及的主题:

  • 机器学习预测模型的特点

  • 机器学习预测模型的类型

  • 与神经网络一起工作

  • 一个示例神经网络模型

机器学习预测模型的特点

了解机器学习预测模型的特点将有助于你理解它们与任何统计模型或决策树模型相比的优势和局限性。

让我们了解一下机器学习预测模型的一些特点:

  • 优化以学习复杂模式:机器学习模型被设计成优化以学习复杂模式。与统计模型或决策树模型相比,当数据中存在非常复杂的模式时,预测模型在这一点上表现得尤为出色。

  • 考虑交互和非线性关系:机器学习预测模型可以比决策树模型更好地考虑数据中的交互和非线性关系。

  • 假设很少:这些模型之所以强大,是因为它们有很少的假设。它们也可以用于不同类型的数据。

  • 黑盒模型的解释并不简单:预测模型是黑盒模型,这是预测机器学习模型的一个缺点,因为这意味着解释并不简单。这意味着,如果我们最终构建了许多不同的方程并将它们组合起来,就很难确切地看到每个变量是如何相互作用并影响输出变量的。因此,预测机器学习模型在预测准确性方面非常出色,但它们在理解预测背后的机制方面并不那么好。

如果你想要预测某件事,这些模型做得相当不错,并且具有惊人的准确性。但如果你想知道为什么会有这样的预测,如果你希望对实施进行一些更改以避免特定的预测,那么要解析出来将会很困难。

机器学习预测模型的类型

以下是一些不同的机器学习预测模型类型:

  • 神经网络

  • 支持向量机

  • 随机森林

  • 简单贝叶斯算法

  • 梯度提升算法

  • K 最近邻

  • 自学习响应模型

我们不会涵盖所有这些,但我们将关注一个非常有趣的模型——神经网络。在接下来的章节中,我们将深入了解神经网络是什么。

与神经网络一起工作

神经网络最初是为了尝试理解大脑如何运作而开发的。最初它们被用于神经科学和语言学领域。

在这些领域,研究人员注意到环境中发生了某些事情(输入),个体处理了信息(在大脑中),然后以某种方式做出反应(输出)。

因此,神经网络或神经网络的背后理念是它们将充当大脑,就像一个黑盒。然后我们必须尝试弄清楚发生了什么,以便可以将发现应用于实践。

神经网络的优点

以下是使用神经网络的优点:

  • 适用于许多类型的问题:它们与您可能遇到的许多复杂问题都兼容得很好。

  • 泛化能力很好:准确的泛化是一个非常重要的特性。

  • 它们非常普遍:神经网络在当今世界非常普遍,并且它们被轻松接受并用于现实世界的问题。

  • 关于它们了解很多:由于神经网络获得了广泛的流行,因此在不同的领域进行了大量研究并成功实施,因此关于神经网络的信息很多。

  • 与非聚类数据兼容性良好:当您拥有非聚类数据时,神经网络可以在几种情况下使用,例如数据本身非常复杂,您有很多交互,或者您有非线性关系;在这种情况下,神经网络无疑是强大且非常稳健的解决方案。

神经网络的缺点

优秀的模型是以一些缺点为代价的:

  • 训练需要时间:神经网络确实需要很长时间来训练;它们通常比线性回归模型或决策树模型慢,因为这些基本上只是对数据进行一次遍历,而神经网络实际上要经过许多次迭代。

  • 最佳方案不保证:您不能保证找到最佳方案。这也意味着,除了运行单个神经网络多次迭代外,您还需要使用不同的起始点多次运行它,以便尝试接近最佳方案。

  • 黑盒:正如我们之前讨论的,很难弄清楚是什么导致了特定的输出以及如何做到这一点。

表示错误

在构建我们的神经网络时,我们的实际目标是构建最佳可能的解决方案,而不是陷入次优方案。我们需要多次运行神经网络。

以这个错误图为例:

图片

这是一个表示不同解决方案中错误数量的图表。全局解是最佳可能的解决方案,并且确实是最佳的。次优解是一个终止、陷入困境且不再改进的解决方案,但它并不是真正的最佳解决方案。

神经网络模型的类型

有多种类型的神经网络可供我们使用;在本节中,我们将深入了解这些。

多层感知器

最常见的类型被称为多层感知器模型。这个神经网络模型由圆圈表示的神经元组成,如下面的图所示。这些神经元被组织成层:

图片

每个多层感知器模型至少有三个层:

  • 输入层:这一层包含我们数据中的所有预测因子。

  • 输出层:这将包括结果变量,也称为因变量目标变量

  • 隐藏层:这是你最大化神经网络功能的地方。在这个层也可以创建非线性关系,并且所有复杂的交互都在这里进行。你可以有多个这样的隐藏层。

你也会在先前的图中注意到,同一层的每个神经元都与下一层的每个神经元相连。这形成了连接,并且每条连接线都会有一个与之相关的权重。这些权重将在模型中形成不同的方程。

为什么权重很重要?

权重之所以重要,有几个原因。首先,因为同一层的所有神经元都与下一层的每个神经元相连,这意味着层之间是相连的。这也意味着与许多其他模型不同,神经网络模型不会丢弃任何预测因子。例如,你可能开始时有 20 个预测因子,这 20 个预测因子将被保留。权重重要的第二个原因是它们提供了关于每个预测因子对预测的影响或重要性的信息。正如稍后所示,这些权重最初是随机的,然而通过多次迭代,权重被修改以提供有意义的信息。

多层感知器模型的示例表示

在这里,我们将查看一个多层感知器模型的示例。我们将尝试根据个人的年龄收入性别预测一个特定商品的潜在买家。

例如,考虑以下内容:

图片

如你所见,我们的输入预测因子,即输入层,是年龄收入性别。形成我们输出层的因变量是购买,这将决定某人是否购买了产品。有一个隐藏层,输入预测因子在这里结合。

为了更好地理解神经网络模型背后的情况,让我们看看线性回归模型。

线性回归模型

让我们用一个例子来理解线性回归模型。

考虑以下:

图片

在线性回归中,输入层中的每个输入预测器通过单个连接权重与结果字段相连,也称为系数,这些系数通过数据的一次遍历来估计。系数的数量将与预测器的数量相等。这意味着每个预测器都将有一个与之相关的系数。

每个输入预测器都直接与目标连接,并以其特定的系数作为权重。因此,我们可以很容易地看到输入预测器中一个单位的变化对结果变量或目标的影响。这种类型的连接使得确定每个预测器对目标变量以及方程的影响变得容易。

一个示例神经网络模型

让我们用一个例子来更详细地了解神经网络:

图片

注意,输入层中的每个神经元都与隐藏层中的每个神经元相连,例如,输入 1隐藏层中的第一个、第二个甚至第三个神经元相连。这意味着将有三个不同的权重,这些权重将是三个不同方程的一部分。

这就是在这个例子中发生的事情:

  • 隐藏层位于输入层输出层之间。

  • 隐藏层允许有更复杂的模型,具有非线性关系。

  • 有很多方程,所以单个预测器对结果变量的影响是通过多种路径发生的。

  • 权重的解释不会是直接的。

  • 权重对应于变量重要性;它们最初将是随机的,然后将通过一系列不同的迭代并基于迭代的反馈而改变。然后它们将具有与变量重要性相关的真实含义。

因此,让我们继续看看这些权重是如何确定的,以及我们如何形成一个功能性的神经网络。

前向传播反向传播

前向传播反向传播是一种我们可以预测诸如权重和神经网络最终结果的方法。

根据这种方法,预测上发生以下迭代:

  • 如果预测是正确的,与之相关的权重将得到加强。想象一下神经网络说:“嘿,你知道什么,我们为第一个预测器的这个方程的第一部分使用了 0.75 的权重,并且得到了正确的预测;这可能是一个好的起点。”

  • 假设预测是不正确的;错误被反馈或反向传播到模型中,以便修改权重或权重系数,如图所示:

图片

这种反向传播不仅会在隐藏层目标层之间发生,还会向输入层发生:

图片

当这些迭代正在进行时,我们实际上正在通过每次错误传播使我们的神经网络越来越好。现在的连接使神经网络能够学习数据中的不同模式。

因此,与任何线性回归或决策树模型不同,神经网络试图学习数据中的模式。如果给它足够的时间来学习这些模式,神经网络结合其经验,将更好地理解和预测,极大地提高准确率。

模型训练伦理

当你在训练神经网络模型时,永远不要用整个数据集来训练模型。我们需要保留一些数据用于测试目的。这将使我们能够测试神经网络是否能够将训练数据集中学到的知识应用到新数据上。

我们希望神经网络能够很好地泛化到新数据,并捕捉不同类型数据的共性,而不仅仅是那些会使它样本特定的细微差别。相反,我们希望结果能够被转换到新数据上。在模型训练完成后,可以使用模型的经验来预测新数据。

摘要

我希望你现在对机器学习预测模型已经清楚,并且理解了基本概念。在本章中,我们了解了机器学习预测模型的特点,并了解了一些不同类型。这些概念是进一步章节的垫脚石。我们还查看了一个基本神经网络模型的示例。在下一章中,我们将在数据集上实现一个实时神经网络,你还将被介绍到支持向量机及其实现。

第二章:开始学习机器学习

在上一章中,我们了解了机器学习预测模型是什么,并对其工作原理形成了基本理解。在本章中,我们将展示神经网络模型的工作原理,并继续介绍另一种类型的模型,即(支持向量机)。

支持向量机模型。

本章将涵盖以下主题:

  • 展示神经网络

  • 支持向量机

  • 展示支持向量机

展示神经网络

让我们通过一个神经网络的实战例子来跳转。我们使用的软件是 IBM 提供的 SPSS Modeler,但您也可以自由使用任何数据挖掘软件包。

运行神经网络模型

为了运行我们的第一个神经网络,我们需要引入我们将要使用的数据,如果您使用 IBM SPSS Modeler,可以按照以下步骤操作:

  1. 使用变量文件节点获取数据,并将其拖拽到画布上:

图片

  1. 将数据集附加到源节点:

图片

点击文件框右侧的三点菜单,导航到您的数据;这里我们使用Electronics_Data

图片

点击打开

  1. 切换到类型选项卡,检查数据是否正确读取:

图片

点击读取值按钮;在弹出的提示中点击确定,您将看到以下内容:

图片

看起来数据读取正确。

  1. 我们将不会使用第一个变量ID,因此我们将将其测量设置为无类型

图片

  1. 现在让我们指定我们的状态目标变量,并将其角色设置为目标

图片

现在,Modeler 知道状态是它将要预测的变量。它将使用其他字段来预测结果变量。

  1. 查看您已添加的数据;为此,请转到画布底部的输出调色板:

图片

将源节点Electronics_Data连接到输出表节点:

图片

  1. 通过点击画布上播放图标旁边的运行选择(五角星图标)按钮来运行流:

您将看到以下数据:

图片

因此,我们有一个包含19 个字段和 5,003 条记录的表格,这意味着如果我们消除目标字段和未使用的 ID 字段,我们在这个数据集中有 17 个预测器。我们将预测状态字段,以检查我们是否失去了或保留了客户,这基于人们购买的商品数量、总收入、他们是否使用了折扣、他们支付商品的方式、位置以及其他附加的客户特征。关闭此窗口以继续。

  1. 在开始构建任何模型之前,请确保将数据集拆分为训练测试数据集,以便复制结果并验证我们构建的模型的一致性。为此,请转到字段操作面板并将源节点连接到分区节点:

图片

分区节点将创建数据集的两个版本:

图片

因此,数据集中的50将用于训练,其余的50将分别用于测试数据集。点击确定

  1. 现在,我们将构建我们的模型。为此,转到建模面板,并单击两次分区节点和神经网络模型:

图片

因此,您可以看到,状态,神经网络将要预测的变量,已经被捕获,并将为它构建一个神经网络。

  1. 点击神经网络统计节点以查看神经网络的详细信息:

图片

您可以看到有一个目标变量,我们的 17 个预测器由神经网络指定。预测器可以是任何字段类型:连续的、分类的或任何其他类型。您也可以选择不包含这些预测器中的某些。

  1. 点击构建选项选项卡:

图片

  1. 这些问题是为了了解您想用模型做什么,您是想构建一个新模型还是继续训练现有的模型。您可以选择任何目标;在我们的例子中,我们将创建一个标准模型,我们将在后面的章节中讨论其他选项。

  2. 您可以通过点击构建选项下的基本选项卡来查看您希望构建的模型类型:

图片

如您所见,我们有两种选择,即我们在本章前面看到的多层感知器(MLP)模型,以及径向基函数(RBF)模型。当您有诸如聚类预测器之类的对象时,RBFs 更受欢迎,但就我们的例子而言,多层感知器模型是最好的选择。隐藏层选项允许您指定模型中所需的隐藏层数量。目前,我们将选择自动计算单元数量。因此,模型将自动为我们计算隐藏层的数量。

  1. 转到购物规则标签页:

图片

我们的模式将经历多次迭代,并且当它不再改进时将停止;然而,它也可以因为其他原因而停止。例如,它可以在经过一定时间后停止,默认情况下,如截图所示,设置为15分钟,但您可以更改此设置。您还可以让模型在经过一定数量的迭代后停止,或者您可以告诉模型一旦达到一定水平的准确性就停止。因此,这些都是您可以停止运行模型的其他方式。

  1. 点击集成标签页:

图片

此选项使我们能够构建多个模型版本;让我们保持默认值。

  1. 转到高级标签页:

图片

我们知道,如果您让神经网络运行足够长的时间,它最终会学习到数据中的模式。这可能会是一个不希望的特性,因为我们不希望利用偶然性,因此我们希望保留一些数据,并且我们可以使用此选项设置每个迭代保留数据的值——在这种情况下,训练数据集中的30.0在每次迭代中被保留。

关于随机种子,正如我们所知,我们将多次运行我们的模型(以找到全局解而不是陷入次优解),并且我们可以生成随机种子。每次您点击生成按钮时,您都会得到一个不同的随机种子(或起始点)。

此外,神经网络不处理缺失值;它们需要完整的数据,并且您可以使用高级标签页中的预测器中的缺失值选项选择对缺失值进行什么操作:

    • 删除列表:如果任何一个变量有缺失信息,整个案例将从模型中删除。

    • 填充缺失值:在这种情况下,存在缺失值,这些值将被模型默认值替换,因此您将无法控制模型如何处理它们。因此,我的建议是在开始构建模型之前就替换缺失值。

  1. 转到模型选项标签页:

图片

模型将自动为您或计算预测的重要性。它会告诉您哪些字段在模型中是最重要的。就模型将要提供的内容而言,它将提供一个预测,并且它还将提供一个对该预测的置信度分数。通常,您应该看到预测值的概率;这是最有用的。

您也可以要求获取从下一个最可能的结果预测的类别的概率增加。如果您愿意,您还可以为所有不同的类别获取预测概率。

倾向得分最终变得非常有用,我们稍后会讨论它们。

  1. 点击运行来运行模型。现在模型已经构建完成:

图片

让我们看看我们发现了什么。

解释结果

要查看结果,点击在模型构建后自动添加的状态生成的模型。

测试数据集需要以下观察结果。让我们详细了解它们:

  1. 您将看到一个模型摘要

图片

您可以看到我们的目标是;我们知道我们运行了一个多层感知器模型,然后它提供了模型停止的原因信息,您可以看到它停止是因为错误无法进一步降低。基本上,这意味着模型不再改进,我们有一个隐藏层,这个隐藏层有七个神经元。我们还可以看到在训练数据集中整体准确率约为79%

  1. 点击右侧的下一个标签页,即预测重要性标签页:

图片

这为您提供了关于预测变量重要性的信息。因此,您可以观察到哪些预测变量是最重要的,并且对预测贡献很大。这显示了最重要的预测变量。在我们的案例中,演讲者预测变量位居榜首。要查看更多预测变量的重要性,只需将刻度向左拖动即可。

  1. 状态分类是我们的下一个观察结果:

图片

在这里,我们可以看到我们如何准确地预测训练数据集中两个组中的每一个;注意正确预测的整体百分比。您甚至可以从底部的样式标签页切换到细胞计数视图。

  1. 让我们再向下一点,点击下一个标签页:

图片

这显示给我们实际的神经网络模型。我们正在预测变量状态;我们有一个隐藏层,这个隐藏层有七个神经元,这就是我们在这里可以看到的。您可以看到每个预测变量到隐藏层中神经元的连接。

您还可以将样式效果切换到系数

图片

线条越粗,该方程中的预测变量就越重要,您甚至可以看到系数。

  1. 点击最后一个图标以获取此信息:

图片

这只是告诉我们哪个字段是我们的目标字段,哪些是我们的预测变量。

关闭窗口,现在我们将看到关于我们的训练数据集的信息。为此,将我们拥有的模型连接到表格图标:

图片

您还可以运行表格节点:

图片

这里,您将有两个新的字段,\(N-Status**,预测字段,以及**\)NC-Status,对该预测的置信度。这里,我们有训练数据集以及测试数据集的数据。

分析模型的准确性

让我们分析模型的准确性:

  1. 为了检查整体模型的准确性,请转到输出调色板并将您的模型连接到分析节点:

图片

  1. 点击分析节点并检查巧合矩阵(对于符号目标)

图片

巧合矩阵(对于符号目标)被检查以提供关于模型准确性的分解的额外信息。

  1. 点击运行,您可以在训练和测试数据集中看到整体准确性:

图片

记得我们之前在查看模型摘要时看到了相同的准确性结果,大约是 79%。与训练数据集相比,测试数据集的准确性略有下降,但这不应有很大影响。两个数据集之间的准确性差异可以在 5%以内,这样模型就足够可靠了。

因此,我们的训练数据和测试数据非常相似,这意味着我们已经构建了一个一致且可靠的模型,我们可以信赖它!

如果您查看分析中的$N-Status置信矩阵部分,您可以看到在训练数据集中,我们正确预测了790个已流失的客户和1,146个当前客户。在测试数据集中,我们正确预测了745个已流失的客户和1,231个当前客户。

测试数据集上的模型性能

由于我们将多次运行神经网络模型,创建几个显示所发现内容的表格是个好主意:

图片

您还可以创建一个基于模型中使用的种子的前 10 个预测因子的表格:

图片

为了评估您模型的性能,您可以像我们之前多次做的那样重新运行模型,并在每次运行时检查模型的准确性。您甚至可以用不同的种子和不同的起点来运行它。因此,获得的结果会有所不同,但相当相似。如您所知,我们多次重新运行模型以找到最佳解决方案。

为了检查结果的一致性,您可以在每次重新运行模型时以这种方式扩展您的模型性能表:

图片

在这些模型中,你可以选择最有意义的模型。例如,正如你所见,最后一个种子为 5000 的条目具有最高的整体准确率。它在预测流失客户方面也具有最高的准确率。但在预测当前客户方面准确率最低。因此,你可以确定对你最重要的解决方案,并据此选择最佳模型。

每次重新运行时,前 10 个预测因子也会随着结果的微小变化而变化。每次运行模型时,你可以记录前 10 个预测因子,并扩展你之前创建的前 10 个预测因子表:

图片

正如你所见,许多预测因子继续是最重要的,例如首要预测因子,而有些预测因子只出现一次或两次——例如,员工数量预测因子。这类列出前 10 个预测因子的表格也可以帮助你选择所需的模型。你还可以利用这些信息创建一个新版本模型,其中你不想使用最初使用的预测因子,而只想使用那些作为前十个中最常见的预测因子或任何在前十个中出现的预测因子。

由于我们已经在减少预测因子的数量,这不仅会简化对模型的了解,而且最终会创建一个比某些情况下更简单的模型,这实际上可能更准确,因为你正在去除那些其他预测因子可能带来的额外噪声。

支持向量机

支持向量机(SVMs)模型是为了预测分类和连续结果而构建的,当有多个预测因子时尤其出色。它们是为了解决线性模型无法分离结果字段类别等难以预测的情况而开发的。它们也像黑盒一样工作,隐藏了预测结果中的复杂工作。让我们深入了解 SVM 是如何工作的。

与支持向量机(SVM)一起工作

假设,例如,有一种数据无法使用如图所示的单一线条进行分离:

图片

将这些形状视为不同类型的数据。正如你所见,我们无法仅通过在它们之间画一条线来分离数据簇。但如果用复杂的曲线,如圆形,而不是直线,就可以轻松完成区分的任务,就像图中所展示的那样。

支持向量机(SVM)的主要任务是将原始数据从这种复杂空间转换到另一个空间,在这个空间中,分离数据点的函数要简单得多。这项任务被称为核变换

核变换

核函数是一个数学函数,它将数据转换。之所以称为SVM,是因为向量形成了不同数据组之间的边界,如图所示:

图片 4

因此,我们在下面放置了圆圈,在上面放置了正方形,边界是向量。这些向量边界正在分隔两组。向量是那些充当组之间边界的案例。

因此,在这个阶段,我们可以有几个解决方案:

图片 2

这表明我们不再需要圆形或复杂的曲线来分隔数据组。

但最佳解决方案是什么?

我们最终需要找到最佳解决方案。最佳解决方案将是最大化组间分离度,同时平衡对新数据函数可能过拟合的权衡。这个新数据包括一个权重因子或正则化因子,它向函数添加惩罚,以最大化向量之间的间隔同时最小化误差,如图所示:

图片 6

核函数类型

SPSS Modeler中,有四种不同的核函数类型:

  • 线性:一个简单的函数,适用于很少的非线性关系

  • 多项式:一个更复杂的函数,适用于某些非线性关系

  • RBF(径向基函数):类似于工作良好的循环神经网络(RNN),适用于非线性关系

  • Sigmoid:类似于工作良好的两层神经网络,适用于非线性关系

展示支持向量机(SVM)

在本节中,我们将运行一个 SVM 模型,看看它是如何工作的。

首先,获取你的数据集,就像为神经网络所做的那样,将数据集分为训练集和测试集,并创建如下场景:

图片 3

让我们看看如何运行 SVM:

  1. 转到建模调色板,并将分区节点连接到SVM

图片 1

  1. 转到专家选项卡,并在模式中选择专家选项。记住,无论何时运行SVM模型,都必须始终以专家模式运行,因为这是一个需要根据模型状态不断更改默认值的模型。专家模式将使我们能够在需要时轻松更改值:

图片 5

让我们详细讨论这些选项:

    • 当你有分类结果时,可以勾选追加所有概率复选框。但,目前让我们保持默认设置。

    • 停止标准也可以更改,尽管你不需要经常修改它。

    • 正则化参数默认设置为10,您可以选择从210的任何值。正则化参数的值越高,模型上的过拟合就越多,并且更有可能在训练数据集上获得更好的结果,但在测试数据集上,结果可能会下降。因此,让我们将正则化参数值更改为5,因为它是一个中间值,将为我们提供一个在训练和测试数据集上都表现良好的稳定模型。如果您在5的值上得到一个稳定的模型,您可以将其增加到7,以略微增加过拟合,以获得略微更好的结果。如果您在5的值上没有得到一致的结果,那么我们可以将其减少到3左右,以尝试减少过拟合。因此,我们将需要根据我们的结果修改正则化参数。

    • 回归精度参数或 epsilon 是一个相当低的值,用于表示误差。我们希望我们的误差低于在此字段中设置的值。此参数仅在存在连续结果字段时才起作用,而我们的数据集并非如此。

    • 我们已经看到了四种类型的核变换;线性是最简单的一种,我们将从这里开始。我们可以首先用线性变换测试模型,如果表现良好,我们可以通过选择任何其他类型的变换来增加复杂性。

这里是我们在专家标签页中选择的值的摘要:

图片

  1. 点击分析标签页。让我们看看这个标签页包括什么:
    • 我们可以计算此模型的倾向得分;我们将在后面的章节中讨论这一点。

    • 预测变量重要性也可以计算。在这里,对于 SVMs,默认情况下不检查这一点。原因在于,如果您选择此选项来计算预测变量重要性,SVMs 构建模型会花费相当长的时间。您将多次运行此模型,并在其间更改许多参数。最后,当您找到最佳解决方案或理想模型时,您将重新运行模型,那时您就可以检查计算预测变量重要性的选项。这将节省大量时间。

  1. 点击运行。您将看到一个构建如下模型:

图片

  1. 现在,将生成的模型连接到表格中查看结果:

图片

  1. 点击表格,然后点击运行。如果您滚动到末尾,您将在\(S-状态**和**\)SP-状态下找到预测:

图片

您还可以看到,尽管模型是基于测试数据集构建的,但我们已经得到了训练和测试数据集的结果。

  1. 您现在可以关闭表格窗口,并点击模型,状态,以检查摘要和模型设置。点击确定

当前模型就像一个黑盒。我们不知道我们是如何得到结果以及它是如何预测值的。让我们找出答案。

解释结果

正如我们对神经网络模型所做的那样,我们将检查我们构建的模型的准确率。为此,选择状态并转到输出调色板,然后选择分析

点击分析,就像我们之前对神经网络所做的那样,点击符号目标的一致性矩阵并点击运行;你将得到这个:

因此,我们目前有一个非常一致的模型!

再次,让我们将结果记录在如下表格中:

如你所见,除了为神经网络制作的表格外,我们还有一种我们使用的模型类型,以及获得此模型所使用的正则化参数值。我们得到了一个非常一致的模型,使用线性变换类型,并将正则化参数值设置为5。但这也意味着我们可以尝试一个稍微更好的正则化参数值,看看我们是否能得到更好的解决方案。让我们继续寻找更好的解决方案。

尝试额外的解决方案

返回到SVM模型,状态,并点击专家选项卡。你可以将正则化参数提高到更高的值,因为模型在5时是一致的;这可以视为一个练习。但,相反,我们将为下一次运行更改核类型为最复杂的Sigmoid类型。不建议更改偏置值。但你可以更改Gamma以获得更好的结果,你可以在以后实验这些值。现在,我们将它们保持为默认值,并点击运行

点击分析选项卡,然后点击运行。以下是我们的结果:

模型是一致的,但正如你所看到的,准确率百分比显著低于我们在线性模型中找到的。因此,与线性模型相比,此模型并没有做得更好。这意味着 Sigmoid 类型不起作用。

这使我们得出结论,最适合我们数据集的核变换类型是最简单的线性变换。因为数据本身也不是真的很复杂。但是,你必须多次重新运行模型以验证你的结果。

这里是我对所运行模型的分析:

你现在可以看到哪种类型的核变换以何种方式与每个预测因子一起工作。你可以选择对你来说重要的预测因子,并选择它作为最佳模型。

摘要

在本章中,我们学习了如何使用神经网络模型。然后我们继续介绍了 SVM 模型,并演示了 SVM 的工作原理。我们了解了如何处理不同类型的核变换。

在下一章中,我们将更详细地探讨机器学习模型。

第三章:理解模型

在本章中,我们将探讨一般模型解释。我们将查看不同类型的预测模型。然后我们将使用各种技术来解释一些机器学习模型。

本章我们将涵盖以下主题:

  • 模型的类型

  • 使用图表来解释机器学习模型

  • 使用统计方法来解释机器学习模型

  • 使用决策树来解释机器学习模型

模型

有三种不同的预测模型:

  • 统计模型

  • 决策树模型

  • 机器学习模型

统计模型

统计模型首先确定模型中最重要的预测因子。统计模型还创建了一个方程,允许您进行预测。例如,正如我们可以在下面的截图中所见,预测方程中的系数已被突出显示:

下面的截图突出了预测当前工资的公式:

在下面的截图中,我们可以看到我们取了变量起始工资的系数,并将其乘以实际起始工资:

现在,我们取教育水平的系数,并将其乘以一个人的教育年限:

我们还需要这个人的年龄,这在下面的截图中被突出显示:

我们将所有值与其相应的系数相乘,最后将所有常数相加,从而预测这个人的工资将会是多少。现在这很好。但除此之外,统计模型还允许我们确定每个预测因子单位增加的影响,并且您可以看到这个预测因子对不同的结果变量的影响。

例如,就教育水平而言,我们看到它有一个系数为298。这告诉我们,一个人的当前工资会随着这个人额外教育年限的增加而增加 298 美元:

因此,您可以真正看到每个个体独立变量的影响以及它最终如何影响整体预测。

决策树模型

正如统计模型一样,决策树模型帮助您确定模型中最重要的预测因子。没有方程,我们无法确定单位增加的影响及其对结果变量的影响。相反,我们将创建规则,通过将数据分割成两个相互排斥的类别来进行预测。

例如,正如您可以在下面的截图中所见,我们有一个变量Premier值为的任何人:

如下截图所示,我们有任何三年或三年以下的客户:

图片

我们还有估计收入低于或等于约 400 万的人,如下截图所示:

图片

他们碰巧位于另一个国家,我们预测他们将流失,如下截图所示:

图片

该规则应用于 25 人,该规则的准确率为 100%,如下截图所示。因此,对于所有符合这些标准的客户,我们最终 100%地失去了他们作为客户。

接下来,还有第二个规则,它与第一个规则完全相同。唯一的区别是位置是一个国家级客户,你会注意到我们仍在预测将要流失的客户。该规则适用于47个人,但该规则的准确率仅为 66%:

图片

现在,乍一看,这些规则可能相当相似,但这就是你必须回去并尝试识别真正发生的事情的地方。

注意,当所有标准都满足,并且我们碰巧有一个国际客户时,我们总是失去他们,但当我们有国家级客户时,我们仍然最有可能失去他们,但我们并没有全部失去。你可能想问自己为什么?嗯,也许你可以回到销售代表那里。他们可能会告诉你,他们每季度都会给国家级客户打电话,看看他们的情况,而一个电话就成功地保留了一些客户,这样你就不会失去他们。所以,决策树允许你创建不同的规则,这些规则允许你做出预测,然后你可以很好地看到模型的内部运作。

机器学习模型

就像统计模型和决策树模型一样,机器学习模型确定模型中最重要的预测因子。

在以下神经网络模型的示例中,我们看到扬声器变量是最重要的,其次是高级,然后是电视

图片

因此,这些是最重要的预测因子,这就是我们所能得到的一切。我们得不到任何方程或规则。我们甚至不知道关系的方向,例如,我们更有可能保留还是失去购买更多扬声器的客户?我们真的不知道;我们不会从任何机器学习模型中得到这种信息,因为它们都是黑盒子。

因此,在下一节中,我们将看到如何确切地解释机器学习模型的结果。此外,我们还将看到如何使用图表来解释机器学习模型。

使用图表来解释机器学习模型

在本节中,我们将了解如何使用图表来解释机器学习模型的结果。具体来说,了解你有什么样的数据非常重要,因为数据类型将决定你可以创建的图表类型。这个图表将帮助你理解机器学习模型的预测中包含了哪些因素。我们还将了解机器学习模型是如何使用这些不同变量进行预测的,并最终将这些预测用于我们的最终解释。

例如,当我们有一个分类变量的结果变量,并且我们的预测变量也是一个分类变量时,我们可以使用条形图或网络图。我们可以使用这两种类型的图表来帮助我们理解机器学习模型是如何进行预测的。以下表格表示数据和图表的组合:

分类 连续
分类 条形图/网络图 直方图
连续 直方图 散点图

如前表所示,当我们有一个分类结果变量,但有一个连续的预测变量时,我们可能不得不使用直方图。直方图可以帮助我们直观地理解那些预测背后的情况。

现在我们来看看其他一些可能性。比如说,我们的结果变量实际上是一个连续变量,但我们有一个分类预测变量,所以这里我们可以使用直方图。最后,当我们有一个连续变量的结果变量和一个连续变量的预测变量时,我们可以使用散点图。我们将在接下来的章节中看到相关的例子。

在上一节中,我们构建了一个神经网络模型。让我们看看我们构建的模型:

  1. 让我们使用上一章中创建的模型:

  1. 随机种子设置为5000,然后运行模型

  1. 点击新生成的模型,在观察中我们可以看到Premier变量是最重要的预测变量,其次是Years_as_customer,然后是StereosTVs等等:

现在我们知道了这个模型中最重要的预测变量,但我们不知道这些预测变量是如何被模型使用的。因此,我们将调查它们之间的关系。

有几种方式可以了解模型组件之间的关系。我们可以使用图表或表格。让我们通过几个例子来了解一下:

  1. 选择记录操作调色板。

  2. 将生成的模型连接到选择节点。

  3. 让我们看看训练数据集的数据。我们将保持测试数据集独立,因为我们将在以后使用这些数据来验证结果。

  4. 点击选择节点进行编辑。

  5. 点击表达式构建器

  1. 选择任何变量。例如,选择分区变量,选择=,以及训练数据集:

图片

  1. 这就是表达式将呈现的样子,点击确定

图片

我们只选择了训练数据集中的人员。现在,让我们看看这个模型中实际预测与重要变量之间的关系,以了解这些变量是如何被模型使用的:

  1. 前往图形调色板,将选择节点连接到分布节点。分布节点基本上是一个柱状图,如下面的截图所示:

图片

  1. 编辑分布节点。选择高级字段:

图片

注意这里只有分类字段可用:

图片

我们选择高级变量,因为这是模型中最重要的预测变量,我们将看到这个变量在其预测中的使用情况:

  1. 点击叠加按钮:

图片

  1. 选择变量$N-状态,这是我们实际的预测:

图片

  1. 为了使比较更简单,点击通过颜色进行归一化:

图片

  1. 点击运行,你就可以看到这里所做的工作:

图片

注意蓝色与被预测为将要流失的人相关联,红色与被预测为当前客户的人相关联。你还可以看到,我们将高级客户与当前客户相关联。那些不是高级客户的人我们将其与蓝色相关联,这意味着我们预测他们将流失。

因此,这就是你如何调查分类预测变量和分类结果变量之间的关系。我们可以使用类似柱状图的东西,在这种情况下,在 Modeler 中称为分布节点;在其他软件包中可能会称为柱状图,但你现在可以看到这两个分类变量之间的关系。让我们使用网络节点来查看两个分类变量之间的关系:

  1. 下降到图形调色板,将选择节点连接到网络节点:

图片

  1. 编辑网络节点,你可以将其构建为一个网络,这基本上允许我们将许多分类变量放在一起,或者我们可以创建一个有向网络,这样那些类别中的所有分类变量都指向一个特定的变量,这正是我们要做的。选择有向网络

  2. 点击字段框

  3. 添加您的预测,即$N-Status变量,添加所有其他分类变量:

图片

  1. 以下截图显示了所有选定的标志字段:

图片

  1. 添加其他分类字段。选择Payment_Method

图片

  1. 按住Ctrl键向下滚动并选择TV_Categories,然后点击OK

图片

  1. 线值设置为绝对值,如图所示:

图片

  1. 线值设置为“从”字段/值的百分比。从这些预测器字段中,我们将看到这些值与结果字段的关系,然后点击运行

图片

注意,有两条线比其他线略粗:

图片

您可以看到其中一条线值说Yes。另一条线值说No,它们都与当前和流失字段相关,如下面的输出所示。

让我们看看最粗的Yes线:

图片

我们可以看到这一行显示的是,在Premier变量上有Yes值的人,预测与当前客户相关,然后我们可以看到预测为当前客户的87%的人,在Premier变量上的值也是Yes

同样,下一条最粗的线将是我们位于Premier变量上的那条线。我们有一个No的值,这与流失相关,而这个值最终是80%

  1. 这是我们查看分类预测器和分类结果变量之间关系的另一种方式。最强的关系是在Premier变量和结果变量之间:

图片

  1. 让我们看看连续预测器和分类结果变量之间的关系。要做到这一点,我们将转到图形调色板,并将选择节点连接到直方图:

图片

  1. 编辑直方图,在字段框中,选择TVs字段。选择TVs字段,因为这是模式中最重要的预测因子之一:

图片

  1. 在叠加颜色框中,输入预测变量$N-Status

图片

  1. 转到选项选项卡,点击按颜色归一化以使比较更容易,然后点击运行

图片

  1. 我们将看到以下结果:

图片

我们可以看到,蓝色与那些我们预测将要失去的客户相关联。红色与那些我们预测将要保留的客户相关联。注意,购买较少电视的客户,我们预测大约有 50%的可能性会保留或失去这些客户。基本上,如果我们购买很多电视,我们认为我们更有可能失去这些客户。这就是这个变量在模型中被使用的方式,模型描绘的是,如果你不购买很多电视,我们保持或失去你作为客户的可能性几乎是相等的,但如果你购买了很多电视,我们认为你作为客户的可能性更大。

在这个例子中,我们将查看两个连续变量之间的关系:

让我们使用不同的数据集。引入变量文件节点:

  1. 编辑此节点并将其链接到数据集。导航到我们的数据集Bank_Data的位置,选择文件:

  2. 打开数据集。它是一个逗号分隔的文件,如下面的截图所示:

图片

  1. 转到类型选项卡,点击读取值然后选择确定。你将看到你的变量:

图片

salnow是我们的因变量。因此,确保它是一个目标变量。如果不是,则将其角色更改为目标。将id的角色设置为。所有其他变量都将作为当前工资变量的预测变量。点击确定

  1. 让我们看看我们的结果变量(恰好是一个连续变量)与另一个连续变量(即预测变量)之间的关系。转到图形调色板,将源节点连接到绘图节点:

图片

绘图节点将允许我们创建散点图。所以,让我们编辑绘图节点。

  1. X 字段框中,我们将输入我们的预测变量,这里我们将添加教育水平,即一个人拥有的教育年限,在Y 字段框中,我们将添加我们的结果变量,即salnow,即当前工资:

图片

  1. 点击运行,我们得到以下图表作为结果:

图片

你可以看到,随着教育年限的增加,当前工资也会增加。我们有一个正的线性关系,这意味着当一个变量增加时,另一个变量也会增加,所以更多的教育最终会导致更高的当前工资,而较少的教育则与较低的当前工资相关。

因此,这是我们表示两个连续变量之间关系的一种方式。在下一节中,我们将看到如何使用统计测试来解释机器学习模型的结果。

使用统计来解释机器学习模型

在本节中,我们将使用统计方法来解释机器学习模型的结果。我们讨论了图表以及它们如何使我们能够看到和解释机器学习模型的预测,但我们也可以使用这些图表进行统计检验。看看以下表格:

分类 连续
分类 卡方 方差分析
连续 方差分析 相关系数

假设我们有一个分类结果变量和一个分类预测变量,我们可以使用卡方检验。独立性卡方检验将使我们能够查看两个分类变量之间的关系。

此外,如果我们有一个分类结果变量和一个连续预测变量,我们可以使用方差分析来分析方差。如果我们有两个类别进行比较,我们可以使用 t 检验,这将使我们能够解释正在发生的事情。另一方面,如果我们的结果变量是一个连续变量,而我们有一个分类预测变量,我们可以使用方差分析。如果我们想的话,我们也可以使用逻辑回归或判别分析。最后,当我们的两个变量都是连续变量时,我们可以使用相关分析或线性回归。让我们看看一些例子。我们将概述一些这些技术,以便我们可以理解机器学习模型内部的工作原理。

让我们看看一些表格如何帮助我们澄清变量之间的关系,以及这些不同的预测变量是如何被模型使用的。

前往输出调色板,将选择节点连接到矩阵节点:

矩阵节点将允许我们进行卡方检验,这将帮助我们查看两个分类变量之间的关系。在这种情况下,我们将查看分类预测变量和分类结果变量之间的关系。让我们编辑矩阵节点。在字段中,我们将输入我们的预测,即$N-Status变量,在字段中,我们将选择模型中的重要预测变量,即高级变量:

前往外观选项卡,选择列百分比,这意味着我们将得到列百分比,然后点击运行:

我们将得到以下结果:

我们实际上有一个具有统计学意义的卡方检验,因此高级是模型中的一个重要预测变量。

我们还得到了一些数值信息,这些信息支持我们在之前的图表中看到的内容。我们可以看到,大约80%的人,即与流失相关的非高级客户,以及大约87%高级客户与当前客户相关。

这就是模型所做的工作。现在,我们理解了模型中至少有一个变量是如何被使用的。

理解连续预测变量与分类结果变量之间的关系

在本节中,我们将查看连续预测变量与分类结果变量之间的关系。为了做到这一点,我们可以运行 t 检验或方差分析,在 Modeler 中也称为均值节点:

  1. 选择节点从输出调色板连接到均值节点:

图片

  1. 编辑均值节点。在分组字段框中,输入预测值,即$N-Status变量:

图片

测试字段框中,选择所有连续变量。同时,取消选择实际的置信度:

图片

  1. 点击确定然后点击运行。您将得到以下输出:

图片

我们可以看到,大多数变量最终区分了流失预测和当前客户预测。有一些预测变量并不重要。例如,估计收入在统计上并不显著,员工数量也是如此,但其余的预测变量都非常重要。

现在,我们看到了均值。但是,让我们尝试获取更多信息。我们将视图简单改为高级,我们将得到以下结果:

图片

如您所见,每个这些变量都有相同数量的案例。最重要的预测变量最终变成了电视变量,正如我们在以下屏幕截图中所见,这是能够最大程度地区分这些组的一个变量。

例如,看看电视字段,我们可以看到,当前客户是我们预测会流失的客户,我们认为我们会失去这些客户,平均购买了 2.4电视。这个预测显著高于那些预测会继续作为当前客户的人,他们平均只购买了一台电视。正如我们所见,我们得到了一个具有统计显著性的结果。当涉及到立体声音响时,情况相反。您可以看到,我们得到了一个具有统计显著性的结果,然而您可以看到,我们预测会失去的客户平均购买了13.2台立体声音响,而那些我们预测会继续作为客户的人平均购买了16.2台立体声音响。

我们将要做的最后一件事是查看两个连续变量之间的关系。之前,我们使用散点图来展示两个连续变量之间的关系。在这里,我们将通过计算相关系数来量化这一点:

  1. 使用银行数据集,在 Modeler 的输出调色板中,将统计节点连接到源节点:

图片

  1. 编辑统计节点,这允许我们在检查框中获取汇总统计信息。点击字段选项并选择当前薪资:

图片

  1. 点击确定并将当前薪资与其他连续变量进行相关性分析。点击相关性框旁边的箭头并选择尺子图标,这将选择我们所有的连续变量:

图片

  1. 按住Ctrl键并取消选择id

图片

  1. 点击确定然后点击运行。您将看到以下结果:

图片

如我们所见,当前薪资与起薪的相关性非常高:

图片

记住,相关性值可以从-1 到+1 不等。数值离零越远,关系越强。如果相关性系数为正,这意味着一个变量的值增加时,另一个变量的值也增加。如果相关性系数为负,这意味着一个变量的值增加时,另一个变量的值减少。

注意到起薪和当前薪资之间的相关性非常高,几乎达到 0.9。您还可以看到教育法与当前薪资之间的相关性也很高,达到 0.66。

另一方面,您可以看到,某人在这个特定职位上工作的时间和之前就业的月数与当前薪资的相关性并不大。注意,相关性值实际上非常接近零。

这为我们提供了关于关系的类型的信息,并允许我们量化这些关系。在下一节中,我们将看到如何使用决策树来解释机器学习模型的结果。

使用决策树来解释机器学习模型

在本节中,我们将从机器学习模型中提取预测结果,并使用这些预测结果作为我们的结果变量。然后我们将使用原始预测变量来了解发生了什么,即机器学习模型的逻辑。

此前,我们看到了如何使用不同的图表和表格来了解仅一个变量、一个预测变量与结果变量之间的关系,这些信息是有用且重要的。但通常,模型会同时使用许多变量。因此,查看一个预测变量是有用的,但它并不能完全展示出完整的画面。

另一种技术是使用决策树模型来帮助我们理解神经网络模型或任何类型的机器学习模型背后的逻辑。

在这里,我们将从模型中获取预测,并使用该预测作为我们的结果变量。然后,我们将从模型使用的预测因子开始:

  1. 前往字段操作调色板,并将生成的模型连接到类型节点:

图片

  1. 编辑类型节点,并更改状态变量的原始结果的角色。由于我们将将其角色更改为,因此它将不再被包括在我们将要构建的模型中:

图片

  1. 稍微向下滚动一点。在这里,$N-状态预测不再是仅仅是一个预测或输入;实际上,它将成为目标本身。这正是我们要预测的:

图片

在这里,我们试图了解神经网络模型(或任何类型的机器学习模型)的内部。查看模型的预测,并使用它所使用的变量来尝试理解其逻辑。

  1. 从那个预测中移除置信值,因为它不是必需的。将其角色更改为并点击确定

图片

在这一点上,我们必须使用另一个模型来了解机器学习模型预测期间发生了什么。我们可以使用统计模型。但是,统计模型对数据的许多要求和假设很多。此外,它们不能很好地处理复杂的交互和非线性关系。

在尝试复制神经网络模型所做的工作方面,决策树模型可能会做得最好:

  1. 前往建模调色板,选择决策树模型来了解神经网络模型背后的情况。将类型节点连接到C&R树模型:

图片

我们将预测神经网络模型的预测。

  1. 当你编辑该模型时,你将使用神经网络模型最初使用的所有预测因子来理解这些预测背后的情况:

图片

  1. 点击运行,查看生成的模型:

图片

  1. 我们将得到以下结果:

图片

注意,C&R模型也认为总理变量是模型中最重要的预测因子。C&R模型有很多与神经网络模型相同的预测因子,这些预测因子是最重要的。这很重要,因为我们想确保我们理解神经网络模型(或任何机器学习模型)的逻辑。

  1. 点击全部按钮。

  2. 点击%按钮,我们可以看到这些预测背后的某些数字:

图片

我们对预测我们的结果变量状态不感兴趣。相反,我们试图理解神经网络模型预测背后的推理。

在这里,你可以看到我们正在使用多个变量。看看前面的截图。第一条规则说,如果变量是高级会员,你的值为,并且你作为我们的客户不到四年半,你购买的电视数量不超过一台半,你购买的扬声器数量不超过十点五台,我们预测你将失去作为我们的客户。这条规则适用于 41 人,该规则的置信度约为 81%。另一方面,如果所有相同的标准都适用,即你仍然是非高级会员客户,你作为客户的时间不长,你购买的电视数量很少,但你购买了超过 10.5 台的扬声器,我们预测你将是一个当前客户。这条规则适用于 127 人,该规则的置信度是 88%。

现在,我们试图理解神经网络模型可能正在执行的逻辑。这并不完全等同于神经网络模型所做的那样,因为神经网络模型和决策树模型的算法非常不同。我们只是试图理解神经网络模型背后的逻辑。在这种情况下,我们有一整套标准,最终使我们能够同时使用或查看多个变量之间的关系以及它们如何影响预测。这仅仅是你可以用来尝试理解机器学习模型预测背后发生的事情的另一个工具。

摘要

在本章中,我们首先探讨了不同类型的预测模型。然后我们使用这些模型来解释机器学习模型。

在下一章中,我们将探讨我们可以用来改进单个模型的不同方法。

第四章:提升个体模型

在本章中,我们将看到如何提升不同的模型,以及如何修改模型选项。我们还将学习如何使用不同的模型,并了解如何通过移除对预测并非真正必要的预测变量来去除噪声。您还将了解如何为模型准备额外的数据,我们将看到如何添加额外的字段。最后,您将看到过采样和欠采样结果变量的不同类别如何使您最终使用的模型更有可能真正理解数据。

本章将涵盖以下主题,以及模型可以如何被提升:

  • 修改模型选项

  • 使用不同的模型

  • 去除噪声

  • 进行额外的数据准备

  • 平衡数据(过采样/欠采样)

修改模型选项

通过修改模型选项来改进模型是提升模型的一种直接方法。我们将通过一个例子来展示如何做到这一点:

  1. 我们将创建一个与第二章中相同的 SVM 模型:

  1. 点击状态,转到专家选项卡,并在模式下选择专家。正如我们在第二章“机器学习入门”中看到的,当我们使用 SVM 模型时,我们需要修改它们的设置。将正则化参数更改为 5。然后,在核类型中选择多项式。然后,点击运行。

  2. 您将看到一个模型被创建。现在,让我们进行下一步,分析模型。将您的生成模型连接到输出调色板中的分析节点。打开分析节点,选择巧合矩阵(对于符号目标选项)并点击运行。这将是我们获得的结果:

结果清楚地显示,模型并不一致,因为训练集和测试集的准确率百分比之间存在巨大差异。但我们看到的是,测试百分比比我们在第二章“机器学习入门”中获得的线性模型的测试百分比要好,大约为 73%。因此,也许多项式模型可以做得更好,但不是当前的模型,因为它正在利用机会。

现在我们有一个可能更好的模型,我们可以继续修改这个模型的设置。您可以转到 SVM 模型状态,在专家选项卡中,您可以看到度数设置为 3。有可能这个三次函数对于我们拥有的数据来说可能有点复杂。让我们改用一个二次函数。将度数更改为 2 并点击运行。

再次,像我们以前做的那样运行分析,您将找到以下结果:

如您所见,两个数据集的准确率百分比之间的差异在 5%以内。因此,我们可以说该模型是一致的。此外,我们还可以看到测试数据集的整体准确率有所提高。

这就是我们通过修改其选项来改进现有模型,以提供具有更高整体准确率和一致性的更好结果的方式。

使用不同的模型来提高结果

在上一节中,我们看到了如何通过修改其选项来改进从模型中获得的结果。现在,我们将看到如何通过更改模型本身来提高结果。

每个模型看待数据的方式都不同。它们有自己的算法。这些算法为我们提供了不同的视角来观察数据。有时,仅仅改变观察数据的方式就能给我们带来更好的结果。不同的算法利用数据的独特方面。让我们通过一个例子看看我们如何做到这一点:

  1. 带上您的数据,将其分为训练集和测试集。

  2. 将“分区”节点连接到建模调色板中的“神经网络”节点:

图片

  1. 点击“神经网络”节点,然后转到“构建选项”标签页。在这里,转到“高级”选项,只需将随机种子更改为5000

图片

  1. 我们保持随机种子为5000的原因是,我们使用5000作为种子获得了更好的结果,正如您可能从第二章,“机器学习入门”,中回忆的那样,我们在其中演示了一个神经网络。

  2. 点击“运行”。

  3. 再次,您将不得不分析构建的模型。为此,回想一下我们迄今为止所遵循的步骤。转到输出调色板,将生成的模型节点连接到“分析”节点。使用勾选的巧合矩阵运行“分析”节点。以下将是获得的结果:

图片

  1. 您可以看到,我们的整体准确率约为 80%,以及每个预测的表现。整体准确率与我们使用 SVM 模型时达到的准确率相似。因此,我们可以说 SVM 和神经网络模型在这个数据集上表现同样出色。让我们看看我们如何进一步提高这些结果。

  2. 在这个例子中,我们将使用决策树。为了添加决策树节点,选择“分区”节点,并将其从建模调色板中的 C5.0 节点连接:

图片

C5.0 模型是一个决策树模型,它从非常不同的角度观察数据。

  1. 点击 C5.0 模型节点以构建C5.0模型并运行它:

图片

  1. 现在,将 C5.0 模型节点连接到神经网络生成的模型节点。

  2. 将 C5.0 生成的模型连接到“分析”节点:

图片

这将使我们能够非常容易地比较结果。

  1. 运行分析节点。以下将是获得的结果:

如您所见,使用 C5.0 模型对测试数据集的整体准确率为 85%。这比我们仅使用神经网络模型获得的结果要好得多。我们当然可以通过对 C5.0 模型进行一些修改来进一步提高这一点,我将把它留作您的家庭作业练习。

因此,我们看到了 C5.0 模型略微提高了结果,并在总体准确性和对训练集和测试集的每个预测方面都做得很好。这只是另一种提高模型性能的方法的例子。我们现在将看到去除数据中的噪声如何给我们带来更好的结果。

去除噪声以改进模型

让我们关注噪声如何影响结果。噪声不过是缺失数据、异常值或试图用不必要的预测来混淆模型的过多预测因子。

决策树模型由于默认情况下会消除它们不用于预测的预测因子,因此不会因为预测因子太多而产生噪声,这与其他统计和机器学习模型不同。

模型中过多的预测因子会导致以下问题:

  • 数据中的额外噪声会影响模型的总体准确性

  • 模型变得比应有的复杂得多

  • 如果要添加新的数据以进行新的预测,我们需要收集那些不重要且实际上并不需要用于预测的变量的数据,因为我们的模型在某种程度上会使用它们。

如果这些类型的预测因子从模型中清除并消除,这可能会简化模型的理解,并且可能还会给出更好的结果。

如何去除噪声

让我们通过一个例子来理解。按照以下步骤操作:

  1. 将您的数据划分为训练集和测试集。

  2. 将您的分区节点连接到建模面板中的神经网络模型。

  3. 选择模型,就像我们一直做的那样,转到“构建选项”选项卡,然后转到“高级选项”,将随机种子更改为5000(因为到目前为止这已经给出了最佳结果)。点击运行。

  4. 我们之前已经看到过这个模型的准确性。请参考我们在第二章“机器学习入门”中演示神经网络时获取并存储在表中的不同随机种子前 10 个预测因子列表:

我们现在将去除那些在任何模型中都没有出现或只出现几次的变量。

  1. 为了去除变量,我们将创建这个神经网络模型的另一个版本。将分区节点连接到建模面板中的另一个神经网络模型:

  1. 编辑新的神经网络模型:在这里,在字段选项卡中,我们将移除任何模型中未出现在前 10 位列表中的预测因子:

图片

您只需从输入列表中选择预测因子,然后点击指向左侧框的箭头。如果需要,您也可以使用相同的方法恢复它们。这些是未出现在任何模型前 10 位列表中的变量。

  1. 我们还将移除在列表中只出现一次或两次的变量:

图片

  1. 前往构建选项选项卡的高级选项,并将随机种子更改为5000。然后点击运行。

  2. 将第一个神经网络模型连接到第二个神经网络模型:

图片

  1. 将第二个神经网络模型连接到输出调色板中的分析节点:

图片

  1. 运行分析节点,就像我们一直做的那样。以下将是两个模型的比较分析:

图片

如您所见,第二个模型的测试和训练数据集的整体准确率略高于第一个模型。因此,我们仅通过去除一些不必要的预测因子就提高了 2%的可预测性。如果我们看到模型在预测每个单独类别的工作,去除噪声的模型在这方面也做得很好。

因此,我们探索了另一种提高模型获取结果的方法。我们看到了如何通过去除噪声,通过消除不必要的变量或预测因子来减少变量的数量,可以给我们带来更好的结果。让我们继续看看另一种提高准确性的方法。我们将看到如何准备数据在一定程度上可以给我们带来更好的结果。

进行额外的数据准备

在本节中,我们将看到对数据进行额外准备如何使我们能够提取额外的信息。

到目前为止,我们通过修改选项、使用不同的模型、改变观察数据的角度以及去除噪声来改进我们的模型。然而,有时这些技术只会略微提高模型;但如果你能回到数据准备阶段,寻找可以从数据中提取的额外信息,这真的可以在提高准确性方面走得很远。

准备数据

按照以下步骤在数据准备阶段准备数据:

  1. 获取您的数据并将其分区。

  2. 再次运行神经网络模型,随机种子为5000。我们将得到大约 80%的准确率。

  3. 现在,我们将创建一个新的模型并添加一个额外的预测因子。如果你回到前十个预测因子列表,我们会发现像客户购买的演讲者和电视机的数量这样的预测因子。因此,有一个显示购买项目总数的预测因子是有意义的。

  4. 前往字段操作调色板,并将分区节点连接到导出节点:

图片

导出节点允许我们创建额外的变量。

  1. 编辑导出节点。将导出字段设置为“总项目”,然后点击公式字段右侧的表达式构建器按钮,通过选择感兴趣的预测因子并点击加号按钮来创建一个表达式:

图片

这意味着“总项目”包括立体声、电视和扬声器。你将在公式字段中得到一个表达式,如下所示:

图片

这是用于“总项目”的表达式。点击确定。

  1. 我们刚刚创建的变量需要实例化,以便模型能够使用它;为此,从字段操作调色板将总项目节点连接到类型节点:

图片

  1. 编辑类型节点。点击读取值按钮来读取新变量:

图片

如你所见,“总项目”预测因子现在已被读取,并且它将被计为模型中的输入预测因子。点击确定。

  1. 将类型节点连接到建模调色板中的神经网络模型:

图片

  1. 将随机种子设置为5000运行神经网络模型。

  2. 通过点击新生成的模型查看模型结果。你可以看到“总项目”已经在预测重要性中的前十个预测因子中占有一席之地:

图片

关闭窗口。

  1. 我们现在将第一个生成的模型连接到第二个模型:

图片

  1. 向第一个神经网络模型添加一个分析节点:

图片

  1. 如往常一样运行分析节点。你应该得到以下结果:

图片

注意,我们得到的准确性略有提高。我们只是向现有模型添加了一个变量。因此,我们可以了解在运行模型之前对数据进行额外准备时,我们的结果会受到怎样的影响。

说到“总项目”如何帮助模型,你可以看到它在预测当前客户方面所做的工作。实际上,我们在预测当前客户字段方面做得更好。因此,这表明我们选择添加的新变量不一定能提高整体模型的准确性,但肯定可以提高一个或多个预测类别的准确性。你可以决定哪个类别对你的要求更重要,并相应地选择一个新变量。我们现在将转向查看采样如何帮助我们提供更好的结果。

平衡数据

在本节中,我们将看到如何通过过采样或欠采样结果变量的不同方面来提高我们的准确率。我们将更改我们的数据集来查看这一点。请参阅本书 GitHub 链接提供的“贷款”数据集。

平衡数据的需求

为了演示这一点,我们将使用不同的数据集。在画布上选择“变量文件”节点。通过点击文件字段旁边的三个点导航到文件所在位置。然后选择“贷款”数据集:

图片

前往“类型”选项卡,将贷款预测变量的角色更改为目标。这是我们将会预测的变量:

图片

点击读取值。然后,点击确定。在这个例子中,我们正在预测人们是否有贷款。

让我们看看我们的贷款变量的分布;前往图形调色板,并将我们的源节点“贷款”连接到分布节点:

图片

点击分布节点。然后点击字段框旁边的箭头以选择我们的预测变量,我们需要查看其分布,在我们的例子中,是贷款:

图片

然后,点击运行。你会看到以下分布:

图片

注意,在这个数据集中,86%的人有贷款,而 13%的人没有贷款。在这种情况下,预测没有贷款的人群可能有点困难,因为分布非常不均匀。因此,在这种情况下,我们需要平衡数据。这意味着使每个组的类别大小在某种程度上更加相似。这种数据平衡也被称为过采样或欠采样。

让我们用一个更极端的例子来说明。假设我们正在尝试预测欺诈,并且数据集的分布是 99%的情况是完全合法的,只有 1%的情况是欺诈的。现在,如果我们用这种类型的分布构建模型,通常会发生的情况是模型会预测所有案例都不是欺诈的。这种模型的总体准确率将是 99%,因为 99%的时候它是正确的,但我们真正关心的是预测那些少数欺诈案例。如果我们总是预测我们有好的案例,那么你知道模型本身并不是特别有用,尽管它的总体准确率是 99%。因此,有时模型的总体准确率并不是那么有用。我们真正更关心的是预测每个单个类别的准确率。

在像欺诈检测这样的情况下,如果一组过度代表,或者技术上另一组,即较小的组,代表性不足,模型实际上并没有学习到较小组中存在的模式或特征,这就是为什么我们有时需要过采样或欠采样。

让我们回到我们的例子,并尝试看看我们能用它做什么。

实现数据平衡

让我们首先构建一个模型来预测贷款,看看我们发现了什么:

  1. 前往字段操作调色板,并将贷款节点连接到分区节点。

  2. 将神经网络模型从建模调色板连接到分区节点,并使用默认设置运行神经网络模型:

图片

  1. 前往输出调色板,并将新生成的节点连接到分析节点。运行分析节点,并勾选巧合矩阵,你将得到以下结果:

图片

如您所见,模型的总体准确率约为 93%,模型相当一致。让我们看看模型对每个类别的预测效果如何。我们当然预测了“是”组得很好。然而,我们在“否”组上做得并不好。我们可以尝试改进我们预测“否”组的方式。

获得的结果使我们达到一个阶段,我们将不得不对组进行过采样。或者对组进行欠采样。

对于过采样,我们首先需要将数据集划分为训练集和测试集。在这里要记住的一件事是,当我们对数据集进行过采样时,我们不需要在训练集和测试集上都有相同数量的过采样。实际上,我们需要的是在原始分布上评估测试集,因为过采样我们可能会在训练集上表现良好,但在测试集上表现不佳。为了避免这种情况,我们首先必须分离我们的数据。因此,我们首先对训练集数据进行过采样,然后在上面构建模型,最后将其应用于测试集:

  1. 前往记录操作调色板,并将分区节点连接到选择节点:

图片

  1. 选择选择节点。在这里,我们将只选择训练数据集中的人。我们将执行我们的数据处理,然后对数据进行过采样或欠采样,并得到结果。为此,点击表达式构建器。然后,选择分区变量:

图片

点击等号,然后点击字段值按钮:

图片

然后,选择训练数据集并点击确定:

图片

将会打开一个对话框。也在那里点击确定。

  1. 将另一个选择节点连接到现有的选择节点:

图片

在这个选择节点中,我们将保留值为“否”的人;为此,前往表达式构建器并选择贷款变量,点击等号,然后点击字段值按钮并选择“否”:

图片

  1. 我们将添加另一个与第一个选择节点连接的选择节点:

图片

点击表达式构建器。选择 loan 变量,并点击等号。点击字段值按钮并选择 Yes 值。点击 OK。因此,现在我们已选择了所有有贷款的人。这是一个较大的群体,代表性过高。这使我们处于只选择数据集三分之一的状态。

  1. 转到 Record Ops 调色板,将 Sample 节点连接到 Yes 组的 Select 节点:

图片

  1. 编辑 Sample 节点。选择 Random%以随机选择值,并将值设置为 33%。同时检查可重复分区分配。这将允许我们在为该选择创建模型时每次都选择相同的人。点击 OK:

图片

  1. 我们必须将这份数据合并并重新整合在一起。为此,将所有人员设置为“否”的 Select 节点连接到 Append 节点。然后右键单击 Sample 节点,选择 connect 将其连接到 Append 节点:

图片

  1. 点击 Append 节点,选择 All datasets,然后点击 OK:

图片

  1. 现在检查采样后 Loan 字段的分布情况。为此,转到 Graphs 调色板,将 Append 节点连接到 Distribution 节点:

图片

  1. 点击 Distribution 节点,转到 Field 框,并选择 loan,就像我们之前做的那样。然后点击 Run。以下是采样后我们获得分布:

图片

您可以看到 No 组大约占样本的三分之一。

因此,通过下采样 Yes 节点,我们能够看到从 13%的差异。

让我们看看过采样:

  1. 现在,将 Append 节点从 Field Ops 调色板连接到 Type 节点。在这里,我们不会使用分区字段。因此,转到 Types 节点,将 Partition 的角色更改为 None。

  2. 我们将通过转到建模调色板再次构建我们的模型。将 Type 节点连接到神经网络模型,并在默认设置上运行此配置。

  3. 现在,将您生成的第一个模型连接到新生成的模型,并将它们都连接到 Analysis 节点。让我们看看结果:

图片

现在,您可以看到我们预测 No 组的效果如何!我们的模型在预测各个模型的准确性方面表现相当不错。因此,我们最终平衡了数据,显然这是以 yes 组中的错误为代价的。但 No 组是我们关注的重点,因为它代表性不足。

摘要

本章教我们如何修改可用于增强模型的各个选项。我们还学习了如何添加额外的字段并从这些模型中去除噪声。最后,我们对可用数据进行采样,这有助于我们更好地理解模型。

在下一章,我们将学习如何结合模型并进一步提升它们。

第五章:提高模型的高级方法

首先,我们学习了如何构建模型,然后对其进行了诊断分析。接着,我们确定了模型的准确性,在本章中,我们将扩展我们的模型构建技能。我们将学习如何不将模型视为终点,而是将其视为向前推进以改进模型的起点。基本上,我们将学习如何通过构建多个模型来提高单个模型的性能。我们有几种方法可以实现这一点,我们将在详细讨论它们。

本章将涵盖以下主题。这些也是我们可以提高单个模型的方法:

  • 模型合并

  • 倾向得分

  • 元级建模

  • 错误建模

  • 提升和袋装

  • 连续结果

模型合并

模型可以通过多种方式结合。在本节中,我们将逐一探讨每种方法。

通过投票合并

让我们用一个例子来理解这种模型合并的方法。

假设我们已经运行了三个模型并创建了一个如下所示的表格:

图片

我们有每个模型的置信度和其预测。让我们看看我们如何合并这些模型。

如果我们查看第一行,我们可以看到这些模型中的每一个都预测一个人将要离开。因此,如果我们合并预测,我们仍然预测这个人将要离开。置信度值,或最终置信度,是通过将所有模型的置信度值相加,然后除以模型的总数(在我们的例子中是三个)来获得的。

如果我们查看第二行,我们可以看到其中两个模型预测这个人将要离开;而有一个模型预测这个人将要留下;我们可以推断出合并的预测将是这个人将要离开。在这里,我们通过将预测合并预测的模型的置信度相加,然后除以模型的总数(在我们的例子中是三个),来计算置信度值。因此,第二行的最终置信度值较低。

这是通过投票合并模型,其中只考虑发生多次的预测进行合并。

通过最高置信度合并

这是另一种合并模型的方法。例如,考虑以下表格:

图片

在这个例子中,我们不会考虑模型预测的内容;相反,我们只关注高置信度值。如果我们查看第一行,每个模型都预测了“离开”。但模型 1 的置信度最高,因此合并的预测被采纳为“离开”,最终置信度是获得的最高的置信度。

如果我们查看第二行,置信度最高的模型是模型 3,它预测这个人将要留下,因此合并的预测变为“留下”,最终置信度变为最高的置信度。

实现合并模型

按照以下步骤查看我们如何组合不同的模型:

  1. 在画布上获取 Electronics_Data。

  2. 将数据集连接到字段操作面板中的分区节点。

  3. 将数据分为训练集和测试集,我们之前已经做过。

  4. 将分区节点连接到神经网络模型,并使用随机种子设置为5000运行此模型。

  5. 我们现在将构建一个支持向量机SVM)模型。随着我们朝着组合模型的方向前进,我们将前往分区节点,并从建模面板将其与一个 SVM 模型连接起来。

  6. 通过回忆我们在第二章,“机器学习入门”中做出的编辑来运行 SVM 模型。转到专家标签,选择模式为专家。更改正则化参数 C,将其设置为5,中间值,并将核类型更改为多项式,因为我们之前使用相同的数据获得了准确且一致模型。还将度值更改为2。我们更改这些参数是因为我们在第一次看到此模型演示时获得了适当的结果。第二章,“机器学习入门”。点击运行。

  7. 连接生成的 SVM 模型和神经网络模型。

  8. 前往输出面板,并将生成的 SVM 模型连接到表格。

  9. 使用顶部的运行图标运行表格。您将看到以下内容:

图片

在这里,您可以查看分区节点的结果,神经网络模型的预测,其置信度,甚至 SVM 模型的预测及其置信度。您可以关闭此窗口。

  1. 我们现在将通过将 SVM 生成的模型连接到输出面板中的分析节点来分析模型。

  2. 编辑分析节点,检查巧合矩阵,并点击运行。您将看到以下结果:

图片

我们可以看到每个模型的表现如何。如果您向下滚动,您可以看到模型在训练数据集中的预测上有 88%的时间达成一致,在测试数据集中大约有 87%的时间达成一致。当这些模型达成一致时,它们实际上在相当多的时间里是正确的。这使我们评估将这两个模型组合的可能性。

我们现在开始将模型进行组合。我们首先将使用模型器进行组合,但也会看看我们如何在模型器之外组合模型。

在模型器中组合模型

要在模型器内组合模型,请按照以下步骤操作:

  1. 前往 SVM 模型,并从字段操作面板将其连接到集成节点。

  2. 让我们编辑 Ensemble 节点。Ensemble 节点知道它正在组合两个模型的结果,因为它在 Ensemble 中显示了两个模型。将 Ensemble 的目标字段选择为右侧下拉按钮中的 Status。如果选中了“过滤掉由 Ensemble 模型生成的字段”,它将过滤掉先前模型中已生成的字段,因此我们将取消选中它。接下来,选择 Ensemble 方法。这是一个我们可以组合模型的方式列表。在这里,我们将选择投票,因为我们已经看到过这个了。我们将在本章后面讨论倾向得分。然后我们必须选择在出现平局时会发生什么;在这里,我们将选择最高置信度,因为我们也看到了这一点,然后点击 OK,如图所示:

  1. 让我们看看组合的结果。为此,将 Ensemble 节点连接到分析节点,并点击顶部的运行按钮。以下将是结果:

首先,我们有神经网络模型的结果,然后是 SVM 模型的结果,最后我们可以看到组合模型的结果。

我们可以看到在测试数据集中整体准确率为 82%,这意味着略有改进。我们通过组合两个模型将准确率提高了 2%,这是一个很好的起点。让我们看看我们如何从模型器外部组合模型。

在模型器外部组合模型

当你使用除 SPSS Modeler 之外的其他数据挖掘软件时,可以使用这种方法。

让我们看看如何做到这一点:

  1. 前往字段操作调色板,并将 SVM 生成的模型连接到派生节点。

  2. 我们将使用派生节点来创建一个新的字段。我们将编辑此节点并将其命名为Combined_Prediction

  3. 将此字段派生为条件。你会看到一个if-else条件。

  4. 让我们告诉模型器,如果所有模型的预测都相等,那么组合预测将是那个预测本身。为此,让我们在第一个if条件中添加一个表达式,即神经网络模型的预测,\(N-Status select = SVM 模型的预测,\)S-Status;转到Then条件,点击表达式构建器并选择,神经网络模型的预测,$N-Status,或者你也可以选择 SVM 模型的预测。

  5. Else条件中写下这个语句:你可以从列表中选择变量名:

这个声明意味着,如果两个模型的预测不匹配,我们将选择任何模型中的最高置信度。如果神经网络模型的预测置信度高于 SVM 模型,那么我们将选择神经网络模型的预测。否则,如果 SVM 模型的预测置信度高于神经网络模型,那么我们将选择 SVM 模型。但是,如果两个条件都不满足,那么我们将放置一个0,然后我们必须以endif语句结束。点击确定。

  1. 将组合预测节点连接到表格模式,让我们看看结果,如下面的截图所示:

截图

在这里,第 12 行,我们可以看到神经网络预测客户为流失,而 SVM 预测为当前客户,但由于神经网络预测的置信度更高,所以组合预测被选为流失。

  1. 你可以分析这个模型,看看自己获得的数据将与我们使用集成节点获得的数据相似。

这就是我们将两个模型结合以提高准确性的方法,我们也看到了如何从两个模型中获得组合结果。你可以尝试使用三个或更多模型。你会对模型结合的效果感到惊讶。现在我们将看到另一种提高模型的高级方法。

使用倾向得分

倾向得分非常有用,因为它们告诉你某件事情发生的可能性。模型的置信度值反映了我们对预测的信心,所以高置信度并不能帮助我们确定客户是否会留在公司或离开公司,相反,它表明我们对预测的信心。有时修改置信度值是有帮助的,这样高置信度值意味着预测一个人会离开,而低置信度值则表示一个人会留下。基本上,我们最终创建了一个倾向离开得分,这将有助于我们进行干预,不同的营销努力等等。

以这个表格为例:

截图

我们有两个离开值和两个停留值,每个值都有我们对这些预测的置信度。在这个例子中,让我们假设我们正在尝试计算失去客户的倾向性。我们将创建一个倾向性分数;这意味着当一个人被预测要离开时,倾向性分数与置信值是同一回事。所以你可以看到,对于第一个人,我们预测他们将离开,由于我们对这个预测有很高的信心,因此倾向性分数相当高。对于第二个人,我们预测他们也将离开,但我们对这个预测的信心并不那么高,因此,我们可以看到倾向性分数也不是那么高。

当预测相反的情况时,如果我们预测第三个人将留下,但我们对这个预测的信心并不很大,实际上我们正在做的是取我们真正想要的相反的置信度值的 1 减去,这最终就是倾向性分数。最后,在最后一个例子中,我们预测一个人将留下。我们对这个预测的信心极高,因此,这个人离开的可能性非常低。

以下图表总结了倾向性公式:

图片

从本质上讲,倾向性分数所做的就是修改置信值,以便您可以查看某事发生的可能性。所以,如果您能将它们都放在某种光谱上,就可以看到,例如,有一些人对他们将要离开的信心程度很高,所以我们可能对此无能为力。我们还有另一组人对他们将要留下的信心程度很高,因此他们离开的倾向性很低。再次强调,我们可能不必过于担心他们,但可能我们需要关注的是中间的人,因为他们不是那么极端的预测,所以我们不能对那些预测有太大的信心。潜在地,我们可以对那组人做些事情。我们可能能够改变他们的想法,或者类似的事情,这就是倾向性分数的用途。

倾向性分数的实现

要了解我们如何利用倾向性分数来获得优势,请按照以下步骤操作:

  1. 将您的数据集放在画布上,并将其连接到一个分区节点,将数据集分为两部分。

  2. 将分区节点连接到建模选项卡中的 Chaid 模型。您可以使用任何模型,但让我们使用这个,因为它也将在我们的下一个示例中使用。

  3. Chaid 将构建一个决策树模型。要编辑,请转到“模型选项”选项卡,其中有一个要求输入倾向得分的部分。有两种类型;原始倾向得分用于训练数据集,调整后的倾向得分用于测试或验证数据集。我们现在将选择原始倾向得分:

图片

  1. 点击“运行”。将生成的模型连接到输出调色板中的表节点,并运行表。观察表,你会看到添加了另一个变量,称为倾向得分。当预测客户将流失时,如果他们的置信度得分低,倾向得分就是我们所期望的1-置信度。但对于当前客户,我们有一个与置信度值相似的倾向得分。

  2. 如果你想看到这个过程的图形表示,将生成的模型连接到图形调色板中的直方图节点。编辑直方图,在字段框中,并选择倾向得分变量:

图片

  1. 点击“运行”以查看以下内容:

图片

注意,倾向得分将在 0.0 到 1.0 之间变化。但置信度值只有两个值,它们的范围在 0.5 到 1.0 之间。要再次查看,请转到直方图,从“字段”选项中选择置信度变量,然后点击“运行”。你会看到以下内容:

图片

因此,我们将置信度值转换为倾向得分,现在这个倾向得分正在给我们提供关于某人可能继续作为客户的可能性信息。我们本可以反过来做,即寻找客户流失的可能性的倾向得分,但我们只需反转这些得分,它就会为我们创建出相应的结果。无论如何,我们现在可以使用这些倾向得分来做些事情,比如查看哪些客户最有可能流失,或者哪些我们将保留的客户。无论如何你看待这个问题,你知道哪些人很可能流失,因此可能无法对他们做任何事情。那些处于中间状态的人可能不会流失,所以可能需要做更多的工作来尝试保留他们作为客户,并更好地了解他们。

元级建模

元级建模是基于另一个模型的预测或结果来构建模型。在之前的例子中,我们看到了如何为我们的Chaid模型创建倾向得分。在本节中,我们将看到如何从Chaid模型中提取结果并将其输入到神经网络模型中,这将使我们能够改进神经网络模型的结果。

要做到这一点,请按照以下步骤操作:

  1. 将分区节点连接到建模调色板中的神经网络节点。

  2. 通过在“构建”标签页的高级选项中将随机种子从5000更改,运行神经网络模型。现在将生成的 Chaid 模型连接到生成的神经网络模型。

  3. 现在,使用分析节点查看这些模型的准确度水平。

  4. 你将得到以下结果:

图片

我们可以看到,这两个模型的准确性有些相似,所以现在我们将继续构建不同类型的神经网络模型。

我们将从 Chaid 模型的结果中提取数据,并将其输入到神经网络模型中。然后,神经网络模型将使用这些结果,以及所有其他单个预测因子,尝试捕捉比 Chaid 更多的信息:

  1. 右键单击生成的神经网络模型并删除它。

  2. 将生成的 Chaid 模型连接到字段操作调色板中的类型节点。

  3. 将类型节点编辑框滚动到最底部,并将 Chaid 模型的置信度变量设置为“无”:

图片

点击“确定”。

  1. 将类型节点连接到画布上已有的神经网络模型,并使用随机种子5000运行它。

  2. 如果你查看新模型的结果,你可以看到最重要的预测因子来自 Chaid 模型的倾向得分:

图片

  1. 将生成的 Chaid 模型连接到分析节点并运行分析,以获得以下结果:

图片

在这个例子中,我们可以看到,在神经网络模型中,如果我们从 Chaid 模型中提供结果,我们的准确性提高了 1%。

错误建模

错误建模是元级建模的另一种形式,但在这个案例中,我们将建模预测中存在错误的情况。这样,我们可以提高预测的准确性。通过一个例子,我们将介绍如何进行错误建模。

考虑以下场景,例如:

图片

这里,我们有一个名为LoyalTrain的数据集。这只是一个训练数据集;我们的测试和验证数据集在另一个地方,我们只将在训练数据集上构建模型。还有一个类型节点和一个神经网络模型,我们在这里预测忠诚变量。运行分析节点查看以下截图所示的结果:

图片

你可以看到,结果变量中有两个类别:人们要么被预测为留下,要么被预测为离开。你还可以看到,在 79%的情况下做出了正确的预测。在 21%的情况下犯了错误。总共犯了 236 个错误。

从这个例子中,你也可以看到,神经网络模型被复制并放置在流的另一部分。还使用一个派生节点创建了一个新的变量,CORRECT。让我们看看这里发生了什么,如下面的截图所示:

图片

在这里,我们创建了一个新的字段作为CORRECT,并保持其值为TrueFalse。我们在这里告诉模型器,如果它找到一个变量 LOYAL,并且如果它等于 LOYAL 的预测,则该值为 True;否则,为 False。

如果你运行位于其上方的“分布”节点,你将看到以下结果:

图片

接下来,我们将使用类型节点实例化数据,之后我们可以使用一个以非常不同的方式查看数据的 C5.0 决策树模型。在这里,我们构建了一个 C5.0 模型,试图预测我们得到的是正确还是错误的预测。点击生成的 C5.0 模型以查看其结果,如下截图所示:

图片

在这个例子中,我们可以看到有 14 行,其中包含 4 条规则用于错误预测,即当我们预测错误时,以及 10 条规则用于正确值,即当我们预测正确时。

你可以展开规则并点击它们上面的%符号,以获得以下结果:

图片

在这个例子中,第一条规则基本上表明,如果你是男性,你使用少于 1 分钟的国外通话时间,少于 1 分钟的长途通话时间,并且你的状态是单身,我们预测我们将有一个 False 的值。如果你想查看数字,请点击%符号,你将看到以下结果:

图片

如前一张截图所示,第一条规则有 22 人,与他们相关的预测准确性大约为 82%。

从这个结果中,我们可以看到在预测过程中出现了某些类型的错误。因此,我们可能需要使用另一种类型的模型而不是神经网络模型。为此,点击生成选项并选择规则跟踪节点,如下截图所示:

图片

此步骤创建了一个名为 FALSE_TRUE 的节点,你可以在示例场景中看到它作为启动图标。这创建了我们的所有规则。如果你想查看其内部,请点击工具选项卡上的启动+图标,你应该会看到以下结果:

图片

现在我们来看看第一条规则。点击该规则中的表达式构建器,如下截图所示:

图片

在这里,规则似乎表明,如果你是男性,你使用少于 1 分钟的国外通话时间,少于 1 分钟的长途通话时间,并且你的状态也是单身,我们预测你将有一个 False 的值。你可以看到这个预测的准确性。

使用启动图标返回。在这里,我们有分类节点“分割”。让我们看看我们到目前为止做了什么,如下所示:

图片

我们选择了变量 RULE 并点击了“获取”,这给我们提供了所有这些不同的原始值,我们将它们重命名为“不正确”,以及所有“True”的值,我们将它们重命名为“正确”,然后我们只有“正确预测”:

图片

我们现在已经构建了神经网络模型。如果你从“正确预测”中运行生成的神经网络模型的“分析”节点,你应该看到以下结果:

图片

记住,早期模型的总体准确率约为 79%,现在已提高到约 84%。

我们也在类型节点的一个单独字段中为不正确的预测做了同样的事情。让我们看看如下:

图片

我们为不正确的预测构建了一个 C5.0 模型,让我们看看它的分析,如下所示:

图片

C5.0 模型在预测神经网络模型表现不佳的不正确值方面做得很好;我们现在有 89% 的总体准确率。

让我们总结一下我们在这里做了什么。我们有一个数据集,我们将其分为正确和错误的结果,并分别对每个结果进行建模,以给我们比使用一个模型更少的错误。

现在我们需要结合两个模型的预测。为此,请转到右侧的“流”选项卡中的“错误 2 流”,如下面的截图所示:

图片

在这里,我们结合了两个模型的预测,并使用了一个派生节点“预测”,如下面的截图所示:

图片

在这里,我们指定如果预测是正确的,则选择神经网络模型的预测。如果预测是不正确的,我们应该选择 C5.0 模型的预测。

然后,添加了矩阵节点后,运行以下操作:

图片

在前面的截图中,我们可以看到我们正确预测了 437 人将离开,有 118 个错误,以及 498 人将留下,只有 55 个错误。这意味着总共有 173 个错误。

我们的原模型犯了 236 个错误,所以我们极大地减少了错误数量。仅仅通过为不同的人群使用两个不同的模型并将它们结合起来,我们就产生了一个包含 63 个更少错误的输出。

这是错误建模。在错误建模中,你可以构建一个模型,看看结果如何,然后决定是否为不同类型的人构建两个或三个模型,因为不能假设一个模型适用于所有人。因此,我们可以构建不同类型的模型,向这些模型提供不同类型的数据,然后最终将每个模型的结果结合起来,生成一个最终预测,这个预测在预测建模方面可能包含更少的错误。

提升和袋装

提升背后的想法是通过构建一系列旨在预测先前模型误分类的连续模型,你正在进行一种错误建模。另一方面,袋装是带替换的抽样。使用这种方法,将生成新的训练数据集,其大小与原始数据集相同。在本节的例子中,我们将使用自助抽样。

在这个例子中,我们将了解如何进行提升和袋装,这两种方法都是提高模型性能的方法。

提升功能

让我们看看如何按照以下步骤进行提升:

  1. 将数据放在画布上并对其进行分区。

  2. 为数据创建一个神经网络模型。

  3. 以随机种子设置为5000运行神经网络模型。

  4. 连接一个分析节点并运行它,同时勾选巧合矩阵——你会看到测试准确率为 81%,整体准确率为 80%。

  5. 现在,提升神经网络模型。为此,转到神经网络模型并对其进行编辑。在构建选项下转到目标,然后点击增强模型准确性(提升)。提升可以与任何大小的数据集一起使用。这里的想法是我们正在构建一系列连续的模型,这些模型旨在预测先前模型的误分类。所以,基本上,我们最终构建了一个模型。会有一些错误,因此应该构建第二个模型,在这个模型中,第一个模型的错误被赋予更高的权重,以便我们更好地理解它们。然后,当我们构建第二个模型时,将会有错误,所以我们最终构建第三个模型,在这个模型中,第二个模型的错误再次被赋予更高的权重,以便我们试图更好地理解它们,以此类推。无论何时进行提升和袋装,你都必须确保你有训练集和测试集,因为你有很大的机会利用机会,你可能会发现样本特定的信息,因为我们专注于我们在特定样本中发现的错误。我们现在将点击运行。

  6. 让我们看看我们生成的模型:

在我们生成的模型中,第一个标签显示的是集成模型的外观:这是结合了我们创建的 10 个模型。你可以看到其整体准确率约为 98%:这是被选为最佳模型的模型。你还可以看到参考模型是什么——那将是第一个构建的模型——然后你可以看到朴素模型,实际上,那根本不是模型,那只是我们预测众数或最常见响应的地方。

  1. 让我们下滑到第二个图标:

在这里,你可以看到预测因子的重要性。在最终构建的 10 个模型中,我们可以看到“Premier”变量是最重要的预测因子,然后你可以看到其他预测因子的重要性顺序。这与我们通常在一般神经网络模型中看到的信息类似,但这个信息来自我们构建的所有不同模型。

  1. 如果我们向下滚动到下一个图标,我们可以看到预测因子频率:

图片

这显示了在模型中每个不同预测因子被使用的频率。对于神经网络模型来说,这并不那么有趣,因为神经网络模型通常不会丢弃预测因子,但如果我们有一个决策树模型,例如,这可能就更有趣一些,因为在那里你会丢弃预测因子。

  1. 让我们向下滚动到下一个标签页:

图片

上述截图显示了模型的准确度水平。你可以看到它趋于平稳,在某个点上,改进不再明显。在这种情况下,准确度是逐渐提高的。有时,在某些模型中,你会看到大约五个模型准确度有巨大的跳跃,然后它就稳定了。也许你不必再构建更多的模型。在我们的案例中,我们最终构建了 10 个模型。我们的整体准确度极高。如果我们看到准确度很低,可能是因为我们看到了逐渐的提高,也许我们想要使用 15 个模型而不是 10 个,例如。这就是你将看到这种信息的地方。

  1. 让我们再向下滚动一点,看看最后的表格:

图片

在这里,我们可以看到预测因子的数量,我们还可以看到模型中的案例数量。最后,我们看到突触的数量,这基本上是我们在这个模型中拥有的权重或连接的数量。因此,你可以看到每个单独的模型表现如何。每个模型的新版本都在数据中错误较多的地方赋予更多的权重,这正是这里的理念。

  1. 最后运行分析节点,你可以看到对于训练数据集,整体准确度大约为 98%。但在测试数据集中,整体准确度大约为 80%,这是我们真正关心的,即测试数据集。在这种情况下,我们可以看到训练和测试之间存在很大差异,这通常在讨论提升模型时会出现。

确保你得到的结果确实值得,并且它确实比单独运行模型有所改进。在这种情况下,当我们只运行一个模型时,请记住,测试数据集的整体准确率大约在 80%左右;这就是我们在这里看到的情况。所以,在这个特定情况下,提升并没有给我们带来太多好处。在其他情况下,它当然可以,但再次强调,你真的需要能够权衡这一点,在这种情况下,提升似乎对我们来说在这个情况下并不真正值得。

Bagging

让我们回到神经网络模型,这次我们将进行 Bagging 而不是提升:

  1. 转到目标选项卡并选择增强模型稳定性——这是有放回的抽样。当数据集较小或存在异常值时,不要进行 Bagging。Bagging 背后的主要思想是生成新的训练数据集,其大小与原始训练数据集相同,这是通过使用有放回的抽样来实现的。在这种情况下,我们实际上是在进行自助抽样。

  2. 点击运行模型。

  3. 让我们来看看我们生成的模型。这是我们最终构建的模型:

注意,组合规则是通过投票实现的,但我们可以用其他方法来组合模型,实际上,我们可以选择显示所有组合规则。我们不会看到所有模型的详细信息,因为截图与提升树相同。

  1. 运行分析节点以获取以下结果:

我们可以看到,通过进行 Bagging,我们的准确率提高了 4%。

我们现在将看到如何预测连续结果。

预测连续结果

到目前为止,我们一直在谈论分类结果,而大多数这些例子也适用于连续结果,但在这个部分,我们将专门关注连续结果变量。

如我之前提到的,当我们谈论连续结果预测或变量时,这本书中提到的所有内容仍然适用:不过,主要区别将在于我们最终如何组合预测。

在这个例子中,我们可以看到我们构建了三个模型,并且从每个模型中都有预测结果:

当我们想要合并预测时,我们只是做一个数学平均。这些先前模型的平均值最终成为合并预测,因为我们不是像在具有分类结果变量时那样预测单个类别。相反,我们预测实际的数值,如果我们想从这些不同的模型中合并预测,我们简单地做的就是取这些模型的平均值。例如,在第一行,第一个模型预测的值为 7,下一个模型预测的值为 9,第三个模型预测的值为 8。我们取这些值,将它们加起来,然后除以模型的数量,合并预测最终得到的值是 8。这就是你合并模型的方法。

但是当我们有连续的结果变量时,我们没有置信度值,所以我们不需要担心这些类型模型的实际置信度值。

在这个例子中,我们将使用银行数据集。将其拖到画布上。

让我们看看这些数据看起来是什么样子:

图片

如您所见,有几个字段。我们将预测一个变量,salnow,这是我们基于起始工资、性别、某人在该组织工作的时间、年龄、教育水平、他们来该组织之前工作过的年数、他们所在的职位类别、他们是否来自少数族裔以及种族和性别的交互作用的目标变量。

将数据集分区,然后继续创建一个神经网络模型。使用默认设置运行神经网络模型。查看新生成的模型。

让我们也像以前一样构建 SVM 模型。我们将比较两个模型的预测结果。

这是 SVM 模型的输出:

图片

将两个生成的模型连接起来,并将 SVM 模型连接到表格上并运行表格。

滚动到末尾,您可以看到一个分区节点和两个模型的预测。请注意,这些连续结果变量没有置信度值。

这也意味着我们也不会得到这些模型的倾向得分。引入一个分析节点,并将 SVM 模型连接到分析节点并运行它:

图片

分析与以前我们用分类变量得到的分析略有不同。您可以看到,对于训练集和测试集,都有最小误差和最大误差。模型在预测值过高或过低方面做得最差。

均值误差只是误差的平均值。查看这些模型准确性的最佳方式是查看平均绝对误差。如您所见,与测试数据集相比,训练数据集的值较低。这些值需要相似。您可以看到 SVM 模型的平均绝对值。您还可以看到标准差。这个值需要尽可能小,因为这表明我们在模型中具有更少的变异。另一个标准是相关系数。对于这两个数据集,这个值都极高;这些值必须彼此相似。人们使用线性系数来验证模型的有用性,但有时我们并没有线性关系。因此,在这种情况下,我们将使用平均绝对误差值作为评估模型表现的最佳度量。发生次数是每个数据集的案例数量。

现在让我们结合模型:

  1. 将最后生成的节点连接到字段操作调色板中的集成节点。

  2. 编辑集成节点。取消选择“过滤出”字段并点击确定。

  3. 将集成节点连接到已存在的表节点并运行表。

  4. 您可以看到来自 SVM、神经网络以及如果我们平均这两个,我们就有综合模型的预测。我们还有我们的标准误差。对于那些不使用模型器的人来说,可以使用派生节点来计算这些模型的平均值并得到综合结果。

  5. 要查看结果,将集成节点连接到分析节点并运行它:

图片

这是一个如何处理连续变量的例子。

摘要

在本章中,我们看到了如何对模型进行额外的先进操作以获得更好的结果。希望您对数据如何被提取来训练机器以及我们如何通过在不同类型的数据上训练来创建更好的模型有了更深的理解。

posted @ 2025-09-04 14:14  绝不原创的飞龙  阅读(9)  评论(0)    收藏  举报