精通-Java-机器学习-全-

龙哥盟 / 2024-10-06 / 原文

精通 Java 机器学习(全)

零、前言

有许多关于机器学习的著名书籍,从关于从数据中学习的理论的教学手册;该领域专业化的标准参考,如聚类和异常值检测或概率图建模;到提供使用特定语言的工具和库的实用建议的食谱。覆盖面较广的书籍通常缺乏理论细节,而那些专注于一个主题或工具的书籍可能没有太多关于流环境和批处理环境中的方法差异的内容。此外,对于那些偏爱 Java 工具的非新手来说,如果他们希望找到一本书来扩展他们的知识——同时,在基本方面——就没有多少选择了。

在一个地方寻找

  • 给定任何数据可用性场景下不同技术的利弊——当数据被标记或未标记、流或批处理、本地或分布式、结构化或非结构化时
  • 与这些技术相关的最重要的数学结果的现成参考,以便更好地理解基础理论
  • 据我们所知,目前还不可能介绍最成熟的基于 Java 的框架、库和可视化工具,以及如何将这些技术付诸实践的描述和说明

因此,这本书的核心思想是解决这一差距,同时保持理论和实践之间的平衡,借助概率、统计、基本线性代数和基本微积分为一方服务,并强调方法论、案例研究、工具和代码以支持另一方。

根据 KDnuggets 2016 年软件民意调查,Java 以 16.8%的份额在机器学习使用的语言中排名第二,仅次于 Python。更重要的是,这标志着比前一年增长了 19%!显然,Java 仍然是构建和部署涉及机器学习的系统的重要而有效的工具,尽管有人声称它在某些领域衰落了。通过这本书,我们的目标是接触具有 Java 经验和机器学习初级知识的专业人士和积极的爱好者。我们的目标是让掌握 Java 机器学习成为数据科学高级从业者的下一步。为了引导他们走上这条道路,这本书涵盖了机器学习中的一系列技术,其中一些他们可能已经熟悉,另一些可能不太熟悉,或者只是浅尝辄止,包括数据分析方法、学习算法、模型性能评估,以及更多监督和半监督学习、聚类和异常检测、半监督和主动学习。它还介绍了一些特殊的主题,如概率图建模、文本挖掘和深度学习。不要忘记当今企业级系统中日益重要的主题,这本书还涵盖了从不断发展的数据流中学习的独特挑战和适用于实时系统的工具和技术,以及大数据世界的必要性:

  • 机器学习在大规模分布式环境中是如何工作的?
  • 有哪些权衡?
  • 算法必须如何适应?
  • 这些系统如何与占主导地位的 Hadoop 生态系统中的其他技术进行互操作?

这本书解释了如何通过正确的方法、过程、应用和分析将机器学习应用于真实世界的数据和真实世界的领域。每章都附有案例研究和例子,说明如何使用 Java 编写的一些最好的开源工具来应用新学到的技术。本书涵盖了超过 15 种开源 Java 工具,支持它们之间的各种技术,并附有代码和实际用法。代码、数据和配置可供读者下载和试验。我们提供了十多个机器学习的真实案例研究,说明了数据科学家的过程。每个案例研究都详细说明了实验中采取的步骤:数据摄取、数据分析、数据清洗、特征减少/选择、映射到机器学习、模型训练、模型选择、模型评估和结果分析。这给了读者一个实用的指南,指导他们使用每章中介绍的工具和方法来解决手头的业务问题。

这本书涵盖了什么

第一章,机器学习评论,是对读者从 Packt 的Java 机器学习或类似文本中学到的基本概念和技术的复习。本章回顾了数据、数据转换、采样和偏差、特征及其重要性、监督学习、非监督学习、大数据学习、流和实时学习、概率图形模型和半监督学习等概念。

第二章,现实世界监督学习的实用方法,蜘蛛网撒粉,直入监督学习的广阔领域和相关技术的全部范围。我们涵盖的主题包括特征选择和减少,线性建模,逻辑模型,非线性模型,SVM 和内核,集成学习技术,如装袋和增压,验证技术和评估指标,以及模型选择。使用 WEKA 和 RapidMiner,我们进行了详细的案例研究,经历了从数据分析到模型性能分析的所有步骤。在其他每一章中,这个案例研究都是作为一个例子来帮助读者理解在这一章中介绍的技术是如何在现实生活中应用的。案例研究中使用的数据集是 UCI·霍索科利奇的。

第三章,无监督机器学习技术,介绍了聚类和离群点技术中的许多先进方法,以及应用。涵盖的主题包括无监督数据中的特征选择和简化、聚类算法、聚类中的评估方法,以及使用统计、距离和分布技术的异常检测。在本章的最后,我们使用真实世界的图像数据集 MNIST 进行了聚类和离群点检测的案例研究。我们使用 Smile API 进行特征约简,使用 ELKI 进行学习。

第四章、半监督学习和主动学习,给出了当只有少量标记数据时学习的算法和技术细节。涵盖的主题包括自我训练、生成模型、直推式支持向量机、协同训练、主动学习和多视角学习。该案例研究涉及两个学习系统,并在真实世界的 UCI 乳腺癌威斯康星州数据集上进行。介绍的工具有 JKernelMachines、KEEL 和 JCLAL。

第五章,实时流机器学习,涵盖了数据流在实时呈现的独特情况下从数据中学习的问题。本章广泛涵盖了流机器学习和应用的需求、监督流学习、非监督聚类流学习、非监督离群点学习、流学习中的评估技术以及用于评估的度量标准。本章最后给出了一个详细的案例研究来说明 MOA 框架的使用。使用的数据集是电力(ELEC)。

第六章,概率图建模表明,许多现实世界的问题可以通过对多维空间上的复杂联合概率分布进行编码来有效地表示。概率图模型提供了一个框架来表示,得出推论,并在这种情况下有效地学习。本章广泛涵盖概率概念,PGM,贝叶斯网络,马尔可夫网络,图结构学习,隐马尔可夫模型和推理。在本章的最后,对真实世界数据集进行了详细的案例研究。本案例研究中使用的工具是 OpenMarkov 和 WEKA 的贝叶斯网络。数据集是 UCI 成人(人口普查收入)。

第七章,深度学习,如果在今天的流行想象中有一个机器学习的超级明星,那就是深度学习,它已经在用于解决最复杂的人工智能问题的技术中占据了主导地位。广泛涵盖的主题有神经网络、神经网络中的问题、深度信念网络、受限玻尔兹曼机、卷积网络、长短期记忆单元、去噪自动编码器、递归网络等。我们提供了一个详细的案例研究,展示了如何实现深度学习网络,调整参数和执行学习。我们将 DeepLearning4J 用于 MNIST 图像数据集。

第八章、文本挖掘和自然语言处理,详细介绍了在文本挖掘领域进行各种分析的技术、算法和工具。广泛涵盖的主题包括文本挖掘领域、文本挖掘所需的组件、文本数据的表示、降维技术、主题建模、文本聚类、命名实体识别和深度学习。案例研究使用真实世界的非结构化文本数据(Reuters-21578 数据集),突出主题建模和文本分类;使用的工具是木槌和 KNIME。

第九章、大数据机器学习——最后的前沿,讨论了当今一些最重要的挑战。当数据量很大或速度非常快时,有哪些学习选择?如何处理可伸缩性?涵盖的主题包括大数据集群部署框架、大数据存储选项、批量数据处理、批量数据机器学习、实时机器学习框架和实时流学习。在大数据批处理和实时的详细案例研究中,我们选择了 UCI Covertype 数据集和机器学习库 H2O、Spark MLLib 和萨摩亚。

附录 A ,线性代数,涵盖了线性代数的概念,是一个简短的复习。它的覆盖范围绝不是完整的,但包含了与本书中的机器学习技术相关的一些重要概念的旋风之旅。它包括向量、矩阵和基本矩阵运算和性质、线性变换、矩阵求逆、特征分解、正定矩阵和奇异值分解。

附录 B 、概率,提供了概率的简要入门。它包括概率公理,贝叶斯定理,密度估计,均值,方差,标准差,高斯标准差,协方差,相关系数,二项式分布,泊松分布,高斯分布,中心极限定理和误差传播。

这本书你需要什么

这本书假设你有一些 Java 编程的经验,并且对机器学习概念有一个基本的理解。如果这并不适合你,但是你仍然很好奇并且有上进心,不要烦恼,继续读下去!对于那些有一些背景的人来说,这意味着你熟悉监督和非监督学习中涉及的数据和概念的简单统计分析。那些可能不具备必要的数学知识或者必须挖掘记忆深处才能摆脱古怪公式或有趣符号的人,不要灰心丧气。如果你是那种喜欢挑战的人,附录中的简短入门可能是你启动引擎所需要的一切——一点点毅力将帮助你完成剩下的部分!对于那些从未接触过机器学习的人来说,第一章同样是为你和那些需要复习的人写的——这是你的入门工具包,先跳起来,找出它是关于什么的。你可以用任意数量的在线资源来扩充你的基础知识。最后,对于那些不懂 Java 的人来说,这里有一个秘密:书中提到的许多工具都有强大的 GUI。有些包含类似向导的界面,使它们非常容易使用,并且不需要任何 Java 知识。因此,如果您是 Java 新手,就跳过需要编码的例子,学习使用基于 GUI 的工具吧!

这本书是给谁的

本书的主要读者是与数据打交道的专业人士,他们的职责可能包括数据分析、数据可视化或转换、机器学习模型的培训、验证、测试和评估,大概是使用 Java 或基于 Java 的工具执行预测性、描述性或规定性分析。对 Java 的选择可能意味着个人的偏好,因此需要一些 Java 编程的经验。另一方面,也许工作环境或公司政策的环境限制了第三方工具的使用,只能使用 Java 或其他语言编写的工具。在第二种情况下,潜在的读者可能没有 Java 编程经验。这本书直接针对这位读者,就像针对他们的同事,Java 专家(首先提出这个政策的人)一样。

次要受众可以由仅具有两个属性的简档来定义:对机器学习的求知欲,以及对概念、实用技术和工具的单一综合处理的渴望。这种类型的读者可以选择跳过数学和工具,专注于学习最常见的监督和非监督学习算法。另一个人可能会浏览第 1、2、3、和 *7、*章,完全跳过其他章节,一头扎进工具中——如果你想快速让自己在分析客户说随时会出现的数据集时有用,这是一个完全合理的策略。同样重要的是,通过重复书中的实验进行一些练习,它会让你向大师们提出正确的问题!或者,您可能希望使用这本书作为参考来快速查找相似性传播算法的详细信息(第三章、无监督机器学习技术),或者通过简要回顾示意图来提醒自己一个 LSTM 架构(第七章、深度学习),或者翻一翻在基于流的学习中用于离群点检测的基于距离的聚类方法的利弊列表(第五章、真实所有的标本都受欢迎,每个人都会找到足够的东西来啃。

习俗

在这本书里,你会发现许多区分不同种类信息的文本样式。下面是这些风格的一些例子和它们的含义的解释。

文本中的码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、伪 URL、用户输入和 Twitter 句柄如下所示:“算法在循环中调用消除函数,如下所示。”

代码块设置如下:

DataSource source = new DataSource(trainingFile);
Instances data = source.getDataSet();
if (data.classIndex() == -1)
  data.setClassIndex(data.numAttributes() - 1);

任何命令行输入或输出都按如下方式编写:

Correctly Classified Instances     53       77.9412 %
Incorrectly Classified Instances    15       22.0588 %

新术语重要词汇以粗体显示。

注意

警告或重要提示出现在这样的框中。

Tip

提示和技巧是这样出现的。

读者反馈

我们随时欢迎读者的反馈。让我们知道你对这本书的看法——你喜欢或不喜欢什么。读者的反馈对我们来说很重要,因为它有助于我们开发出真正让你受益匪浅的图书。

要给我们发送总体反馈,只需发送电子邮件<feedback@packtpub.com>,并在邮件主题中提及书名。

如果有一个你擅长的主题,并且你有兴趣写一本书或者为一本书投稿,请查看我们在www.packtpub.com/authors的作者指南。

客户支持

既然您已经是 Packt book 的骄傲拥有者,我们有许多东西可以帮助您从购买中获得最大收益。

您可以按照以下步骤下载代码文件:

  1. 使用您的电子邮件地址和密码登录或注册我们的网站。
  2. 将鼠标指针悬停在顶部的支持选项卡上。
  3. 点击代码下载&勘误表
  4. 搜索框中输入书名。
  5. 选择您要下载代码文件的书。
  6. 从下拉菜单中选择您购买这本书的地方。
  7. 点击代码下载

您也可以通过点击 Packt Publishing 网站上该书网页上的代码文件按钮来下载代码文件。在搜索框中输入书名即可进入该页面。请注意,您需要登录到您的 Packt 帐户。

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

  • WinRAR / 7-Zip for Windows
  • 适用于 Mac 的 Zipeg / iZip / UnRarX
  • 用于 Linux 的 7-Zip / PeaZip

这本书的代码包也在 https://github.com/mjmlbook/mastering-java-machine-learning 的 GitHub 上。我们在 https://github.com/PacktPublishing/的[也有来自我们丰富的书籍和视频目录的其他代码包。看看他们!](https://github.com/PacktPublishing/)

勘误表

尽管我们已尽一切努力确保内容的准确性,但错误还是会发生。如果您在我们的某本书中发现了错误——可能是文本或代码中的错误——如果您能向我们报告,我们将不胜感激。这样做,你可以让其他读者免受挫折,并帮助我们改进本书的后续版本。如果您发现任何勘误表,请通过访问www.packtpub.com/submit-errata,选择您的图书,点击勘误表提交表链接,并输入您的勘误表的详细信息。一旦您的勘误表得到验证,您的提交将被接受,该勘误表将被上传到我们的网站或添加到该标题的勘误表部分下的任何现有勘误表列表中。

要查看之前提交的勘误表,请前往www.packtpub.com/books/content/support并在搜索栏中输入图书名称。所需信息将出现在勘误表部分。

盗版

互联网上版权材料的盗版是所有媒体都存在的问题。在 Packt,我们非常重视版权和许可证的保护。如果您在互联网上发现我们作品的任何形式的非法拷贝,请立即向我们提供地址或网站名称,以便我们采取补救措施。

请通过<copyright@packtpub.com>联系我们,并提供可疑盗版材料的链接。

我们感谢您帮助保护我们的作者,以及我们为您带来有价值内容的能力。

问题

如果您对本书的任何方面有问题,可以通过<questions@packtpub.com>联系我们,我们将尽最大努力解决问题。

一、机器学习回顾

近年来,人工智能 ( AI )尤其是机器学习在学术界和工业界都出现了复兴。在过去的十年里,人工智能已经取得了巨大的成功,但在这中间的几年里,这个领域的最初希望让位于相对衰落,直到最近几年重新出现。

在很大程度上,使这些成功成为可能的是处理数量惊人且不断增长的数据的需求所提供的动力,顽强的研究人员在深度学习方面取得的关键算法进步,以及摩尔定律推动的原始计算能力的不可阻挡的增长。在人工智能引领复兴的领域中,机器学习已经取得了惊人的发展,并继续在一系列领域中找到最广泛的适用性。使用机器学习来帮助最高级别的企业制定复杂的决策,同时,它在提高搜索、语音识别和移动电话个人助理等日常应用的准确性方面取得了巨大成功,这使得它在家庭房间和董事会会议室中的影响变得司空见惯。如今,不仅在大众科技媒体上,而且在主流媒体上,如纽约时报、?? 和赫芬顿邮报都可以找到令人屏息的文章。机器学习确实在相对较短的时间内变得无处不在。

一个普通的用户在日常活动中会以多种方式遇到机器学习。包括雅虎(Yahoo)和 Gmail 在内的大多数电子邮件提供商都让用户自动将电子邮件分类为垃圾邮件、垃圾邮件、促销邮件等标题,这是通过使用文本挖掘(机器学习的一个分支)实现的。当在电子商务网站上在线购买产品,如【https://www.amazon.com/】,或观看内容提供商的电影,如网飞,一个人会被所谓的推荐系统提供其他产品和内容的推荐,这是机器学习的另一个分支,作为留住客户的有效方法。

预测天气,估计房地产价格,预测选民投票率,甚至选举结果——所有这些都使用某种形式的机器学习来预见未来。

不断增长的数据可用性和通过学习这些数据丰富我们生活的系统的前景,对数据科学领域有限的专业人员的技能提出了越来越高的要求。对于训练有素的专家来说,这种需求尤其迫切,他们知道如何使用更流行的语言(如 Java、Python、R,以及越来越多的 Scala)来处理机器学习技术。幸运的是,由于开源社区中成千上万的贡献者,每种语言都有一套丰富且快速增长的库、框架和教程,使得大多数情况下,任何有互联网连接和计算机的人都可以使用最先进的技术。Java 是工具和技术传播的重要载体,特别是在大规模机器学习项目中,因为它在企业级部署和可移植 JVM 平台中的成熟性和稳定性,更不用说多年来已经有大量专业程序员采用了它。因此,掌握当今劳动力中如此缺乏的技能将使任何渴望进入该领域的有抱负的专业人士在市场上处于明显的优势。

也许你已经在你的专业工作中应用了机器学习技术,或者你只是对这个主题感兴趣。如果你正在读这篇文章,很可能你已经可以随心所欲地使用 Java 了,没问题,但是现在你觉得你已经准备好更深入地学习如何在你的下一个数据科学项目中使用最好的开源 ML Java 框架了。如果那真的是你,那么这本书的章节被设计来做所有这些甚至更多,这是多么的幸运啊!

掌握一门学科,尤其是像机器学习这样具有明显适用性的学科,需要的不仅仅是理解其核心概念和熟悉其数学基础。与该主题的介绍性处理不同,一本旨在帮助你掌握该主题的书,除了介绍会扩展介绍性材料范围的更高级的主题之外,还必须重点关注实践方面。为了在我们开始提高技能之前热身,我们将在本章快速回顾一下我们已经知道的东西。对于之前很少或没有接触过该主题的雄心勃勃的新手(尽管如此,他决心从本书中获得最大的益处),这里是我们的建议:确保你不跳过本章的其余部分;相反,把它作为一个跳板,更深入地探索不熟悉的概念。必要时寻求外部资源。维基百科。然后跳回去。

在本章的剩余部分,我们将回顾以下内容:

  • 历史和定义
  • 什么不是机器学习?
  • 概念和术语
  • 机器学习的重要分支
  • 机器学习中的不同数据类型
  • 机器学习的应用
  • 机器学习面临的问题
  • 大多数机器学习项目中使用的元过程
  • 关于我们将在本书中使用的一些著名工具、API 和资源的信息

机器学习——历史和定义

很难给出一个准确的历史,但是我们今天使用的机器学习的定义早在 19 世纪 60 年代就有了。在勒内·笛卡尔关于方法的论述中,他提到自动机并说:

因为我们可以很容易地理解一台机器的构成,使它能够说话,甚至对作用于它的有形的动作发出一些反应,从而使它的器官发生变化;例如,如果触摸某个特定部位,它可能会问我们想对它说什么;如果在另一个地方,它可能会惊叫说它受到了伤害,等等。

注意

www . earlymoderntexts . com/assets/pdf/Descartes 1637 . pdf

www . Marxists . org/reference/archive/Descartes/1635/discourse-method . htm

艾伦·图灵在他的著名出版物计算机械和智能中,通过提出“机器能思考吗?”这个问题,给出了对机器学习目标的基本见解。

注意

csmt.uchicago.edu/annotations/turing.htm

www.csee.umbc.edu/courses/471/papers/turing.pdf

亚瑟·塞缪尔在 1959 年写道,“机器学习是一个研究领域,它赋予计算机学习的能力,而不需要明确的编程。”。

Tom Mitchell 最近对机器学习给出了更准确的定义:“如果一个计算机程序在 T 上的性能(由 P 测量)随着经验 E 的增加而提高,则称该程序在某些任务 T 和某些性能测量 P 方面从经验 E 中学习。”

机器学习与几个领域有关系:

  • 统计:它使用数据采样、估计、假设检验、学习理论和基于统计的建模等元素
  • 算法和计算:它使用了基础计算机科学中的搜索、遍历、并行化、分布式计算等基本概念
  • 数据库和知识发现:以各种格式存储、检索和访问信息的能力
  • 模式识别:对于来说,它有能力从数据中发现有趣的模式,进行探索、可视化和预测
  • 人工智能:虽然它被认为是人工智能的一个分支,但是它也和其他分支有关系,比如启发式、最优化、进化计算等等

什么不是机器学习?

重要的是要认识到与机器学习有共同联系的领域,但它们本身不能被视为机器学习的一部分。一些学科可能会或多或少地重叠,但机器学习的基本原理是非常不同的:

  • 商业智能(BI)和报告:报告关键绩效指标 ( KPI 的),查询 OLAP 进行切片、切块和钻取数据,仪表板等等,这些构成了 BI 的中心组件,不是机器学习。
  • 存储和 ETL :数据存储和 ETL 是任何机器学习过程中的关键元素,但是,它们本身并不具备机器学习的资格。
  • 信息检索、搜索和查询:基于构成信息检索基础的搜索标准或索引来检索数据或文档的能力,并不是真正的机器学习。许多形式的机器学习,如半监督学习,可以依赖于搜索相似的数据进行建模,但这并不意味着搜索是机器学习。
  • 知识表示和推理:表示用于执行复杂任务的知识,如本体、专家系统和语义网,不符合机器学习的条件。

机器学习——概念和术语

在本节中,我们将描述机器学习中通常使用的不同概念和术语:

  • 数据或数据集:机器学习的基础依赖于对数据的理解。数据或数据集通常是指用于机器学习的结构化或非结构化格式的可用内容。结构化数据集有特定的格式,非结构化数据集通常是一些自由流动的文本形式。数据可以以各种存储类型或格式提供。在结构化数据中,每个称为实例、示例或行的元素都遵循预定义的结构。数据也可以按大小分类:小型或中型数据有数百到数千个实例,而大型数据指的是大量数据,大多为数百万或数十亿,无法使用普通设备存储或访问,也无法放入此类设备的内存中。

  • 特性、属性、变量或维度:如前所述,在结构化数据集中,有预定义的元素,它们有自己的语义和数据类型,这些元素被称为特性、属性、度量、指示器、变量或维度。

  • 数据类型:早先定义的特征在很多机器学习算法或技术中需要某种形式的键入。最常用的数据类型如下:

    • 分类或名义:这表示数据集中存在定义明确的类别或值。比如眼睛颜色——黑色、蓝色、棕色、绿色、灰色;文档内容类型—文本、图像、视频。
    • 连续或数值:表示数据字段的数值性质。例如,通过浴室秤测量的一个人的体重,从传感器读取的温度,或者信用卡账户上每月的美元余额。
    • 序数:表示可以按某种方式排序的数据。比如服装尺码——小号、中号、大号;拳击重量级:重量级、次重量级、中量级、轻量级和次重量级。
  • 目标或标签:数据集中的一个特征或一组特征,用于从训练数据中学习和在未知数据集中进行预测,称为目标或标签。术语“基本事实”也用于某些领域。标签可以具有前面指定的任何形式,即分类的、连续的或顺序的。

  • 机器学习模型:每一个机器学习算法,基于它从数据集学到的东西,保持它的学习状态,用于预测或洞察未来或看不见的数据。这被称为机器学习模型。

  • 采样:数据采样是机器学习中必不可少的一步。抽样意味着从人口中选择一个子集的例子,目的是将(较小)样本中的行为视为(较大)人口行为的代表。为了使样本能够代表总体,在选择样本时必须小心。通常,群体由共享问题域中感兴趣的属性的每个对象组成,例如,所有有资格在大选中投票的人,或未来四年中所有潜在的汽车拥有者。由于通常禁止(或不可能)收集群体中所有对象的数据,因此选择一个精心挑选的子集进行分析。抽样过程中的一个重要考虑因素是样本相对于总体是无偏的。以下是基于概率的抽样类型:

    • 均匀随机抽样:这是指对均匀分布的总体进行抽样,即每个对象被选中的概率相等。
    • 分层随机抽样:这是指当数据可以分为多个类别时使用的抽样方法。在这种情况下,为了确保所有类别都在样本中得到代表,根据这些分类将总体划分为不同的阶层,并按照该阶层在总体中所占的比例对每个阶层进行抽样。当不同类别的人口密度不同时,分层抽样是常见的,用相同的统计功效比较这些类别是很重要的。当已知不同的人口统计群体以显著不同的方式投票时,政治投票通常涉及分层抽样。随机样本中每个群体的不成比例的代表性可能会导致投票结果出现较大误差。当我们控制人口统计时,我们可以避免对其他群体中的大多数进行过采样。
      *** 整群抽样:在被研究的人群中有时会存在自然群体,每个群体都代表整个人群。一个例子是跨越许多地理区域的数据。在整群抽样中,您从这些组中随机抽取一个子集,然后从每个组中随机抽取一个样本来构建完整的数据样本。这种抽样可以降低数据收集的成本,而不损害总体分布的保真度。* 系统抽样:当抽样框架中存在某种顺序时,使用系统抽样或区间抽样(有限的一组对象被视为总体,并作为抽样的数据来源,例如维基百科文章的语料库,按标题按字典顺序排列)。如果从一个随机对象开始选择样本,在选择下一个对象之前跳过恒定数量的对象,这被称为系统抽样。 k 的值计算为总体与样本大小的比值。**
  • 模型评估指标:评估模型的性能一般基于不同类型学习的不同评估指标。在分类上,一般是基于准确度、接收器工作特性 ( ROC )曲线、训练速度、内存需求、假阳性率等等,举几个例子(见第二章、现实世界监督学习实用方法)。在聚类中,发现的聚类的数量、内聚性、分离性等等形成了通用的度量标准(参见第三章、无监督机器学习技术)。在基于流的学习中,除了前面提到的标准指标,适应性、学习速度和对突然变化的鲁棒性是评估学习者表现的一些常规指标(参见第五章、实时流机器学习)。

为了说明这些概念,我们给出了一个常用的样本天气数据集形式的具体示例。该数据给出了一组天气条件和一个标签,该标签指示受试者是否决定在当天打网球:

**@relation weather**

**@attribute outlook {sunny, overcast, rainy}**
**@attribute temperature numeric**
**@attribute humidity numeric**
**@attribute windy {TRUE, FALSE}**
**@attribute play {yes, no}**

**@data**
**sunny,85,85,FALSE,no**
**sunny,80,90,TRUE,no**
**overcast,83,86,FALSE,yes**
**rainy,70,96,FALSE,yes**
**rainy,68,80,FALSE,yes**
**rainy,65,70,TRUE,no**
**overcast,64,65,TRUE,yes**
**sunny,72,95,FALSE,no**
**sunny,69,70,FALSE,yes**
**rainy,75,80,FALSE,yes**
**sunny,75,70,TRUE,yes**
**overcast,72,90,TRUE,yes**
**overcast,81,75,FALSE,yes**
**rainy,71,91,TRUE,no** 

数据集的格式为 ARFF ( 属性关系文件格式)文件。它由一个标题和数据标签后的实际逗号分隔数据组成,标题给出了关于特征或属性的信息及其数据类型。数据集有五个特征,分别是outlooktemperaturehumiditywindyplay。特征outlookwindy是分类特征,而humiditytemperature是连续的。特征play是目标并且是明确的。

**

机器学习——类型和子类型

我们现在将探索机器学习的不同子类型或分支。尽管下面的列表并不全面,但它涵盖了最常见的类型:

  • Supervised learning: This is the most popular branch of machine learning, which is about learning from labeled data. If the data type of the label is categorical, it becomes a classification problem, and if numeric, it is known as a regression problem. For example, if the goal of using of the dataset is the detection of fraud, which has categorical values of either true or false, we are dealing with a classification problem. If, on the other hand, the target is to predict the best price to list the sale of a home, which is a numeric dollar value, the problem is one of regression. The following figure illustrates labeled data that warrants the use of classification techniques, such as logistic regression that is suitable for linearly separable data, that is, when there exists a line that can cleanly separate the two classes. For higher dimensional data that may be linearly separable, one speaks of a separating hyperplane:Machine learning – types and subtypes

    线性可分数据

    Machine learning – types and subtypes

    不可线性分离的数据集示例。

    这类问题需要分类技术,如支持向量机。

  • Unsupervised learning: Understanding the data and exploring it for building machine learning models when the labels are not given is called unsupervised learning. Clustering, manifold learning, and outlier detection are techniques that are covered under this topic, which are dealt with in detail in Chapter 3, Unsupervised Machine Learning Techniques. Examples of problems that require unsupervised learning are many. Grouping customers according to their purchasing behavior is one example. In the case of biological data, tissues samples can be clustered based on similar gene expression values using unsupervised learning techniques.

    下图显示了具有固有结构的数据,使用无监督学习技术(如 k-means)可以将这些数据显示为不同的聚类:

    Machine learning – types and subtypes

    数据中的聚类

    使用不同的技术来检测全局异常值(相对于整个数据集异常的示例)和局部异常值(与其邻域不匹配的示例)。在下图中,针对双要素数据集说明了局部异常值和全局异常值的概念:

    Machine learning – types and subtypes

    局部和全局异常值

  • 半监督学习:当数据集只有一些已标记的数据和大量未标记的数据时,从这样的数据集学习称为半监督学习。例如,当以检测欺诈为目标处理金融数据时,可能有大量未标记的数据,而只有少量已知的欺诈和非欺诈交易。在这种情况下,可以应用半监督学习。

  • 图挖掘:挖掘以图结构表示的数据被称为图挖掘。它是不同生物信息学、web 挖掘和社区挖掘应用中的社会网络分析和结构分析的基础。

  • 概率图建模和推理:学习和利用特征之间存在的条件依赖结构,表示为基于图的模型,属于概率图建模的分支。贝叶斯网络和马尔可夫随机场就是两类这样的模型。

  • 时间序列预测:这是一种学习形式,其中数据具有独特的时间行为,并且与时间的关系被建模。一个常见的例子是在金融预测中,某个部门的股票表现可能是预测模型的目标。

  • 关联分析:这是的一种学习形式,其中数据以项目集或购物篮的形式存在,并且关联规则被建模以探索和预测项目之间的关系。关联分析中的一个常见示例是了解顾客在逛杂货店时购买的最常见商品之间的关系。

  • 强化学习:这是一种学习形式,机器根据从环境中收到的奖励或惩罚形式的反馈,学习最大化性能。最近一个著名的使用强化学习和其他技术的例子是 AlphaGo,由谷歌开发的机器在 2016 年 3 月决定性地击败了世界围棋冠军 Lee Sedol。使用奖励和惩罚方案,该模型首先在监督学习阶段对数百万个棋盘位置进行训练,然后在强化学习阶段自我发挥,最终变得足够好,以战胜最佳人类玩家。

    注意

    ??www。大西洋。com/technology/archive/2016/03/the-invisible-opposite/475611/

    gogameguru.com/i/2016/03/deepmind-mastering-go.pdf

  • 流学习或增量学习:实时或伪实时从流数据中以有监督、无监督或半监督的方式学习称为流或增量学习。从不同类型的工业系统中学习传感器的行为以便分类为正常和异常是需要实时反馈和实时检测的应用。

机器学习中使用的数据集

为了从数据中学习,我们必须能够理解并管理所有形式的数据。数据来自许多不同的来源,因此,数据集在结构上可能差异很大,或者几乎没有或根本没有结构。在这一节中,我们将介绍数据集的高级分类以及常见的示例。

根据数据集的结构或缺乏结构,数据集可分为以下几类:

  • 结构化数据:具有结构化数据的数据集更适合用作大多数机器学习算法的输入。数据是记录或行的形式,遵循众所周知的格式,其特征是表格中的列或由分隔符或标记分隔的字段。记录或实例之间没有明确的关系。数据集主要存在于平面文件或关系数据库中。下图所示的银行金融交易记录就是一个结构化数据的例子:Datasets used in machine learning

    带有欺诈标签的金融卡交易数据

  • 交易或市场数据:这是一种特殊形式的结构化数据,其中每个条目对应一组项目。市场数据集的例子是不同客户购买的杂货物品或客户观看的电影的列表,如下表所示:Datasets used in machine learning

    从杂货店购买的商品的市场数据集

  • Unstructured data : Unstructured data is normally not available in well-known formats, unlike structured data. Text data, image, and video data are different formats of unstructured data. Usually, a transformation of some form is needed to extract features from these forms of data into a structured dataset so that traditional machine learn Ing algorithms can be applied.Datasets used in machine learning

    The sample text data has no recognizable structure, so it is unstructured. Separating spam from normal mail is a binary classification problem. Here, true affirmation (spam) and true negation (ham) are distinguished by their tags, which are the second tag in each data instance. Spam SMS collection data set (UCI machine learning library), source: Tiago A. Almeida, Federal University of San Carlos.

  • Sequential data: Sequential data have an explicit notion of "order" to them. The order can be some relationship between features and a time variable in time series data, or it can be symbols repeating in some form in genomic datasets. Two examples of sequential data are weather data and genomic sequence data. The following figure shows the relationship between time and the sensor level for weather:Datasets used in machine learning

    来自传感器数据的时间序列

    考虑三个基因组序列以显示序列CGGGTTTGAAAGTGGTG在所有三个基因组序列中的重复:

    Datasets used in machine learning

    作为符号序列的 DNA 基因组序列。

  • 图形数据:图形数据的特点是数据中实体之间存在关系形成图形结构。图表数据集可以是结构化记录格式或非结构化格式。通常,必须从数据集中挖掘图形关系。保险领域的索赔可以被认为是结构化的记录,其中包含与索赔人通过地址、电话号码等相关的相关索赔细节。这可以在图形结构中查看。以万维网为例,我们有包含链接的非结构化数据的可用网页,以及可以使用 Web 链接构建的网页之间的关系图,产生了当今最广泛挖掘的一些图数据集:Datasets used in machine learning

    保险索赔数据,转换成图形结构,显示车辆、司机、保单和地址之间的关系

机器学习应用

鉴于机器学习在人类努力的不同领域中的使用迅速增长,任何列出不同行业中使用某种形式的机器学习的典型应用的尝试必然是不完整的。然而,在本节中,我们按领域和所采用的学习类型列出了一组广泛的机器学习应用:

|

领域/行业

|

应用程序

|

机器学习类型

金融的 信用风险评分、欺诈检测和反洗钱 监督、非监督、图形模型、时间序列和流学习
在线活动、健康监测和广告定位 有监督的,无监督的,半监督的
卫生保健 循证医学、流行病学监测、药物事件预测和索赔欺诈检测 监督、非监督、图形模型、时间序列和流学习
物联网 ( 物联网) 网络安全、智能道路和传感器健康监控 监督、非监督、半监督和流学习
环境 天气预报、污染建模和水质测量 时间序列、监督、非监督、半监督和流学习
零售 库存、客户管理和建议、布局和预测 时间序列、监督、非监督、半监督和流学习

机器学习的应用

机器学习中的实际问题

在处理需要机器学习的问题时,有必要了解约束的性质和潜在的次优条件。对这些问题的性质、其存在的影响以及处理它们的方法的理解将在接下来的章节中的讨论中进行。在此,我们简要介绍一下我们面临的实际问题:

  • 数据质量和噪声:缺失值、重复值、由于人为或仪器记录错误导致的不正确值以及不正确的格式是在建立机器学习模型时要考虑的一些重要问题。不解决数据质量问题会导致模型不正确或不完整。在下一章中,我们将强调其中的一些问题,以及通过数据清理来克服这些问题的一些策略。

  • 不平衡数据集:在许多真实世界的数据集中,训练数据中的标签之间存在不平衡。数据集中的这种不平衡影响了学习的选择、选择算法的过程、模型评估和验证。如果没有采用正确的技术,模型可能会出现很大的偏差,并且学习是无效的。在接下来的几章中,我们将详细介绍使用元学习过程的各种技术,例如成本敏感学习、集成学习、异常值检测等等,这些技术都可以在这些情况下使用。

  • 数据量、速度和可扩展性:通常,大量数据以原始形式或高速实时流数据的形式存在。从整个数据中学习变得不可行,这或者是由于算法固有的约束,或者是硬件限制,或者是它们的组合。为了减少数据集的大小以适应可用的资源,必须进行数据采样。采样有多种方式,每种采样方式都会引入偏差。针对样本偏差对模型进行验证必须采用各种技术,如分层抽样、改变样本大小和增加不同组的实验规模。使用大数据机器学习也可以克服体积和采样偏差。

  • 过拟合:预测模型的一个核心问题是模型不够一般化,过于适合给定的训练数据*。这导致模型在应用于看不见的数据时表现不佳。在后面的章节中描述了各种技术来克服这些问题。*

  • 维度的诅咒:当处理高维数据,即具有大量特征的数据集时,机器学习算法的可扩展性成为一个严重的问题。向数据添加更多特征的一个问题是它引入了稀疏性,也就是说,现在平均每单位特征空间体积的数据点更少,除非特征数量的增加伴随着训练样本数量的指数增加。这可能会影响许多方法的性能,例如基于距离的算法。添加更多的功能也会降低学习者的预测能力,如下图所示。在这种情况下,需要更合适的算法,或者必须降低数据的维数。Practical issues in machine learning分类学习中的维数灾难,增加更多的特征会降低分类器的性能

机器学习——角色和流程

任何将机器学习应用于大型问题的努力都需要许多角色的协作,每个角色都遵循一套为严谨、高效和稳健而设计的系统流程。以下角色和流程确保从一开始就明确定义了工作目标,并在数据分析、数据采样、模型选择、部署和性能评估中采用了正确的方法,所有这些都是以一致且可重复的方式进行分析的综合框架的一部分。

角色

参与者在每个步骤中扮演特定的角色。这些职责包含在以下四个角色中:

  • 业务领域专家:具有问题领域知识的主题事务专家
  • 数据工程师:参与数据的收集、转换和清理
  • 项目经理:过程顺利进行的监督者
  • 数据科学家或机器学习专家:负责应用描述性或预测性分析技术

流程

CRISP ( 跨行业标准流程)是一个众所周知的用于数据挖掘的高级流程模型,它定义了分析流程。在这一节中,我们为 CRISP 流程添加了一些我们自己的扩展,使其更加全面,更适合使用机器学习进行分析。下图展示了整个迭代过程。我们将在本节详细讨论该过程的每个步骤。

Process

  • 识别业务问题:理解项目或流程的目标和最终目标是第一步。这通常由业务领域专家与项目经理和机器学习专家共同完成。在数据可用性、格式、规范、收集、ROI、商业价值、可交付成果方面的最终目标是什么?所有这些问题都将在流程的这个阶段进行讨论。清楚地确定目标,并在可能的情况下用可量化的术语确定*,例如节省的金额、发现预定义数量的异常或聚类,或者预测不超过一定数量的误报,等等,这是此阶段的一个重要目标。*
  • 机器学习映射:下一步是将业务问题映射到上一节讨论的一个或多个机器学习类型。这一步一般由机器学习专家来完成。在其中,我们决定我们是否应该只使用一种学习形式(例如,监督的、非监督的、半监督的),或者多种形式的混合是否更适合这个项目。
  • 数据收集:获取约定格式和规格的原始数据,然后进行处理。这一步通常由数据工程师执行,可能需要处理一些基本的 ETL 步骤。
  • 数据质量分析:在这一步中,我们对数据进行缺失值、重复值等分析,对分类和连续类型进行基本的统计分析,以及类似的任务来评估数据的质量。数据工程师和数据科学家可以一起执行任务。
  • 数据采样和转换:确定是否需要将数据划分成样本,并执行各种大小的数据采样,用于训练、验证或测试——这些是在该步骤中执行的任务。它包括采用不同的采样技术,例如训练数据集的过采样和随机采样,以便通过算法进行有效的学习,特别是当数据在标签中高度不平衡时。数据科学家参与了这项任务。
  • 特征分析和选择:这是一个迭代过程,在许多任务中与建模相结合,以确保对特征的鉴别值或有效性进行分析。它可能涉及在建模过程之前查找新要素、转换现有要素、处理前面提到的数据质量问题、选择要素子集等等。数据科学家通常会被分配这项任务。
  • 机器学习建模:这是一个基于数据特征和学习类型的不同算法的迭代过程。它涉及不同的步骤,例如生成假设、选择算法、调整参数,以及从评估中获得结果以找到满足标准的模型。数据科学家执行这项任务。
  • 模型评估:虽然这一步在某种程度上与前面的所有步骤相关,但它与业务理解阶段和机器学习映射阶段的联系更加紧密。评估标准必须以某种方式映射到业务问题或目标。每个问题/项目都有自己的目标,无论是提高真阳性、减少假阳性、发现异常集群或行为,还是分析不同集群的数据。基于学习技术,使用不同的技术来隐式或显式地测量这些目标。数据科学家和业务领域专家通常会参与这一步。
  • 模型选择和部署:根据评估标准,选择一个或多个模型——独立的或作为一个集合。模型的部署通常需要解决几个问题:运行时可伸缩性度量、环境的执行规范、审计信息等等。基于学习获取关键参数的审计信息是该流程的重要组成部分。它确保可以跟踪和比较模型性能,以检查模型的退化和老化。保存关键信息(如培训数据量、日期、数据质量分析等)与学习类型无关。监督学习可能涉及保存混淆矩阵、真阳性率、假阳性率、ROC 曲线下面积、精确度、召回率、错误率等等。无监督学习可能涉及聚类或离群值评估结果、聚类统计等。这是数据科学家和项目经理的领域。
  • 模型性能监控:这个任务包括定期跟踪模型的性能,按照标准进行评估,比如真阳性率、假阳性率、性能速度、内存分配等等。必须测量这些度量相对于训练模型性能的连续评估之间的度量的偏差。随着时间的推移,偏差和偏差中的容差将给出重复该过程或重新调整模型的见解。数据科学家负责这一阶段。

从上图可以看出,整个过程是一个迭代过程。在部署了一个模型或一组模型之后,业务和环境因素可能会以影响解决方案性能的方式发生变化,这需要重新评估业务目标和成功标准。这又把我们带回到循环中。

机器学习——工具和数据集

掌握成功完成机器学习中任何规模或复杂程度的项目所必需的技术的一个可靠方法是,通过对广泛使用的数据集进行实验来熟悉可用的工具和框架,如下一章所示。下面列出了对最流行的 Java 框架的简短调查。后面的章节将包括您将使用以下工具进行的实验:

  • RapidMiner :领先的分析平台,RapidMiner 提供多种产品,包括 Studio,一个用于流程的可视化设计框架,一个通过共享数据源、流程、和实践来促进协作环境的产品,以及 Radoop,一个支持在 Hadoop 生态系统上部署和执行的翻译系统。RapidMiner Cloud 提供了基于云的存储库和按需计算能力。

    • 许可 : GPL(社区版)和商业(企业版)
    • 网站:rapidminer.com/
  • Weka :这是一个全面的开源 Java 工具集,用于数据挖掘和构建机器学习应用程序,拥有自己的公开可用数据集集合。

    • 许可证 : GPL
    • 网站:www.cs.waikato.ac.nz/ml/weka/
  • Knime : KNIME(我们被敦促用不发音的 k 来发音,如“naime”)分析平台是用 Java 编写的,并提供一个集成的工具集、一组丰富的算法和一个可视化的工作流来进行分析,而不需要标准的编程语言,如 Java、Python 和 r。然而,人们可以用 Java 和其他语言编写脚本来实现 Knime 中本地不可用的功能。

    • 许可证 : GNU GPL v3
    • 网站:www.knime.org/
  • 这是一个用于 NLP 的 Java 库。它提供了文档分类、序列标记、主题建模和其他基于文本的机器学习应用,以及用于任务管道的 API。

    • 许可证:通用公共许可证版本 1.0 (CPL-1)
    • 网站:mallet.cs.umass.edu/
  • Elki:这款是一款面向研究的 Java 软件,主要致力于使用无监督的算法进行数据挖掘。它使用提高多维数据访问性能的数据索引结构来实现高性能和可伸缩性。

    • 牌照 : AGPLv3
    • 网站:elki.dbs.ifi.lmu.de/
  • JCLAL :这是一个用于主动学习的 Java 类库,是一个用于开发主动学习方法的开源框架,是处理从有标签和无标签数据混合中学习预测模型的领域之一(半监督学习是另一个领域)。

    • 许可证 : GNU 通用公共许可证版本 3.0 (GPLv3)
    • 网站:sourceforge.net/projects/jclal/
  • KEEL :这是一个用 Java 编写的开源软件,用于设计实验,主要是适合于实现基于进化学习和软计算的技术来解决数据挖掘问题。

    • 牌照 : GPLv3
    • 网站:www.keel.es/
  • DeepLearning4J :这个是一个针对 Java 和 Scala 的分布式深度学习库。DeepLearning4J 集成了 Spark 和 Hadoop。异常检测和推荐系统是非常适合通过深度学习技术生成的模型的用例。

    • 执照:阿帕奇执照 2.0
    • 网站:deeplearning4j.org/
  • Spark-MLlib 😦包含在 Apache Spark 发行版中)MLlib 是 Spark 中包含的主要用 Scala 和 Java 编写的机器学习库。自从 Spark 中引入数据帧后,我们推荐使用写在数据帧之上的spark.ml包,而不是原来的spark.mllib包。MLlib 包括对分析过程所有阶段的支持,包括统计方法、分类和回归算法、聚类、降维、特征提取、模型评估和 PMML 支持等。MLlib 的另一个方面是支持使用管道或工作流。除了 Java 之外,还可以从 R、Scala 和 Python 访问 MLlib。

    • 执照:阿帕奇执照 v2.0
    • 网站:spark.apache.org/mllib/
  • H2O : H2O 是一个基于 Java 的库,除了 Java 之外,还支持 R 和 Python 中的 API。H2O 也可以在 Spark 上运行自己的应用程序“苏打水”。H2O 流是一个基于网络的交互环境,在一个类似笔记本的文档中包含可执行单元和富媒体。

    • 执照:阿帕奇执照 v2.0
    • 网站:www.h2o.ai/
  • MOA/SAMOA :瞄准机器从数据流学习使用流处理平台的可插拔接口,在撰写本文时,SAMOA 是一个 Apache 孵化器项目。

    • 执照:阿帕奇执照 v2.0
    • 网站:samoa.incubator.apache.org/
  • Neo4j : Neo4j 是一个用 Java 和 Scala 实现的开源 NoSQL 图形数据库。正如我们将在后面的章节中看到的,图分析有各种各样的用例,包括配对、路由、社交网络、网络管理等等。Neo4j 支持完全 ACID 事务。

    • 许可证:社区版—GPLv3 和企业版—多种选择,包括商业和教育(neo4j.com/licensing/)
    • 网站:neo4j.com/
  • GraphX :这是包含在 Apache Spark 发行版中的。GraphX 是伴随 Spark 的图形库。该 API 广泛支持查看和操作图形结构,以及一些图形算法,如 PageRank、连接组件和三角形计数。

    • 执照:阿帕奇执照 v2.0
    • 网站:spark.apache.org/graphx/
  • OpenMarkov:OpenMarkov 是编辑和评估概率图形模型 ( PGM )的工具。它包括一个用于交互式学习的 GUI。

    • 牌照:EUP LV 1.1(joinup.ec.europa.eu/community/eupl/og_page/eupl)
    • 网站:www.openmarkov.org/
  • Smile 是 JVM 的一个机器学习平台,拥有大量的算法库。它的功能包括 NLP、流形学习、关联规则、遗传算法和一套通用的可视化工具。

    • 执照:阿帕奇执照 2.0
    • 网站:haifengl.github.io/smile/

数据集

许多公开可用的数据集极大地帮助了数据科学的研究和学习。下一节中列出的几个方法是众所周知的,多年来被许多研究人员用来对他们的方法进行基准测试。新的数据集不断出现,为不同的建模者和用户群体提供服务。大多数是来自不同领域的真实世界数据集。本卷中的练习将使用该列表中的几个数据集。

  • 加州大学欧文分校(UCI)数据库:由加州大学欧文分校的机器学习和智能系统中心维护,UCI 数据库是大约 350 个不同大小的数据集的目录,从十几个到四千多万个记录和多达三百万个属性,混合了多元文本、时间序列和其他数据类型。(archive.ics.uci.edu/ml/index.html)
  • Tunedit:(【http://tunedit.org/】??)这为 Tunedit 提供了挑战和工具来进行可重复的数据挖掘实验。它还提供了一个举办数据竞赛的平台。
  • Mldata.org:(mldata.org/)由 PASCAL 2 组织支持,该组织汇集了欧洲和世界各地的研究人员和学生,mldata.org 主要是一个用户贡献数据集的存储库,鼓励研究人员群体之间共享数据和解决方案,以帮助实现创建可复制解决方案的目标。
  • KDD 挑战赛数据集:(www.kdnuggets.com/datasets/index.html)KD nuggets 聚集了多个数据集存储库,跨越了各种各样的领域。
  • ka ggle:ka ggle 号称数据科学的之家,是数据科学竞赛的领先平台,也是过去竞赛数据集和用户提交数据集的存储库。

总结

尽管机器学习是一个相对年轻的领域,但它已经取得了令人印象深刻的成功。随着 Java 资源的无处不在、Java 的平台独立性以及 Java 中 ML 框架的选择,使用 Java 进行机器学习的高超技能在当今市场上是非常受欢迎的资产。

机器学习已经以某种形式存在了很长时间——如果只是在思想家的想象中,在开始的时候。然而,最近的发展对我们日常生活的许多领域产生了根本性的影响。机器学习与统计学、人工智能和其他几个相关领域有许多共同之处。尽管一些数据管理、商业智能和知识表示系统也可能在它们中的每一个中与数据的中心角色相关,但是它们通常不与机器学习领域中体现的从数据学习的原则相关联。

任何关于机器学习的讨论都会假设理解什么是数据,以及我们关心的是什么数据类型。它们是绝对的、连续的还是有序的?有哪些数据特征?目标是什么,哪些是预测指标?可以使用哪种抽样方法——均匀随机、分层随机、整群或系统抽样?型号是什么?我们看到了一个包含 ARFF 格式的分类和连续要素的天气数据集示例。

机器学习的类型包括监督学习,当有标签数据时最常见,当没有标签数据时无监督,当两者混合时半监督。接下来的章节将详细介绍这些,以及图挖掘、概率图建模、深度学习、流学习和大数据学习。

数据有多种形式:结构化、非结构化、事务性、顺序性和图表。我们将在本书后面的练习中使用不同结构的数据。

领域和不同种类的机器学习应用程序的列表不断增长。这篇综述介绍了最活跃的领域和应用。

理解并有效处理实际问题,如噪音数据、倾斜数据集、过度拟合、数据量和维数灾难,是项目成功的关键,也是每个项目面临独特挑战的原因。

使用机器学习进行分析是一项协作工作,涉及多个角色和明确定义的流程。为了获得一致且可重复的结果,采用本文概述的增强型 CRISP 方法至关重要—从了解业务问题到数据质量分析、建模和模型评估,最后到模型性能监控。

数据科学的从业者有幸拥有丰富且不断增长的公众可用数据集目录,以及越来越多的 Java 和其他语言的 ML 框架和工具。在接下来的章节中,你将被介绍几个数据集、API 和框架,以及先进的概念和技术,使你具备掌握机器学习所需的一切。

准备好了吗?向前冲。***

二、现实世界监督学习的实用方法

从带有标记目标或标签的观察中学习的能力,通常是为了对未知数据做出预测,被称为监督机器学习。如果目标是类别,则问题是一个分类的,如果是数值,则称为回归。实际上,我们尝试的是推断将数据映射到目标的函数。有监督的机器学习被广泛用于各种各样的机器学习应用中,只要有标记的数据可用或者可以手动添加标记。

监督机器学习的核心假设是,从训练中使用的数据中学习到的模式将在尚未看到的数据中表现出来。

在本章中,我们将讨论在继续训练模型之前用于探索、分析和预处理数据的步骤。然后我们将介绍不同的建模技术,从简单的线性模型到复杂的集合模型。我们将展示不同的评估指标和验证标准,让我们能够比较模型的性能。一些讨论伴随着简短的数学解释,这将有助于更精确地表达概念,并激起更倾向于数学的读者的兴趣。在这一章中,我们将把重点放在作为监督学习的一种方法的分类上,但是这些原理适用于监督学习的两个广泛应用——分类和回归。

从本章开始,我们将介绍一些工具来帮助说明如何使用每章中介绍的概念来解决机器学习问题。没有什么比将新学到的知识直接应用到现实世界的问题中更能加深理解的了。在这个过程中,我们通常会获得比被动吸收理论更清晰、更相关的理解。如果学习新工具的机会是学习的一部分,那就更好了!为了实现这一目标,我们将引入大多数数据科学从业者熟悉的分类数据集,并使用它来解决分类问题,同时强调指导解决方案的流程和方法。

在本章中,我们将使用 RapidMiner 和 Weka 来构建我们从一个众所周知的数据集学习的过程。网站上提供了工作流和代码,供读者下载、执行和修改。

RapidMiner 是一个基于 GUI 的 Java 框架,它使得从工具内部进行端到端的数据科学项目变得非常容易。它有一个简单的拖放界面来构建流程工作流,以摄取和清理数据、探索和转换功能、使用各种机器学习算法执行培训、进行验证和模型评估、将您的最佳模型应用于测试数据等。这是一个很好的工具,可以学习如何使流程的各个部分协同工作并快速产生结果。Weka 是另一个基于 GUI 的框架,它有一个 Java API,我们将用它来说明执行分析所需的更多编码。

我们将在本章中讨论的主要话题是:

  • 数据质量分析
  • 描述性数据分析
  • 可视化分析
  • 数据转换和预处理
  • 数据采样
  • 特征相关性分析和降维
  • 模型结构
  • 模型评估、评价和比较
  • 详细案例研究——马绞痛分类

形式描述和符号

我们想为监督学习中使用的术语介绍一些符号和正式定义。如果没有特别说明,我们将在本书的其余部分遵循这一符号,并在遇到新概念时适当地扩展它。该符号将提供一种精确和一致的语言来描述艺术术语,并能够更快速和有效地理解主题。

  • 实例:每一个观察都是一个数据实例。通常变量 X 用于表示输入空间。每个数据实例有许多变量(也称为特征),被称为维度为 dx (粗体向量表示),其中 d 表示每个实例中变量或特征或属性的数量。这些特征表示为x=(x[1],x [2] ,…x[d])^T,其中每一个值都是与特征值相对应的数值时的标量。

  • 标签:标签(也叫目标)是感兴趣的因变量,一般用 y 表示。在分类中,标签的值是问题域中明确定义的类别;它们不必是数字或是可以订购的东西。在回归中,标签是实值的。

  • Binary classification, where the target takes only two values, it is mathematically represented as:

    y ∈ {1,–1 }

  • 回归,其中目标可以取实数域内的任意值,表示为:Formal description and notation

  • 数据集:一般来说,数据集用 D 表示,由单个数据实例及其标签组成。实例通常表示为 set { x [1] ,x[2]…x[n]}。每个实例的标签表示为集合y= {y[1],y [2] ,…y [n] }。整个被标记的数据集被表示为集合中的成对元素,由D= {(x[1], y [1] ),( x [2] ,y[2])……(x[n],y

数据质量分析

从质量差的数据中学到的东西是有限的。质量问题可能包括噪音数据、缺失值和标签错误等因素。因此,第一步是了解我们面前的数据,以便我们可以确定如何解决任何数据质量问题。异常值仅仅是噪音还是群体中有趣异常的指示?对于所有要素,是否应该以相同的方式处理缺失数据?稀疏特征应该如何处理?这些和类似的问题一开始就出现了。

如果幸运的话,我们会收到一个干净的、准确标记的数据集,并附有描述数据元素、数据谱系以及数据是否已经进行了任何转换的文档。这样的数据集可以使用数据采样一节中描述的方法分成训练样本、验证样本和测试样本。但是,如果数据没有经过清理,不适合进行分区,那么在开始采样之前,我们必须首先对数据进行原则性的准备。(对数据进行分区的重要性将在本章后面专门讨论定型、验证和测试集的部分中解释)。

在以下部分中,我们将讨论在分析要素之前所需的数据质量分析和转换步骤。

描述性数据分析

应对完整的数据样本(包括训练、验证和测试)进行分析和总结,以获得以下特征。在数据还没有被划分为训练、验证和测试的情况下,数据转换的任务需要确保样本具有相似的特征和统计数据。这对于确保经过训练的模型能够对看不见的数据进行归纳至关重要,我们将在数据采样一节中了解到这一点。

基本标签分析

分析的第一步是了解标签在不同集合中的分布,以及在整个数据中的分布。这有助于确定,例如,目标变量的分布是否不平衡,如果是,是否在所有样本中是一致的。因此,第一步通常是找出每个类在训练和测试集中有多少个例子。

基本特征分析

下一步是计算每个特征的统计数据,例如

  • 唯一值的数量
  • 缺失值的数量:可能包括按不同缺失值替代项分组的计数(NA,null,?,以此类推)。
  • 对于分类:这跨特征类别计数,按标签类别跨特征类别计数,最常出现的类别(模式),按标签类别的模式,等等。
  • 对于数值型:最小值、最大值、中值、标准差、方差等。

特征分析提供了基本的见解,可以作为影响学习过程或算法选择的缺失值和噪声的有用指标。

可视化分析

数据的可视化是一个广泛的话题,它是机器学习和数据挖掘领域中一个不断发展的领域。我们将只讨论可视化的一些重要方面,这些方面有助于我们在实践中分析数据。

单变量特征分析

这里的目标是一次可视化一个与标签相关的特征。使用的技术如下:

分类特征

当问题是分类时,堆叠的条形图是显示标签中每个特征类别分布的简单方式。

连续特征

直方图和箱线图是连续特征的两种基本可视化技术。

直方图具有预定义的条柱,其宽度或者是固定的间隔,或者是基于用于分割全范围特征值的某种计算。然后,对落入每个容器中的数据实例的数量进行计数,并基于该计数调整容器的高度。存在直方图的变体,例如相对或基于频率的直方图、Pareto 直方图、二维直方图等等;每一个都是概念的细微变化,允许对特性有不同的理解。对于那些有兴趣了解这些变体的人来说,维基百科关于直方图的文章是一个很好的资源。

箱线图是数值特征的关键可视化技术,因为它们以百分点和异常值的形式显示分布。

多元特征分析

多元特征分析的理念是将多个特征可视化,以深入了解它们之间的关系。这里解释一些众所周知的情节。

  • 散点图:一种重要的技术,用于理解不同特征之间以及特征和标签之间的关系。通常,二维散点图在实践中使用,其中数字特征形成维度。数据点在某个假想轴上的排列显示出相关性,而数据点的分散显示出无相关性。在低维空间中识别聚类也是有用的。气泡图是散点图的变体,其中两个特征形成维度轴,第三个特征与数据点的大小成比例,该图呈现出“气泡”区域的外观。密度图表通过引入数据点颜色、背景颜色等来帮助可视化更多的特征,从而提供更多的见解。

  • 散点图矩阵:散点图矩阵是散点图的扩展,其中每个特征(和标签)的成对散点图被可视化。它提供了一种有效比较和执行高维数据多元分析的方法。

  • 平行图:在该可视化中,每个特征线性排列在 x 轴上,每个特征的值的范围形成了 y 轴。因此,每个数据元素都表示为一条线,每个特性的值位于平行轴上。类别标签(如果有)用于给线条着色。平行图有助于更好地理解有效分离数据的特征。离差图是平行图的变体,其中不是显示实际数据点,而是绘制平均值和标准偏差。安德鲁斯图是平行图的另一种变体,其中数据使用傅立叶级数进行转换,并且对应于每个的函数值被投影。

数据转换和预处理

在本节中,我们将讨论数据转换的广泛话题。数据转换的主要思想是获取输入数据,并以谨慎的方式对其进行转换,以便对其进行清理,从中提取最相关的信息,并将其转换为可用于进一步分析和学习的形式。在这些转换过程中,我们必须只使用设计好的方法,同时记住不要添加任何会影响数据完整性的偏见或工件。

特征构建

在某些数据集的情况下,我们需要从已经给定的特征中创建更多的特征。通常,某种形式的聚合是使用常见的聚合器(如平均值、总和、最小值或最大值)来创建附加要素。例如,在金融欺诈检测中,卡欺诈数据集通常包含账户在账户活跃的不同时间段内的交易行为。执行行为合成(例如通过捕获“一天内每个账户发生借记交易时的金额总和”)是向数据集添加新维度(基于现有要素构建)的要素构造示例。一般来说,设计增强数据预测能力的新功能需要领域知识和数据经验,使其成为一门艺术和科学。

处理缺失值

在真实世界的数据集中,许多要素通常会有缺失值。在某些情况下,它们因测量误差、记录失误或因各种情况无法获得而丢失;例如,个人可以选择不透露年龄或职业。为什么要关心缺失值呢?一种极端且不常见的处理方法是忽略那些缺少特征的记录,换句话说,只保留那些“完整”的例子。当丢失的要素在数据中普遍存在时,这种方法可能会大大减小数据集的大小。正如我们将在后面看到的,如果我们正在处理的系统是复杂的,数据集的大小可以为我们提供宝贵的优势。此外,即使在“不完整”的记录中,尽管存在缺失值,但只要我们使用适当的措施来处理问题,通常也有可以利用的预测值。另一方面,当数据本身的遗漏很严重时,一个可能会无意中丢弃关键信息,如在贷款申请中故意虚报或混淆信息,隐瞒可用于最终确定骨 fides 的信息。

可以说,学习过程中的一个重要步骤是采用一些系统化的方法来处理缺失值,并理解每个案例中决策的后果。有一些算法(如 nave Bayes)对缺失值不太敏感,但一般来说,在对数据进行任何形式的分析之前,最好将这些缺失值作为预处理步骤进行处理。以下是处理缺失值的一些方法。

  • 用均值和众数替换:当我们用连续值特征的均值替换该特征的缺失值时,新的均值显然保持不变。但是,如果平均值受到异常值的严重影响,更好的方法可能是在计算中剔除异常值后使用平均值,或者使用中位数或众数。同样,当某个要素在数据集中稀疏表示时,平均值可能没有意义。对于具有分类值的要素,用样本中出现频率最高的值替换缺失值是一种合理的选择。
  • 通过插补替换:当我们插补缺失值时,我们实际上是在构建特征的分类或回归模型,并根据记录中的其他特征进行预测,以便对缺失值进行分类或估计。
  • 最近邻插补:对于分类特征的缺失值,我们将所讨论的特征视为目标,并训练一个 KNN 模型,其中 k 为不同类别的已知数量。然后,该模型用于预测缺失值。(KNN 模型是非参数化的,它根据相邻数据实例的函数为“传入”数据实例赋值,该算法将在本章稍后讨论非线性模型时介绍)。
  • 基于回归的插补:在连续值变量的情况下,我们使用线性模型(如线性回归)来估计缺失数据,其原理与分类值相同。
  • 用户自定义插补:在许多情况下,最适合输入缺失值的值必须来自问题域。例如,7.0 的 pH 值是中性的,更高的是碱性的,更低的是酸性的。最有意义的可能是估算一个中性 pH 值,而不是平均值或中值,这种见解是用户定义估算的一个实例。同样,在用正常体温或静息心率替代的情况下——这些都是医学上的例子。

离群值

处理异常值需要大量的关注和分析。异常值可能是数据中的噪音或错误,也可能是特别感兴趣的异常行为。后一种情况在第三章、无监督机器学习技术中有深入的论述。这里,我们假设前一种情况,即领域专家确信这些值确实是第一种意义上的异常值,即需要适当处理的噪声或错误获取或记录的数据。

以下是检测数据异常值的不同技术

  • 四分位距(IQR) :四分位距是对数据可变性的度量,或者等同于统计离差。每个数字特征根据其在数据集中的值进行排序,然后有序集被分成四分位数。中值一般用来衡量集中趋势。IQR 用上下四分位数之间的差值 Q3-Q1 来衡量。异常值通常被认为是高于 Q3 + 1.5 * IQR 和低于 Q1 - 1.5 * IQR 的数据值。

  • 基于距离的方法:基于距离的方法的最基本形式使用k-最近邻 ( k-NN )和距离度量来给数据点评分。常用参数是 k-NN 中的值 k 和一个距离度量,例如欧几里德距离。距离最远的数据点被认为是异常值。有许多使用局部邻域、概率或其他因素的变体,这些都将在第三章、无监督机器学习技术中讨论。混合数据集既有分类特征又有数字特征,会扭曲基于距离的度量。

  • 基于密度的方法:基于密度的方法计算给定距离 D 内数据点的比例,如果比例小于指定阈值 p,则认为是离群点。参数 p 和 D 被认为是用户定义的值;适当选择这些值的挑战是在预处理阶段使用这些方法的主要障碍之一。

  • 特征的数学转换:对于非正态数据,比较的平均值会产生很大的误导,就像存在异常值的情况一样。非参数统计允许我们对高度倾斜的数据进行有意义的观察。在许多情况下,使用对数或平方根函数对这些值进行转换往往会使数据标准化,或者使它们更易于进行统计测试。这些变换极大地改变了要素分布的形状,例如,异常值越极端,对数变换的影响就越大。

  • 在机器学习模型中使用稳健的统计算法处理异常值:我们在下一节建模中讨论的许多分类算法都隐式或显式地处理异常值。作为元学习框架工作的 Bagging 和 Boosting 变体通常对异常值或噪声数据点具有弹性,并且可能不需要预处理步骤来处理它们。

  • 标准化:许多算法——基于距离的方法就是一个很好的例子——对特征的尺度非常敏感。预处理数字特征可确保所有数字特征都在正常范围内。这里给出了最著名的特征归一化技术:

    • 最小-最大归一化:在这种技术中,给定范围*【L,U】,通常为【0,1】*,每个具有值 x 的特征按照最小值和最大值 x [max] 和 x 进行归一化 使用公式:Outliers
    • Z 分数归一化:在这种技术中,也称为标准化,特征值得到自动转换,使得平均值为 0,标准偏差为 1。 变换的技术如下:对于每个特征 f ,计算平均值( f )和标准差σ( f ),然后将值为 x 的特征变换为:

    Outliers

离散化

许多算法只能处理类别值或名义值才有效,例如贝叶斯网络。在这种情况下,使用监督或非监督方法将数字特征离散化成类别就变得势在必行。讨论的一些技术有:

  • 宁滨离散化:这种技术也被称为等宽离散化。范围从值xmax 和xmin 的每个特征 f 的数据的整个范围被分成预定数量的等间隔的 k ,每个具有宽度Discretization。“分割点”或离散化间隔为:Discretization
  • 按频率离散化:这种技术也被称为等频率离散化。对特征进行排序,然后将整个数据离散成预定义的 k 区间,使得每个区间包含相同的比例。由于预定义的值 k ,通过宁滨离散化和通过频率离散化这两种技术都遭受信息损失。
  • 通过熵离散化:给定标签,在值以迭代方式变化的分裂点上计算熵,以便区间的箱尽可能纯净或有区别。参考特征评估技术章节,了解基于熵(信息增益)的理论和计算。

数据采样

接收到的数据集可能经常需要明智的采样,以便有效地从数据中学习。数据的特征以及建模练习的目标决定了是否需要采样,如果需要,如何进行采样。在我们开始从这些数据中学习之前,创建训练、验证和测试数据样本至关重要,如本节所述。

需要取样吗?

当数据集很大或有噪声,或偏向一种类型时,是否采样的问题就变得很重要。答案取决于各个方面,如数据集本身、用于选择模型的目标和评估标准,以及潜在的其他实际考虑因素。在某些情况下,算法在内存和空间方面存在可伸缩性问题,但在样本上却能有效地工作,这可以通过模型在回归或分类目标方面的表现来衡量。比如 SVM 在内存和训练次数上分别缩放为O(n2*)*和 O(n ³ ) 。在其他情况下,数据是如此不平衡,以至于许多算法不够健壮来处理这种倾斜。在文献中,旨在通过创建新的训练样本来重新平衡原始数据提取中的类别分布的步骤也被称为重采样

欠采样和过采样

数据集在类别分布中表现出明显的不平衡,可以说包含了一个明显的少数类别。通常,这个少数类是我们特别感兴趣的一组实例,正是因为它的成员出现在如此罕见的情况下。比如信用卡诈骗,只有不到 0.1%的数据属于诈骗。这种偏斜不利于学习;毕竟,当我们寻求最小化分类中的总误差时,我们给所有的类以同等的权重,而不管一个类与另一个类相比是否代表不足。在二元分类问题中,我们称少数类为正类,多数类为负类,这是我们在下面的讨论中将遵循的约定。

多数类欠采样是一种常用于解决数据偏斜的技术。以信用卡欺诈为例,我们可以从原始数据集中创建不同的训练样本,这样每个样本都有来自原始数据集中的所有欺诈案例,而非欺诈案例则以某种固定的比例分布在所有训练样本中。因此,在通过这种方法创建的给定训练集中,与原始倾斜数据集相比,多数类现在代表性不足,有效地平衡了类的分布。可以以这种方式创建具有比例为 1:20 到 1:50 的标记阳性和标记阴性实例的训练样本,但是必须注意所使用的阴性实例的样本应该具有与主数据集的数据统计和分布相似的特征。使用多个训练样本以及不同比例的正面和负面实例的原因是为了使任何可能存在的采样偏差变得明显。

或者,我们可以选择对少数类进行过采样。如前所述,我们创建多个样本,其中来自少数类的实例是通过从原始数据集中进行有替换或无替换的采样来选择的。在没有替换的情况下采样时,样本之间没有复制的实例。通过替换,可能会在多个样本中发现一些实例。在样本的这种初始播种之后,我们可以通过从每个样本中的少数类内进行替换的随机采样来产生更平衡的类分布,直到我们得到期望的正例与负例的比率。过采样可能易于过度拟合,因为由于重复值,分类决策边界往往变得更加具体。 SMOTE ( 合成少数过采样技术)是一种技术,通过在正类的相邻实例之间进行插值,在特征空间的空隙中创建合成数据点来缓解这个问题(引用【20】)。

分层抽样

创建样本,使得具有相似特征的数据在总体中以相同的比例出现,这被称为分层抽样。在多类分类中,如果有 N 个类,每个类都有一定的比例,则创建样本,使它们以与原始数据集中相同的比例代表每个类。一般来说,创建多个样本来训练和测试模型以验证抽样的偏差是一个很好的实践。

培训、验证和测试集

创建良好分类模型的圣杯是在一组高质量、有代表性的(训练数据)上进行训练,调整参数并找到有效的模型(验证数据),最后,通过模型在看不见的数据(测试数据)上的行为来评估模型的性能。

逻辑分组背后的中心思想是确保模型在训练期间没有见过的数据上得到验证或测试。否则,一个简单的“死记硬背的学习者”就能胜过算法。学习算法的泛化能力必须在不同于训练数据集但来自相同群体的数据集上进行评估(参考文献【11】)。在从训练中移除太多数据以增加验证和测试的预算之间的平衡可能导致模型遭受“拟合不足”,即没有足够的示例来构建有助于泛化的模式。另一方面,分配所有标记数据用于训练而不执行任何验证或测试的极端选择会导致“过度拟合”,即模型过于忠实地拟合示例,而不能足够好地概括。

通常,在大多数机器学习挑战和真实世界的客户问题中,预先给定一个训练集和测试集来评估模型的性能。在这些约定中,唯一的问题是如何验证和找到给定训练集的最有效的参数。在某些情况下,只给出带标签的数据集,您需要考虑训练集、验证集和测试集,以确保您的模型不会过拟合或欠拟合数据。

建模需要三个逻辑过程,因此需要三个逻辑数据集,即训练、验证和测试。训练数据集的目的是为学习算法提供带标签的数据以构建模型。验证集的目的是查看通过对验证集进行训练来评估的训练模型的参数的效果。最后,在训练集和验证集的组合上重新训练最佳参数或模型,以找到最佳模型,然后在盲测试集上测试该模型。

Training, validation, and test set

图 1:培训、验证和测试数据以及如何使用它们

有两件事会影响学习或泛化能力:算法(及其参数)的选择和训练数据的数量。这种的概括能力可以通过包括预测误差在内的各种指标来评估。模型的未知误差或风险的总体估计由下式给出:

Training, validation, and test set

这里,噪声是随机噪声, Var (G,n) 被称为方差误差,是对我们的假设或算法 (G) 在给定不同数据集的情况下易受影响程度的度量。Training, validation, and test set称为偏差误差,代表模型中的最佳算法(所有可能数据集的平均学习者)与最佳算法的距离。

如图图 2图 3 所示的学习曲线——其中绘制了训练和测试误差,保持算法及其参数不变或训练数据大小不变——给出了欠拟合或过拟合的指示。

在训练数据大小固定的情况下,不同的算法或者相同的算法选择不同的参数可以表现出不同的学习曲线。图 2 显示了基于偏差和方差给出两条不同学习曲线的相同数据量的两种算法。

Training, validation, and test set

图 2:模型复杂度固定时的训练数据与错误率的关系,表示模型的不同选择。

算法或模型选择也会影响模型性能。需要调整更多参数的复杂算法可能会导致过度拟合,而参数较少的简单算法可能会拟合不足。当定型数据大小固定时,说明模型性能和复杂性的经典图如下:

Training, validation, and test set

图 3:当训练数据大小固定时,在训练和测试数据上,模型复杂度与错误率的关系。

验证允许探索参数空间以找到最能概括的模型。正则化(将在线性模型中讨论)和验证是应该使用来防止过度拟合的两种机制。有时“k 倍交叉验证”过程用于验证,这涉及创建数据的 k 样本,并使用*(k–1)*进行训练,剩余的样本进行测试,重复 k 次以给出平均估计值。下图以五重交叉验证为例:

Training, validation, and test set

图 4:五重交叉验证。

之后的是一些常用的技术,用于执行数据采样、验证和学习:

  • 培训、验证和测试的随机分割 : 60,20,20。用 60%进行训练,用 20%进行验证,然后结合训练和验证数据集来训练一个最终模型,用于在剩余的 20%上进行测试。分割可以是随机进行的,基于时间,基于区域,等等。
  • 训练、交叉验证和测试:分成二对一的训练和测试,在训练集上使用交叉验证进行验证,三分之二的训练和三分之一的测试。可以随机地、基于时间、基于区域等等进行分割。
  • 训练和交叉验证:当训练集小时,不需要太多的参数调整,只进行模型选择。对整个数据集运行交叉验证,并通过对整个数据集的学习选择最佳模型。

特征相关性分析和降维

特征相关性和选择的目标是找到区别于目标变量的特征,并帮助降低数据的维度[1,2,3]。这主要通过改善维数灾难的影响和通过去除由不相关特征引起的噪声来提高模型性能。通过仔细评估删除和不删除特征的验证集上的模型,我们可以看到特征相关性的影响。由于对 k 特征的穷举搜索涉及 2 个^k–1 个集合(考虑 ^k 特征的所有组合,其中每个特征或者被保留或者被移除,不考虑不存在特征的退化情况),必须被评估的模型的相应数量可能变得令人望而却步,因此需要某种形式的启发式搜索技术。下面介绍这些技术中最常见的一些。

特征搜索技术

用于查找特征集的一些非常常见的搜索技术有:

  • 前进或爬坡:在此搜索中,一次添加一个功能,直到评估模块输出性能无进一步变化。
  • 向后搜索:从整个集合开始,一次删除一个特征,直到性能没有改善。一些应用程序交叉使用前向和后向技术来搜索特征。
  • 进化搜索:遗传算法等各种进化技术可用作搜索机制,基于过滤器或基于包装器的方法的评估指标可用作指导该过程的适合度标准。

特征评估技术

在高层次上,有三种基本方法来评估特性。

过滤方法

这种方法指的是使用技术而不使用机器学习算法进行评估。过滤方法的基本思想是使用一种搜索技术来选择一个特征(或特征子集),并使用一些统计测量来测量其重要性,直到达到停止标准。

单变量特征选择

这个搜索就像根据所采用的统计方法对每个特征进行排序一样简单。

信息论方法

所有的信息论方法都在核心使用熵机制的概念。其思想是,如果特征随机出现在数据集中,则存在最大熵,或者,等价地,压缩或编码的能力较低,并且该特征可能是不相关的。另一方面,如果特征值的分布是这样的,某个范围的值在一个类中相对于其他类更普遍,那么熵被最小化,并且该特征是有区别的。以这种方式用熵来描述问题需要某种形式的离散化,将数字特征转换成类别,以便计算概率。

考虑一个带有训练数据DX 的二元分类问题。如果 X [i] 是第 i ^(th) 个特征具有 v 个截然不同的分类值使得D[Xi]= { D[1],D[2]…D[v]}

Information theoretic approach

这里, Info(D [j] ) 是分区的熵,计算如下:

Information theoretic approach

这里, p [+] (D) 是集合 D 中的数据在正类中的概率, p_(D) 是在该样本中在负类中的概率。特征的信息增益是根据总体信息和特征的信息来计算的

Info gain(X[I])= Info(D)–Info(D[Xi])

对于数字特征,值按升序排序,相邻值之间的分割点被视为不同的值。

熵的减少越大,特征的相关性越高。当特征具有大量值时,信息增益存在问题;这就是增益比派上用场的时候。增益比通过引入分割信息来校正大分割的信息增益。特征X?? I 和增益比的分割信息由下式给出:

Information theoretic approachInformation theoretic approach

还有其他杂质测量,如基尼杂质指数(如关于决策树算法的章节所述)和基于不确定性的测量来计算特征相关性。

统计方法

卡方特征选择是最常用的特征选择方法之一,它以统计假设检验为基础。无效假设是特征和类变量相互独立。数值要素被离散化,因此所有要素都具有分类值。应急表的计算方法如下:

|

特征值

|

Class=P

|

类别=N

|

总纲年谱 + 年谱

X?? 1 (n[1P]|[1P] (n[1N]|[1N] n1
…. ….
Xm (n[mP]|[mP] (n[【Mn】]|[)] nm
n* P n* P n

列联表 1:显示二元类的特征值和类分布。

在前面的表中, n [ij] 是离散化后值等于xI 和类值 j 的特征的数量。

价值总和为:

Statistical approachStatistical approachStatistical approachStatistical approach

这里 n 是数据实例的数量, j = P,N 是类值, i =1,2,… m 索引特征的不同离散化值,表具有m–1个自由度。

卡方统计由下式给出:

Statistical approach

将卡方值与置信度阈值进行比较,以测试显著性。例如,对于 i = 2 ,阈值为 5%时的卡方值为 3.84;如果我们的值小于表中的值 3.83,那么我们知道该特征是有趣的,并且零假设被拒绝。

多元特征选择

大多数特征选择的多元方法有两个目标:

  • 减少特征和其他选定特征之间的冗余
  • 最大化特征与分类标签的相关性或关联性

寻找这种特征子集的任务不可能是穷尽的,因为该过程可能具有大的搜索空间。启发式搜索方法如向后搜索、向前搜索、爬山和遗传算法通常用于寻找特征的子集。接下来介绍两种非常著名的用于满足上述目标的评估技术。

最小冗余最大相关性(mRMR)

在这种技术中,数字特征通常被离散化——如单变量预处理中所做的那样——以获得不同类别的值。

对于的每个子集 S ,两个特征XI 和Xj 之间的冗余度可以度量为:

Minimal redundancy maximal relevance (mRMR)

这里, MI (X [i] ,X [j] ) =两个特征之间互信息的度量 X [i] 和 X [j] 。特征XI 与类别 C 之间的相关性可以度量为:

Minimal redundancy maximal relevance (mRMR)

此外,可以将这两个目标结合起来,使用以下方法找到最佳特征子集:

Minimal redundancy maximal relevance (mRMR)

基于相关性的特征选择(CFS)

的基本思路是类似于前面的例子;子集 S 的总体价值被测量为:

Correlation-based feature selection (CFS)

这里, k 是特征的总数,Correlation-based feature selection (CFS)是平均特征类相关性,Correlation-based feature selection (CFS)是平均特征-特征间相关性。分子给出相关性因子,而分母给出冗余因子,因此搜索的目标是最大化总比率或价值

还有其他技术,例如基于快速相关性的特征选择,它基于相同的原则,但是在计算度量时有所不同。读者可以在 Weka 中试验这种技术和其他技术。

滤波器方法的优点是其方法独立于学习算法,因此无需选择算法和参数。它们也比基于包装的方法更快。

包装方法

搜索技术保持与特征搜索方法中讨论的相同;只是评估方法改变了。在包装方法中,使用机器学习算法来评估被发现基于各种度量进行区分的特征子集。用作包装方法的机器学习算法可以与用于建模的算法相同或不同。

最常见的是,在学习算法中使用交叉验证。性能指标,如曲线下面积或 F 值,作为交叉验证的平均值获得,指导搜索过程。由于训练和评估模型的成本非常高,我们选择训练速度快的算法,如线性回归、线性 SVM 或基于决策树的算法。

一些包装器方法已经非常成功地使用特定的算法,例如随机森林来测量特征相关性。

嵌入式方法

这种方法不需要特征搜索技术。不是将特征选择作为预处理来执行,而是在机器学习算法本身中完成。规则归纳、决策树、随机森林等执行特征选择作为训练算法的一部分。一些算法,如回归或基于 SVM 的方法,称为收缩方法,可以在模型中添加正则化项,以克服数据集中噪声特征的影响。基于脊和套索的正则化是回归中可用于隐式提供特征选择的众所周知的技术。

还有其他使用无监督算法的技术将在第三章、无监督机器学习技术中讨论,这些技术也可以在有监督的设置中有效使用,例如主成分分析 ( PCA )。

模型构建

在现实世界的问题中,有许多学习上的限制和许多方法来评估模型在看不见的数据上的表现。当应用于一个给定的问题或一类特定领域的问题时,每种建模算法都有其优点和缺点。这在著名的没有免费的午餐定理 ( NFLT )中得到了阐述,该定理称——对于监督学习的情况——平均所有数据分布,每种分类算法的表现都与任何其他算法一样好,包括总是选择相同类别的算法!在www.no-free-lunch.org/中可以找到 NFLT 在监督学习、搜索和优化中的应用。

在本节中,我们将讨论最常用的实用算法,给出必要的细节来回答诸如算法的输入和输出是什么之类的问题。它是如何工作的?选择算法时要考虑哪些优点和局限性?对于每个模型,我们将包括样本代码和在所选数据集上测试模型获得的输出。这将为读者提供对该过程的洞察。一些算法,如神经网络和深度学习,贝叶斯网络,基于流的收入,等等,将在他们自己的章节中单独讨论。

线性模型

当数据可线性分离时,线性模型工作良好。这个应该永远是首先要建立的。

线性回归

线性回归可用于分类和估计问题。这是实践中最广泛使用的方法之一。它包括通过数据点找到最佳拟合超平面。

算法输入和输出

特征必须是数字。使用各种预处理技术对分类特征进行转换,例如当分类值变成具有 1 和 0 值的特征时。线性回归模型在分类中输出分类类,在回归中输出数值。许多实现也给出了置信度值。

它是如何工作的?

模型试图在输入空间中学习一个“超平面”,使每类数据点之间的误差最小化(参考 [4])。

线性模型学习的 d 维输入中的超平面由下式给出:

How does it work?

模型将输入空间划分成的两个区域(二元分类)是How does it work?How does it work?。将值 1 关联到特征 0 的坐标,即 x 0=1,假设空间或模型的向量表示为:

How does it work?

权重矩阵可以使用各种方法导出,例如使用如下矩阵符号的普通最小二乘法或迭代法:

How does it work?

这里 X 是输入矩阵, y 是标签。如果最小二乘问题中的矩阵XTX 不是满秩的,或者如果遇到各种数值稳定性问题,解决方案修改为:

How does it work?

这里,How does it work?被加到大小为( n + 1, n + 1)的单位矩阵In 的对角线上,其余的值被设置为 0。该解决方案被称为岭回归,参数λ理论上控制解决方案的平方损失和低范数之间的权衡。常数λ也称为正则化常数,有助于防止“过拟合”。

优点和局限性

  • 当有少于 100 个特征和几千个数据点时,这是一种尝试和获得洞察力的合适方法。
  • 在某种程度上是可以解释的,因为权重给出了对每个特性的影响的见解。
  • 假设线性关系、附加和不相关的要素,因此它不会对复杂的非线性真实世界数据建模。线性回归的一些实现允许移除共线要素来克服这一问题。
  • 对数据中的异常值非常敏感,如果存在巨大的异常值,则必须在执行线性回归之前对其进行处理。
  • 异方差,即不相等的训练点方差,会影响简单的最小二乘回归模型。诸如加权最小二乘法之类的技术被用来克服这种情况。

天真的贝叶斯

基于贝叶斯规则的,朴素贝叶斯分类器假设数据的特征相互独立(参考文献 9】)。它特别适合于大型数据集,并且通常比其他更复杂的技术性能更好,尽管它天真地假设了特征独立性。

算法输入和输出

朴素贝叶斯模型可以获取既分类又连续的特征。通常,如果连续要素以正确的格式离散化,朴素贝叶斯模型的性能会得到提高。朴素贝叶斯输出类和所有类值的概率分数,使其成为评分模型的良好分类器。

它是如何工作的?

它是一种基于概率的建模算法。基本思想是使用贝叶斯法则,并测量不同项的概率,如下所示。可以使用预处理(如离散化)来测量概率,假设某个分布,或者在给定足够数据的情况下,映射数字特征的分布。

应用贝叶斯法则获得后验概率作为预测值,并且 k 代表第k第类。:

![How does it work?How does it work?

优点和局限性

  • 它对孤立的噪声数据点具有鲁棒性,因为在估计输入数据的概率时,这些点是平均的。
  • 来自贝叶斯分类的作为置信度值的概率分数可以用作评分模型。
  • 可以很好地处理缺失值,因为它们不用于估计概率。
  • 此外,它对不相关的属性也很健壮。如果这些特征是无用的,那么这些类别的概率分布将是均匀的,并且会自我抵消。
  • 在训练速度和内存方面非常好,它可以并行化,因为方程中概率的每个计算都是相互独立的。
  • 使用朴素贝叶斯时,相关特征可能是一个大问题,因为条件独立性假设不再有效。
  • 在大多数优化算法中,误差的正态分布是一种假设。

逻辑回归

如果我们使用线性回归模型,比如说使用最小二乘回归方法,输出必须转换成类,比如说 0 和 1。许多线性回归算法将类别和置信度输出为概率。根据经验,如果我们看到线性回归的概率大多超出 0.2 到 0.8 的范围,那么逻辑回归算法可能是更好的选择。

算法输入和输出

类似于线性回归的,所有特征必须是数字。分类特征必须转换成数字。与朴素贝叶斯一样,该算法输出类别和每个类别的概率,并可用作评分模型。

它是如何工作的?

逻辑回归使用输入要素中的线性函数对类的后验概率进行建模。

二元分类的逻辑回归模型如下所示:

How does it work?

模型是线性模型的 log-odds 或 logit 变换(参考 [6])。通常使用各种优化方法来计算权重向量,例如迭代重新加权最小二乘法 ( IRLS )或布罗伊登–弗莱彻–戈德法布–山诺 ( BFGS )方法,或这些方法的变体。

优点和局限性

  • 克服了输入和输出之间的异方差和某些非线性问题。
  • 误差估计中不需要正态分布假设。
  • 它是可以解释的,但不如线性回归模型,因为需要对统计数据有所了解。它给出了比值比、 p 值等信息,这些信息有助于理解特征对类的影响,以及基于 p 值的显著性进行隐式特征关联。
  • 在实践中,必须采用 L1 或 L2 正则化来克服逻辑回归模型中的过度拟合。
  • 许多优化算法可用于提高训练速度和鲁棒性。

非线性模型

接下来,我们将讨论一些众所周知的、实用的和最常用的非线性模型。

决策树

决策树又称为分类回归树 ( 大车 ) ( 引用【5】)。它们的表示是一个二进制树,通过在每个内部节点上根据单个属性评估一个不等式来构建,每个叶节点对应于由通向它的路径中的决策产生的输出值或类。当提供新的输入时,通过从根开始遍历树来预测输出。

算法输入和输出

特征可以是分类的,也可以是数字的。它生成类作为输出,大多数实现使用基于频率的估计给出分数或概率。决策树概率不像朴素贝叶斯和逻辑回归那样是平滑的函数,尽管有这样的扩展。

它是如何工作的?

通常,创建一个单独的树,从根处的单个特征开始,根据特征的值将决策分成多个分支,而在叶子处有一个类或多个特征。要做的选择有很多,比如有多少棵树,如何在根级或者后续的叶级选择特征,以及不分类时如何拆分特征值。这导致了许多不同的算法或对基本决策树的修改。许多分割特征值的技术与离散化章节中讨论的类似。通常,应用某种形式的修剪来减小树的大小,这有助于解决过度拟合问题。

基尼指数是另一种用于分割特征的流行技术。集合 S 中所有数据点的基尼指数为How does it work?,其中p1,p2…pk 为每一类的概率分布。

如果 p 是集合 S 中属于所述类正的所有数据点的数据的分数或概率,则 1–p是另一类的分数或二进制分类中的错误率。如果将数据集 S 拆分成 rS [1] ,S [2] ,…S [r] 那么每组的错误率可以量化为| S [i] |。一种 r 方式分割的基尼指数如下:

How does it work?

基尼系数最低的部分用于选择。CART 算法是一种流行的决策树算法,它使用基尼指数作为划分标准。

数据点组 S 的熵可以类似地计算为:

How does it work?

类似地,基于熵的分割计算如下:

How does it work?

熵分裂的值越低,特征越好,这在 ID3 和 C4.5 决策树算法中使用(参考文献 [12])。

停止标准和修剪标准是相关的。早期停止树的生长或修剪的想法是为了减少“过度拟合”,它类似于线性和逻辑模型中的正则化。通常,训练集被分成树生长集和剪枝集,以便剪枝使用不同的数据来克服来自生长集的任何偏差。最小描述长度 ( MDL ),它根据节点的数量来惩罚树的复杂性,是许多决策树算法中使用的流行方法。

How does it work?

图 5:示出了二维二进制分类问题和分别在阈值 X [1t] 和 X [1t] 使用分裂导出的决策树

优点和局限性

  • 决策树的主要优势是它们非常容易解释。它们可以用外行人的术语来理解,并且特别适合业务领域专家容易理解的精确模型。
  • 如果有大量的特征,那么随着算法复杂性的增加,构建决策树会花费大量的训练时间。
  • 决策树存在过度拟合的固有问题。许多树算法都有修剪选项来减少这种影响。使用剪枝和验证技术可以在很大程度上缓解这个问题。
  • 当特征之间存在相关性时,决策树工作得很好。
  • 决策树建立跨类的轴平行边界,其偏差会引入错误,尤其是在复杂、平滑、非线性的边界中。

K-最近邻(KNN)

K-Nearest Neighbors 属于非参数和懒惰算法的分支。k-最近邻不会对底层数据做出任何假设,也不会从训练数据中构建和归纳模型(参考文献 10】)。

算法输入和输出

虽然 KNN 可以处理分类和数字特征,但是距离计算(查找邻居的核心)更适合处理数字特征。将相同范围内的数字要素归一化是必需的强制步骤之一。KNN 的输出通常是基于邻居距离计算的类。

它是如何工作的?

KNN 利用全部训练数据对看不见的测试数据进行预测。当看不见的测试数据出现时,KNN 使用一些距离计算找到 K 个“最近的邻居”,并基于邻居和决定类别的度量对新点进行分类。如果我们考虑由对应于两个数据点的x1 和x2 表示的两个向量,则距离计算如下:

  • 欧几里德距离:![How does it work?* 余弦距离或相似度:How does it work?

用于对未知进行分类的度量可以简单地是 K 个邻居中的多数类。

训练时间很短,因为它所要做的只是构建数据结构来保存数据,以便在出现看不见的数据时最小化最近邻的计算。该算法依赖于选择如何存储来自训练数据点的数据以提高搜索邻居的效率、使用哪种距离计算来查找最近的邻居以及使用哪种度量来基于所有邻居的类别进行分类。由使用验证技术选择 KNN 中的 K 的值是至关重要的。

How does it work?

图 6:使用不同 K 选择的二维数据说明 K-最近邻。

优点和局限性

  • 没有对基础数据分布的假设和最少的训练时间使它成为一种非常有吸引力的学习方法。
  • KNN 使用本地信息来计算距离,在某些领域可以产生高度适应的行为。
  • 当有效地选择 K 时,它对有噪声的训练数据是鲁棒的。
  • 根据数据点的数量和硬件限制,保存用于分类的整个训练数据可能是有问题的
  • 特征的数量和维数灾难对该算法的影响更大,因此在 KNN 建模之前必须进行某种形式的维数缩减或特征选择。

支持向量机(SVM)

简单地说,支持向量机可以被视为线性分类器,通过解决一个受约束的优化问题来最大化分离超平面和数据之间的间隔。SVMs 甚至可以通过使用稍后描述的内核调用到更高维空间的变换来处理不可线性分离的数据。

算法输入和输出

SVM 只对数字特征有效,尽管大多数实现可以处理转换成数字或二进制的分类特征。标准化通常是一种选择,因为它有助于训练的优化部分。SVM 的输出是类预测。存在给出概率估计作为置信度的实现,但是这需要相当多的训练时间,因为它们使用 k 倍交叉验证来构建估计。

它是如何工作的?

在其线性形式中,SVM 的工作类似于线性回归分类器,其中在两个类之间绘制线性决策边界。两者之间的区别在于,使用 SVM 时,边界是以这样一种方式绘制的,即边界附近的点之间的“边距”或距离是最大的。边界上的点被称为“支持向量”(参考【13 和 8】)。

因此,SVM 试图在类似于线性回归模型的线性模型中找到权重向量,如下式所示:

How does it work?

重量 w [0] 在这里用 b 表示。二元类 y ∈{1,-1}的 SVM 试图找到一个超平面:

How does it work?

超平面试图分离数据点,使得具有该类的所有点都位于超平面的边上,如下所示:

How does it work?How does it work?

使用基于约束的优化使模型的裕度最大化,该优化具有由 C 表示的惩罚函数,用于克服由How does it work?表示的误差:

How does it work?

使得How does it work?How does it work?

由于上述原因,它们也被称为大间隔分类器。基于核的 SVM 将输入数据转换到假设的特征空间,其中 SV 机器以线性方式工作,并且在特征空间中绘制边界。

变换表示上的核函数由下式给出:

How does it work?

这里φ是输入空间上的变换。可以看出,SVM 的整个优化和解决方案保持不变,唯一的例外是点积x[I]x[j]被核函数 k ( x [i] , x [j] 代替,这是一个涉及不同空间中的两个向量而没有实际变换到那个空间的函数。这就是所谓的内核技巧

通常使用的最广为人知的内核是:

  • 高斯径向基核 :How does it work?
  • 多项式内核 :How does it work?
  • 乙状结肠仁 :How does it work?

SVM 的性能对优化的一些参数以及内核参数和核心 SV 参数如代价函数 C 非常敏感。诸如网格搜索或进化搜索之类的搜索技术与诸如交叉验证之类的验证技术相结合,通常用于找到最佳参数值。

How does it work?

图 7:从训练数据中学习的 SVM 线性超平面,其在两个类之间产生最大的间距。

How does it work?

图 8:内核变换,说明如何使用多项式变换将二维输入空间变换为数据可线性分离的三维特征空间。

优点和局限性

  • 如果参数选择得当,支持向量机在泛化能力、低过拟合方面是最好的,并且对于复杂的非线性数据具有良好的理论基础。
  • 即使有大量的特征和较少的训练数据,支持向量机也能很好地工作。
  • 支持向量机对噪声训练数据不太敏感。
  • 支持向量机最大的缺点是它们不可解释。
  • SVM 的另一个大问题是它的训练时间和记忆要求。它们是 O(n ² )O(n ³ ) ,当数据量较大或存在硬件限制时,会导致重大的可伸缩性问题。有一些修改有助于减少这两者。
  • SVM 通常对二分类问题工作良好,但是对于多类分类问题,尽管有诸如一对多和一对所有的技术,但是它不如诸如决策树的一些其他分类器那样健壮。

集成学习和元学习者

结合多种算法或模型进行分类,而不是仅仅依靠一种算法或模型进行分类,这被称为集成学习。它有助于组合各种模型,因为每个模型都可以被视为——在高层次上——在整个数据集中检测特定模式的专家。每个基础学习者也可以在稍微不同的数据集上学习。最后,将所有模型的结果结合起来进行预测。基于组合中使用的算法的相似程度,训练数据集如何呈现给每个算法,以及算法如何组合结果以最终对未知数据集进行分类,集成学习有许多分支:

Ensemble learning and meta learners

图 9:集成学习策略的图示

一些常见的集成学习类型有:

  • 不同的学习算法
  • 相同的学习算法,但参数选择不同
  • 不同特征集上的不同学习算法
  • 不同训练数据的不同学习算法

引导聚集或装袋

这是最常用的集成方法之一,用于划分不同样本中的数据,并在每个样本上建立分类器。

算法输入和输出

输入受到所使用的基础学习者的选择的限制——如果使用决策树,基本上没有限制。该方法输出类成员资格以及类的概率分布。

它是如何工作的?

bagging 的核心思想是将 bootstrapping 估计应用于具有高方差的不同学习者,如决策树。Bootstrapping 是任何依赖于随机抽样替换的统计方法。使用引导将整个数据分成不同的样本,并且对于每个样本,使用基础学习器来构建模型。最后,在预测时,平均预测是使用多数投票得出的——这是一种结合所有学习者的技术。

随机森林

随机森林是对基本袋装决策树的改进。即使有了 bagging,基本决策树在创建树的每个分割点都有一个所有特征的选择。正因为如此,即使是不同的样本,很多树也会形成高度相关的子模型,导致套袋的性能变差。除了随机数据集之外,通过为不同的模型提供随机特征,子模型之间的相关性降低,并且随机森林显示出比基本袋装树好得多的性能。随机森林中的每棵树在随机特征上生长其结构,从而最小化偏差;在决策时组合许多这样的树减少了方差(参考文献【15】)。随机森林也用于测量特征相关性,方法是对树中的杂质减少进行平均,并对所有特征进行排序,以给出每个特征的相对重要性。

优点和局限性

  • 比单一基础学习者更好的概括。克服基础学习者过度适应的问题。
  • bagging 的可解释性非常低,因为它作为元学习者工作,甚至结合了可解释的学习者。
  • 像大多数其他集成学习者一样,Bagging 对噪声和离群值具有弹性。
  • 给定训练数据为 iid,随机森林通常不会过度拟合。

助推

Boosting 是集成学习的另一种流行形式,基于使用弱学习器,迭代学习“错误分类”或难以学习的点。因此,这种想法是“提升”难以学习的实例,并使基础学习者更有效地学习决策边界。有各种各样的增强方式,如 AdaBoost、LogitBoost、ConfidenceBoost、梯度增强等等。我们在这里提出了 AdaBoost 的一个非常基本的形式(参考文献【14】)。

算法输入和输出

输入受到所使用的基础学习者的限制——如果使用决策树,基本上没有限制。输出类别成员资格以及类别的概率分布。

它是如何工作的?

boosting 背后的基本思想是对输入样本进行迭代重新加权,以创建新的数据分布,从而在每次迭代中从简单的基础学习者那里学习模型。

最初,用权重How does it work?对所有实例进行统一加权,并且在每次迭代 t 时,对群体进行重新采样或重新加权为How does it work?,其中How does it work?Z t 是归一化常数。

最终模型是迭代中学习到的所有模型的线性组合:

How does it work?

每次迭代中数据的重新加权或重新采样基于“误差”;导致误差的数据点被更多地采样或具有更大的权重。

优点和局限性

  • 比基础学习者更好的泛化能力,非常有效地克服了过度拟合的问题。
  • AdaBoost 等一些升压算法容易受到均匀噪声的影响。有一些增强的变体,如“GentleBoost”和“BrownBoost ”,可以降低异常值的影响。
  • Boosting 在误差估计上有理论界限和保证,使其成为统计上鲁棒的算法。

模型评估、评价和比较

这里讨论的主要观点是:

  • 如何评估或估计分类器在未知数据集上的性能,它将在未来未知数据集上进行预测。
  • 我们应该使用哪些指标来评估模型的性能?
  • 如果必须在算法之间做出选择,我们如何比较算法?

模型评估

为了训练模型、调整模型参数、选择模型并最终评估模型对未知数据的预测行为,我们需要许多数据集。我们不能在一组数据上训练模型,并在同一组数据上估计其行为,因为它将具有明显的乐观偏差,并且估计不太可能与看不见的数据中的行为相匹配。因此,至少需要将可用数据划分为训练集和测试集。此外,在对测试集执行测试之前,我们需要调整模型的参数,并测试调整对单独数据集的影响。如果我们使用相同的数据集进行训练、参数调整和测试,乐观偏差和错误估计的相同论点也适用。因此,理论上和实践上都需要三个数据集,即训练、验证和测试。

在训练集上对模型进行训练,在验证集上验证不同参数对训练集的影响,并在测试集上运行具有所选参数的最终模型,以评估模型对未来未知数据的性能。当数据集不够大,或者很大但类之间的不平衡很大时,也就是说,一个类只存在于总人口的一小部分中,我们不能创建太多的样本。回想一下,我们的方法中描述的步骤之一是创建不同的数据样本和数据集。如果总的训练数据很大,并且具有很好的数据比例和类比率,那么使用随机分层划分来创建这三个集合是最常用的选择。在某些表现出季节性和时间相关行为的数据集中,基于时间界限创建数据集是一种常见的做法。在许多情况下,当数据集不够大时,可能只创建两个物理分区,即训练和测试分区。训练数据集的范围大致在 66%到 80%之间,而其余部分用于测试。然后,使用 k 倍交叉验证技术从训练数据集创建验证集。训练数据集被拆分 k 次,每次产生 k-1/k 个随机训练 1/k 个测试数据样本,生成所需性能的平均度量。这样,有限的训练数据被分割 k 次,并且训练/测试的不同分割的平均性能被用于测量参数的效果。使用 10 重交叉验证是交叉验证中最常见的做法。

模型评估指标

调整参数或选择模型时的下一个重要决策是根据某些性能指标做出决策。在分类学习中,根据业务需求,您可以根据不同的指标做出决策。例如,在某些领域,不遗漏单个真阳性是最重要的关注点,而在人类参与评判模型结果的其他领域,有太多的假阳性是更大的关注点。在某些情况下,拥有总体良好的准确性被认为是更重要的。在高度不平衡的数据集中,如欺诈或网络攻击,一个类只有少数实例,而其他类有数百万个实例。在这种情况下,精确度给出了模型性能的错误指示,一些其他指标,如精确度、真阳性比率或曲线下的面积被用作指标。

我们现在将讨论分类算法评估中最常用的指标(参考文献【16、17 和 19】)。

Model evaluation metrics

图 10:分类模型的模型评估度量

混淆矩阵和相关指标

Confusion matrix and related metrics

图 11:混淆矩阵

混淆矩阵是定义个模型性能指标的核心。度量和同义术语的扩散是不同学科中矩阵元素的不同数量的效用的结果,每个强调模型行为的不同方面。

矩阵的四个元素是假阳性、假阴性、真阳性和真阴性的原始计数。通常更有趣的是这些量的不同比率,真阳性率(或灵敏度,或回忆),和假阳性率(FPR,或 1-特异性,或辐射)。准确性反映了正确预测的百分比,无论是第 1 类还是第 0 类。对于倾斜数据集,准确性不是特别有用,因为即使是常量预测也可能表现良好。

ROC 和 PRC 曲线

前面提到的指标,如准确度、精确度、召回率、灵敏度和特异性都是集合,也就是说,它们描述了整个数据集的行为。在许多复杂问题中,看到 TPs 和 FPs 等指标之间的权衡通常是有价值的。

许多分类器,大多是基于概率的分类器,除了给出分类之外,还给出预测的置信度或概率。获得 ROC 或 PRC 曲线的过程是在学习的模型上运行看不见的验证或测试集,然后获得预测和预测的概率。根据置信度按降序对预测进行排序。对于每个概率或置信度,计算两个度量,FP 的分数(FP 率)和 TP 的分数(TP 率)。

将 TP 率绘制在 y 轴上,将 FP 率绘制在 x 轴上,得到 ROC 曲线。随机分类器的 ROC 曲线接近对角线,而好分类器的 ROC 曲线倾向于图的左上。曲线 ( AUC )下的面积是利用 ROC 曲线从 0 到 1 的梯形面积在 ROC 曲线下测得的面积。例如,在运行交叉验证时,可能会有许多 ROC 曲线。有两种方法可以得到“平均”ROC 曲线:一是使用垂直平均法,即在不同 FP 率下绘制 TPR 平均值,二是使用水平平均法,即在不同 TP 率下绘制 FPR 平均值。根据经验,曲线下面积大于 0.8 的分类器被认为适合预测未知数据。

精确度召回曲线或 PRC 曲线类似于 ROC 曲线,但不是 TPR 对 FPR,而是精确度和召回指标分别绘制在 yx 轴上。当数据高度不平衡时,也就是说,ROC 曲线不能真正显示影响,而 PRC 曲线在判断绩效时更可靠。

增益图和升力曲线

升力和增益图更偏向于灵敏度或真阳性。这两个图表的全部目的是展示模型预测和置信度如何取代随机选择,在未知数据的样本中检测出更好的质量或真阳性。

这通常对用于检测金融犯罪欺诈或网络安全威胁的检测引擎非常有吸引力。增益图和提升曲线给出了将在总数据的不同四分位数或间隔检测到的真实真阳性的精确估计。这将为业务决策者提供关于需要多少调查人员或检测欺诈行为或网络攻击将花费多少时间的洞察力,从而可以提供模型的真实 ROI。

生成增益图或升力曲线的过程与通过模型运行看不见的验证或测试数据并获得预测以及置信度或概率的过程相似。它包括按降序排列概率,并保持数据集每个四分位数的 TPs 计数。最后,每四分位数计数的直方图给出了提升曲线,而四分位数上增加的 TPs 累积计数给出了增益图。在 RapidMiner 等许多工具中,使用固定的较大间隔(使用宁滨)来获取计数和累积计数,而不是四分位数等粗略间隔。

型号对比

当选择算法或给定算法的正确参数时,我们要么在不同的数据集上进行比较,要么在交叉验证的情况下,在同一数据集的不同分割上进行比较。在这些比较的决策中采用了统计检验的方法。使用经典统计学的假设检验的基本思想是比较来自算法的两个度量。零假设是基于度量的算法之间没有差异,因此进行测试以验证或拒绝基于度量的零假设(参考文献【16】)。统计测试回答的主要问题是——算法得到的结果或度量是其真实特征,还是偶然?

在本节中,我们将讨论比较实际场景中使用的分类算法的最常用方法。

比较两种算法

一般的流程是在相同的训练集上训练算法,并在多个验证集、不同的测试集或交叉验证上运行模型,测量之前讨论过的感兴趣的指标,如错误率或曲线下面积,然后获取每个算法的指标统计数据,以确定哪个效果更好。每种方法都有其优点和缺点。

麦克内马试验

这个是非参数测试,因此它没有对数据和分布做出假设。McNemar 的测试建立了一个性能指标的列联表,如“错误分类或错误”,其中包括:

两种算法的错误分类计数(c00

  • 被算法 G1 误分类计数,但被算法G2(c01 正确分类
  • 被算法 G2 错误分类,但被算法G1(c10 正确分类的计数
  • G1G2(c[11])McNemar's Test正确分类的计数

如果χ ² 超过McNemar's Test统计量,那么我们可以拒绝零假设,即算法 G1G2 的两个性能指标在 1–α的置信值下相等。

成对 t 检验

这是一个参数测试,正态分布计算指标的假设变得有效。通常情况下,它与交叉验证过程和指标结果(如曲线下面积或精确度或误差率)相结合,然后计算平均值和标准偏差。除了正态分布假设之外,两个指标来自相同方差总体的额外假设可能是该方法的一大缺点。

Paired-t test

Paired-t test是两种算法 G1G2 的性能指标的均值差异。

Paired-t test

这里, d i 是两个算法 G1G2 在试验中的性能指标之差,有 n 次试验。

使用平均差异和标准偏差的标准误差计算出t-统计量,如下所示,并将其与右侧 alpha 值表进行比较,以检查显著性:

Paired-t test

Wilcoxon 符号秩检验

在数据集上测试两个指标的最流行的非参数方法是使用 Wilcoxon 符号秩测试。在相同的训练数据上训练算法,并且在不同的验证或测试集上计算诸如错误率或不准确区域之类的度量。设 d [i] 为两个分类器在It^(th)试验中对于 N 数据集的性能度量之差。然后根据其绝对值对差异进行排名,并对平局进行平均排名。设R+为第二种算法优于第一种算法的等级之和,R^–为第一种算法优于第二种算法的等级之和:

Wilcoxon signed-rank testWilcoxon signed-rank test

然后将统计量Wilcoxon signed-rank test与α的阈值Wilcoxon signed-rank test进行比较,以拒绝假设。

比较多种算法

我们现在将讨论当涉及两个以上的算法,并且我们需要对许多算法进行评估指标的比较时,最常用的两种技术。

方差分析检验

这些是假设样本的正态分布的参数测试,也就是我们为评估而计算的指标。ANOVA 测试遵循与其他测试相同的过程,即在相似的训练集上训练模型/算法,并在不同的验证或测试集上运行它。ANOVA 中计算的主要数量是每个算法性能的度量平均值,然后计算所有算法的总体度量平均值。

p [ij] 为 k 试验和 l 分类器的 i = 1,2… kj = 1,2 …l 的性能度量。分类器 j 在所有试验中的平均性能和总体平均性能为:

ANOVA testANOVA test

评估两种类型的变化。第一个是组内变异,即每个算法与总体度量平均值的总偏差,第二个是组间变异,即每个算法度量平均值的偏差。组内变异和组间变异用于计算各自的组内和组间平方和,如下所示:

ANOVA test

使用两个平方和以及诸如 F-statistic(两者之比)的计算,可以在 alpha 值处进行显著性测试,以接受或拒绝零假设:

ANOVA test

方差分析检验与配对 t 检验在假设指标正态分布和假设方差相等方面具有相同的局限性。

弗里德曼试验

Friedman 的测试是一种用于多种算法比较的非参数测试,它不像 ANOVA 那样假设数据分布或度量的方差。它使用排名而不是性能指标的直接进行计算。在每个数据集或试验中,对算法进行排序,最好的算法排名为 1,对所有分类器依此类推。计算一个算法在 n 个数据集上的平均排名,比如说Rj。对 l 个分类器的弗里德曼统计量计算如下,并与阿尔法值进行比较,以接受或拒绝零假设:

Friedman's test

案例研究——马绞痛分类

为了说明第一章、机器学习综述中描述的不同步骤和方法,从数据分析到模型评估,具有真实世界特征的代表性数据集是必不可少的。

我们已经从以下链接可获得的 UCI 库中选择了“马绞痛数据集:archive.ics.uci.edu/ml/datasets/Horse+Colic

数据集有 23 个特征,并且很好地混合了分类特征和连续特征。它具有大量带有缺失值的特征和实例,因此理解如何替换这些缺失值并在建模中使用它在这种处理中变得更加实际。大量缺失数据(30%)实际上是该数据集的一个显著特征。数据由连续的属性以及名义类型的属性组成。此外,自我预测的存在使得从实践的角度来看,使用这个数据集是有益的。

这个练习的目标是应用到目前为止我们已经吸收的监督学习的技术。我们将使用一个真实的数据集和两个开源工具包——WEKA 和 rapid miner——来完成这项工作。在这些工具的帮助下,我们将构建一个管道,允许我们通过数据清理、学习过程和模型评估从数据文件的摄取开始。

Weka 是一个用于机器学习的 Java 框架——我们将看到如何使用这个框架在几行代码中从头到尾解决一个分类问题。除了 Java API,Weka 还有一个 GUI。

RapidMiner 是一个图形环境,具有拖放功能和一大套算法和可视化工具,使得使用数据和不同的建模技术快速运行实验变得极其容易。

商业问题

商业问题是确定数据集众所周知的变量的给定值——如果马的损伤是外科手术造成的。我们将使用测试集作为必须分类的看不见的数据。

机器学习映射

基于数据和标签,这是一个二元分类问题。数据已经分为训练数据和测试数据。这使得评估技术更简单,因为从特征选择到模型的所有方法都可以在相同的测试数据上进行评估。

该数据集包含 300 个训练和 68 个测试示例。有 28 个属性,目标对应于病变是否是外科的。

数据分析

在查看标签类别在训练和测试样本上的分布之后,我们在特征分析之前组合 300 个训练样本和 68 个测试样本。

标签分析

无类别与有类别的比率在训练集中是 109/191 = 0.57,在测试集中是 0.66:

|

训练数据集

手术损伤? 1(是) 2(否)
示例数量 One hundred and ninety-one One hundred and nine
测试数据集
手术损伤? 1(是) 2(否)
示例数量 Forty-one Twenty-seven

表 2:标签分析

特性分析

下面的是主要特征的屏幕截图,包括按缺失值排序的类型、缺失值、最小值、最大值、模式和标准偏差的基本统计数据。观察结果如下:

  • 不存在具有非缺失值的分类或连续特征;最少的是 368 个中有 74 个缺失的特征“脉冲”,即 20%的值缺失,高于一般的噪声阈值!
  • 大多数数字特征都有缺失值,例如,“鼻饲反流 PH”的 368 个值中有 247 个缺失,即 67%的值缺失!
  • 许多分类特征都有缺失值,例如,“abidominocentesis appearance”有 368 个缺失值中的 165 个,即 45%的值缺失!
  • 缺失值必须以某种方式处理,以克服如此大的数字所产生的噪音!Features analysis图 12:数据集中要素的基本统计数据.

监督学习实验

在本节的中,我们将介绍使用两种不同工具的监督学习实验——在一个工具中强调编码和分析,在另一个工具中强调 GUI 框架。这给了开发人员探索他们最喜欢的路线的机会。

Weka 实验

在本节的中,我们已经向提供了完整的代码,并将介绍从加载数据、转换数据、选择特性、构建样本模型、根据测试数据对其进行评估,甚至比较算法的统计显著性的整个过程。

Java 端到端流程示例

在每个算法中,使用相同的训练/测试数据,并对所有指标进行评估,如下所示。训练和测试文件按如下方式加载到内存中:

DataSource source = new DataSource(trainingFile);
Instances data = source.getDataSet();
if (data.classIndex() == -1)
  data.setClassIndex(data.numAttributes() - 1);

这里显示了使用 WEKA 的通用代码,其中每个分类器都由一个过滤的分类器包装,用于替换丢失的值:

//replacing the nominal and numeric with modes and means
Filter missingValuesFilter= new ReplaceMissingValues();
//create a filtered classifier to use filter and classifier
FilteredClassifier filteredClassifier = new FilteredClassifier();
filteredClassifier.setFilter(f);
// create a bayesian classifier
NaiveBayes naiveBayes = new NaiveBayes();
// use supervised discretization
naiveBayes.setUseSupervisedDiscretization(true);
//set the base classifier e.g naïvebayes, linear //regression etc.
fc.setClassifier(filteredClassifier)

当分类器需要执行特征选择时,在 Weka 中,AttributeSelectedClassifier进一步包装FilteredClassifier,如下所示:

AttributeSelectedClassifier attributeSelectionClassifier = new AttributeSelectedClassifier();
//wrap the classifier
attributeSelectionClassifier.setClassifier(filteredClassifier);
//univariate information gain based feature evaluation
    InfoGainAttributeEval evaluator = new InfoGainAttributeEval();
//rank the features
Ranker ranker = new Ranker();
//set the threshold to be 0, less than that is rejected
ranker.setThreshold(0.0);
attributeSelectionClassifier.setEvaluator(evaluator);
attributeSelectionClassifier.setSearch(ranker);
//build on training data
attributeSelectionClassifier.buildClassifier(trainingData);
// evaluate classifier giving same training data
Evaluation eval = new Evaluation(trainingData);
//evaluate the model on test data
eval.evaluateModel(attributeSelectionClassifier,testingData);

这里给出了评估的样本输出:

=== Summary ===

Correctly Classified Instances     53       77.9412 %
Incorrectly Classified Instances    15       22.0588 %
Kappa statistic             0.5115
Mean absolute error           0.3422
Root mean squared error         0.413
Relative absolute error        72.4875 %
Root relative squared error      84.2167 %
Total Number of Instances       68 

=== Detailed Accuracy By Class ===

 TP Rate FP Rate Precision Recall F-Measure MCC   ROC Area PRC Area Class
 0.927  0.444  0.760   0.927  0.835   0.535  0.823  0.875  1
 0.556  0.073  0.833   0.556  0.667   0.535  0.823  0.714  2
Weighted Avg.  0.779  0.297  0.789   0.779  0.768   0.535  0.823  0.812 

=== Confusion Matrix ===

 a b <-- classified as
 38 3 | a = 1
 12 15 | b = 2

Weka 实验者和模型选择

正如在模型评估指标部分中所解释的,为了选择模型,我们需要验证哪一个将在看不见的数据集上工作良好。交叉验证必须在训练集上完成,选择的性能指标需要使用标准统计测试指标进行分析。这里,我们展示了一个使用相同训练数据的示例,10 重交叉验证,对两个模型执行 30 次实验,并使用配对 t 检验比较结果。

一种是使用朴素贝叶斯进行预处理,包括替换缺失值和通过移除任何得分低于 0.0 的特征来执行特征选择。

另一个使用相同的预处理和 AdaBoostM1 和朴素贝叶斯。

Weka experimenter and model selection

图 13: WEKA 实验人员展示了使用两种算法重复 30 次交叉验证运行的过程。

Weka experimenter and model selection

图 14: WEKA 实验者的结果,显示了使用配对 t 检验比较两种算法的正确率或准确度。

RapidMiner 实验

现在让我们使用 RapidMiner 中的马疝气数据集进行一些实验。我们将再次遵循本章第一部分提出的方法。

注意

本节不是 RapidMiner 工具的教程。实验者应该阅读优秀的文档和用户指南,以熟悉该工具的使用。软件中有专门针对每个操作员的教程,我们建议您在想要了解如何使用特定操作员时使用这些教程。

一旦我们使用数据访问工具导入了测试和训练数据文件,我们将希望直观地探索数据集,以熟悉情况。特别重要的是识别 28 个属性中的每一个是连续的(RapidMiner 中的数值、整数或实数)还是分类的(RapidMiner 中的名义、二项式或多项式)。

可视化分析

从工具的结果面板,我们执行数据的单变量、双变量和多变量分析。统计工具给出了每个特征的简短摘要,包括连续类型的最小值、最大值、平均值和标准差,以及标称类型的最小、最大值和频率。

当我们进行双变量分析时,数据的有趣特征开始显现出来。在四分位数颜色矩阵中,颜色代表两个可能的目标值。正如在方框图中看到的,我们立即注意到一些属性比其他属性更清楚地区分了两个目标值。让我们检查几个:

Visualization analysis

图 15:四分位数颜色矩阵

蠕动:该特征显示了按目标值分开时分布的显著差异。两者之间的四分位数区域几乎没有重叠。这表明了该特征相对于目标的辨别能力。

另一方面,直肠温度的曲线显示分布中没有可察觉的差异。这表明该特征与目标的相关性低。从特征脉冲中可以得出类似的推论。当我们评估这些特征相对于目标的辨别能力时,我们期望这些特征排名相当低。

最后,痛苦的情节有一个非常不同的特点。它也能识别目标,但方式与蠕动截然不同。就疼痛而言,类别 2 的数据差异比类别 1 大得多。除了第 2 组与第 1 组相比差异较大之外,不同组间的腹胀差异也明显不同。

Visualization analysis

图 16:散点图矩阵

探索数据的一个重要部分是理解不同的属性如何相互关联以及如何与目标关联。这里我们考虑成对的特征,看看值在组合中的出现是否能告诉我们一些关于目标的信息。在这些图中,数据点的颜色是目标。

Visualization analysis

图 17:气泡图

在气泡图中,我们可以通过使用绘图工具指定 xy 轴以及表示为代表特性的气泡大小的第三维度,来一次可视化四个特性。目标类由颜色表示。

在总蛋白的低端,我们在直肠温度值的中间范围内看到较高的 pH 值。在这一组中,高 pH 值似乎显示出与外科手术损伤更强的相关性。对于总蛋白大于 50 的值,还发现了总蛋白差异更大的另一个聚类。在这个集群中,pH 值的变化也很小。

功能选择

对数据有了一些了解后,我们准备使用理论中的一些技术来评估特征相关性。

这里我们使用两种技术:一种是基于目标属性的卡方统计计算特征的权重,另一种是基于基尼系数。结果如表所示。请注意,正如我们在通过可视化进行特征分析时所推断的,脉搏和直肠温度都被证明具有低相关性,如两种技术所示。

|

卡方检验

|

基尼指数

属性

|

重量

|

属性

|

重量

疼痛 54.20626 疼痛 0.083594
腹部 53.93882 腹部 0.083182
蠕动 38.73474 蠕动 0.059735
腹部扩张 35.11441 腹部扩张 0.054152
外围脉冲 23.65301 外围脉冲 0.036476
腹腔穿刺外观 20.00392 腹腔穿刺外观 0.030849
温度极端值 17.07852 温度极端值 0.026338
粘膜 15.0938 粘膜 0.023277
鼻饲回流 14.95926 鼻饲回流 0.023069
PackedCellVolume 13.5733 PackedCellVolume 0.020932
直肠粘膜检查-粪便 11.88078 直肠粘膜检查-粪便 0.018322
毛细血管再充盈时间 8.078319 毛细血管再充盈时间 0.012458
呼吸速率 7.616813 呼吸速率 0.011746
总蛋白质 5.616841 总蛋白质 0.008662
鼻饲回流 2.047565 鼻饲回流 0.003158
脉搏 1.931511 脉搏 0.002979
年龄 0.579216 年龄 8.93E-04
鼻胃管 0.237519
腹腔中心总蛋白 0.181868
直肠温度 0.139387

表 3:通过卡方检验和基尼指数这两种不同技术确定的相关特征。

模型流程

在 RapidMiner 中,您可以使用输入和输出可以链接在一起的操作符来定义计算管道。以下过程表示用于执行整组操作的流程,从加载训练和测试数据开始,处理缺失值,通过相关性对特征进行加权,过滤出低得分特征,训练使用随机森林装袋作为算法的集成模型,最后将学习到的模型应用于测试数据并输出性能指标。请注意,应用于训练数据集的所有预处理步骤也必须通过组模型操作符以相同的顺序应用于测试集:

Model process flow

图 18: RapidMiner 流程图

在该过程的顶部之后,在最左侧的操作者中摄取训练集,随后排除非预测因素(医院编号、CP 数据)和自我预测因素(病变 1)。接下来是运算符,分别用连续属性和分类属性的平均值和众数替换缺失值。接下来,Feature Weights 操作符基于卡方统计评估每个特征的权重,然后是忽略低权重特征的过滤器。然后,使用随机森林分类器,使用 Bagging 将该预处理数据集用于训练模型。

通过 Group Models 操作符,对训练数据使用的预处理步骤按适当的顺序组合在一起,并在倒数第二个步骤中应用于测试数据。最后,在最后一步中,评估并呈现伴随混淆矩阵和其他性能度量的测试实例上的目标变量的预测。

模型评估指标

我们现在准备比较各种模型的结果。如果你一直坚持下去,你可能会发现你的结果与这里呈现的不同——这可能是由于一些学习算法的随机性质,或者模型中使用的一些超参数值的差异。

我们考虑了三种不同的训练数据集:

  • 缺少值的原始训练数据
  • 处理缺失值后转换的训练数据
  • 处理缺失值并应用特征选择(卡方检验)以选择高区分度特征的训练数据。

我们在每个数据集上考虑了三组不同的算法:

  • 线性算法(朴素贝叶斯和逻辑回归)
  • 非线性算法(决策树和 KNN)
  • 集成算法(Bagging、Ada Boost 和随机森林)。
混淆度量的评估

|

模型

|

pulse

|

定期用量法(Fixed Period Requirements)

|

精确

|

特征

|

准确(性)

|

罗马纪元

朴素贝叶斯 68.29% 14.81% 87.50% 85.19% 75.00% Zero point eight three six
逻辑回归 78.05% 14.81% 88.89% 85.19% 80.88% Zero point eight five six
决策图表 68.29% 33.33% 75.68% 66.67% 67.65% Zero point six nine six
k-神经网络 90.24% 85.19% 61.67% 14.81% 60.29% Zero point five five six
装袋(GBT) 90.24% 74.07% 64.91% 25.93% 64.71% Zero point seven three seven
Ada Boost(朴素贝叶斯) 63.41% 48.15% 66.67% 51.85% 58.82% Zero point six one three

表 4:根据缺失值的马结肠数据训练的模型的不可见(测试)数据的结果

|

模型

|

pulse

|

定期用量法(Fixed Period Requirements)

|

精确

|

特征

|

准确(性)

|

罗马纪元

朴素贝叶斯 68.29% 66.67% 60.87% 33.33% 54.41% Zero point five five nine
逻辑回归 78.05% 62.96% 65.31% 37.04% 61.76% Zero point six eight nine
决策图表 97.56% 96.30% 60.61% 3.70% 60.29% Zero point eight one two
k-神经网络 75.61% 48.15% 70.45% 51.85% 66.18% Zero point six four eight
装袋(随机森林) 97.56% 74.07% 66.67% 25.93% 69.12% Zero point eight nine two
装袋(GBT) 82.93% 18.52% 87.18% 81.48% 82.35% Zero point eight seven
Ada Boost(朴素贝叶斯) 68.29% 7.41% 93.33% 92.59% 77.94% Zero point eight nine five

表 5:根据马结肠数据训练的模型的不可见(测试)数据的结果,其中缺失值被替换

|

模型

|

pulse

|

定期用量法(Fixed Period Requirements)

|

精确

|

特征

|

准确(性)

|

罗马纪元

朴素贝叶斯 75.61% 77.78% 59.62% 29.63% 54.41% Zero point five five one
逻辑回归 82.93% 62.96% 66.67% 37.04% 64.71% Zero point six nine two
决策图表 95.12% 92.59% 60.94% 7.41% 60.29% Zero point eight two four
k-神经网络 75.61% 48.15% 70.45% 51.85% 66.18% Zero point six six nine
装袋(随机森林) 92.68% 33.33% 80.85% 66.67% 82.35% Zero point nine one five
装袋(GBT) 78.05% 22.22% 84.21% 77.78% 77.94% Zero point eight seven two
Ada Boost(朴素贝叶斯) 68.29% 18.52% 84.85% 81.48% 73.53% Zero point eight four eight

表 6:使用卡方统计技术选择的特征对马结肠数据进行训练的模型的看不见的(测试)数据的结果

ROC 曲线、升力曲线和增益图

性能图使我们能够直观地评估在三个实验中的两个实验中使用的模型——没有任何缺失数据替换,并且在替换缺失数据后使用卡方加权的特征——并将它们相互比较。成对的图显示了我们在本章前面了解的每种线性(逻辑回归)、非线性(决策树)和集成(Bagging,使用梯度推进树)技术的性能曲线,这些曲线来自两个实验的结果。

ROC Curves, Lift Curves, and Gain Charts

图 19:使用缺失数据的实验的 ROC 性能曲线

ROC Curves, Lift Curves, and Gain Charts

图 20:使用缺失数据的实验累积增益性能曲线

ROC Curves, Lift Curves, and Gain Charts

图 21:使用缺失数据的试验的举升性能曲线

结果、观察和分析

处理缺失值的影响是巨大的。在七个分类器中,除了朴素贝叶斯和逻辑回归,当缺失值按照各种指标(包括 AUC、精度、准确度和特异性)的指示进行处理时,所有分类器都显示出显著的改进。这告诉我们,处理可能“有噪声”的缺失值是数据转换的一个重要方面。朴素贝叶斯有它自己管理缺失值的内部方法,我们的实验结果表明,它在空值处理方面比我们的外部转换做得更好。但是一般来说,当您考虑所有分类器时,转换缺失值的想法似乎是有益的。

正如建模一节中所讨论的,一些算法需要正确处理缺失值和特征选择,以获得最佳性能。从结果中,我们可以看到,例如,决策树的性能从缺失数据时的 0.696、管理缺失数据时的 0.812 以及缺失数据与特征选择一起处理时的最佳性能 0.824 逐渐提高。当执行这两个步骤时,七个分类器中的六个提高了 AUC(和其他度量)的性能;比较 AUC 的表 5表 6 可以让我们快速了解这些情况。这证明了在执行建模之前进行预处理(如缺失值处理和特征选择)的重要性。

从结果得出的主要结论是,该问题是高度非线性的,因此从最简单的决策树到集成随机森林的大多数非线性分类器表现非常好。最佳性能来自元学习算法随机森林,丢失的值得到适当处理,最相关的特征用于训练。通过 AUC 测量的最佳线性模型性能是 0.856,用于具有数据原样(即,具有缺失值)的逻辑回归,而随机森林通过伴随特征选择的缺失数据的适当处理实现了 0.915 的 AUC 性能。一般来说,从表 3 中可以明显看出,非线性分类器或元学习器在大多数性能指标上比线性分类器表现得更好。

以适当的方式处理丢失的值可以被认为是“噪声”,从而显著提高 AdaBoost 的性能。AUC 从 0.613 提高到 0.895,FPR 从 48.15 降低到 7.41%。这确实符合该技术的预期理论行为。

与其他常见技术相比,元学习技术使用 boosting 和 bagging 的概念,在处理真实世界的数据时相对更有效。结果似乎证明了这一点,因为 AdaBoost 使用朴素贝叶斯作为基础学习器,对经过适当噪声处理的数据进行训练,在大部分指标中表现优于朴素贝叶斯,如表 5表 6 所示。在表 6 中,与基本分类器相比,随机森林和 GBTs 以及 AdaBoost 也表现出最佳性能,再次证实了正确的过程和集成学习可以在真实世界的噪声数据集中产生最佳结果。

注意

本章中 WEKA 和 RapidMiner 过程文件的所有数据、模型和结果可在以下位置获得:github . com/mjmlbook/mastering-Java-machine-learning/tree/master/chapter 2

总结

监督学习是机器学习应用中使用的主要技术。该方法由一系列步骤组成,从数据探索、数据转换和数据采样开始,经过特征缩减、模型构建,最后是模型评估和比较。这个过程的每一步都涉及到一些必须回答关键问题的决策:我们应该如何估算缺失值?我们应该使用什么样的数据采样策略?给定数据集中的噪声量和规定的可解释性目标,最合适的算法是什么?本章演示了这些过程和技术在现实世界问题中的应用——使用 UCI 马结肠数据集的分类问题。

无论问题是分类(当目标是分类值时)还是回归(当目标是实值连续变量时),用于监督学习的方法都是相似的。在这一章中,我们用分类来说明。

第一步是数据质量分析,包括特征的描述性统计、使用单变量的可视化分析和多变量特征分析。在各种绘图类型的帮助下,我们可以发现数据中的不同趋势,并检查某些要素可能与标注值相关,也可能不相关。数据分析之后是数据预处理,其中的技术包括处理噪声的方法,如在缺失数据和异常值的情况下,以及通过标准化和离散化为建模技术准备数据。

在预处理之后,我们必须适当地将数据分成训练、验证和测试样本。根据数据的特征和手头的问题,可以使用不同的采样策略,例如,当数据有偏差时,或者当我们有多类分类问题时。根据数据大小,交叉验证是创建单独验证集的常见替代方法。

下一步是剔除不相关的特征。在过滤方法中,使用单变量分析的技术要么是基于熵的(信息增益、增益率),要么是基于统计假设检验的(卡方检验)。对于主要的多变量方法,目标是在一起考虑时减少冗余特征,或者使用与目标标记最密切相关的特征。在包装器方法中,我们使用机器学习算法来告诉我们更多有区别的特征。最后,一些学习技术以正则项的形式将特征选择嵌入到算法中,通常使用脊或套索技术。这些代表了嵌入式方法。

建模技术大致分为线性、非线性和集成方法。在线性算法中,要素的类型可以决定要使用的算法-线性回归(仅数字要素)、朴素贝叶斯(数字或分类)和逻辑回归(仅数字要素,或分类转换为数字)是可行的。在选择每种方法或使用这些模型解释学习结果时,必须了解每种方法的优缺点。

决策树、k-NN 和 SVM 都是非线性技术,它们都有自己的优势和局限性。例如,可解释性是决策树的主要优势。k-NN 在面对噪声数据时是稳健的,但在处理高维数据时表现不佳。SVM 的可解释性较差,但即使在数据集有限且要素数量较多的情况下也能大放异彩。

随着许多不同模型的合作,集成方法可以利用最好的。Bagging 和 boosting 都是在集成中比它们使用的基础学习器更好地概括的技术,并且在许多应用中很受欢迎。

最后,在评估模型性能和相互比较模型时,可以使用哪些策略和方法?验证集或交叉验证的作用对于归纳未知数据的能力至关重要。从混淆矩阵得到的性能评估度量被普遍用于评估分类器;有些在某些领域和学科中比其他领域和学科更常用。当分类阈值变化时,ROC、增益和升力曲线是模型性能范围的很好的视觉表示。当成对比较模型时,使用基于统计假设检验的几个指标。Wilcoxon 和 McNemar 的是两个非参数检验;配对 t 检验是参数方法的一个例子。同样,在比较多种算法时,一种常见的不对数据分布做出假设的非参数检验是 Friedman 检验。ANOVA 是参数测试,假设指标的正态分布和方差相等。

本章的最后部分介绍了使用 RapidMiner 工具开发和评估模型的过程,这些模型用于对 UCI 马结肠数据集的测试数据进行分类。设计了三个实验来比较和对比不同数据预处理条件下模型的性能,即,不处理缺失数据,使用标准技术替换缺失数据,以及最后,在零替换之后进行特征选择。在每个实验中,我们选择多种线性、非线性和集合方法。作为整个过程的一部分,我们说明如何使用建模环境。我们可以从结果中得出启示性的结论,这使我们能够深入了解数据,并展示不同情况下各类技术的相对优势和劣势。我们的结论是,数据是高度非线性的,集成学习显示出明显优于其他技术的优势。

参考文献

  1. D.贝尔和 h .王(2000 年)。一种关联形式及其在特征子集选择中的应用。机器学习,41(2):175–195。
  2. J.多克(1992 年)。评估特征选择方法及其在计算机安全中的应用。技术报告 CSE–92–18,Davis,CA:加州大学计算机科学系。
  3. 米(meter 的缩写))本·巴萨特(1982 年)。在特征评估中使用距离测量、信息测量和误差界限。载于 P. R. Krishnaiah 和 L. N. Kanal 编辑的《统计手册》,第 2 卷,第 773-791 页,北荷兰。
  4. Littlestone N,Warmuth M (1994) 加权多数算法。信息计算 108(2):212–261
  5. Breiman L .、Friedman J.H .、Olshen R.A .、Stone C.J. (1984) 分类和回归树,沃兹福思国际集团。
  6. B.Ripley(1996),模式识别和神经网络。剑桥大学出版社,剑桥。
  7. 布雷曼(1996 年)。 Bagging 预测器,机器学习,24 123-140。
  8. Burges,C. (1998 年)。模式识别支持向量机教程。数据挖掘和知识发现。2(2):1-47.
  9. Bouckaert,R. (2004),对连续变量表现良好的朴素贝叶斯分类器,计算机科学讲义,第 3339 卷,第 1089–1094 页。
  10. Aha D (1997)。懒学,Kluwer 学术出版社,多德雷赫特
  11. Nadeau,c .和 Bengio,Y. (2003 年),泛化误差的推论。机器学习 52:239–281。
  12. 昆兰博士(1993 年)。C4.5: 机器学习的程序,摩根·考夫曼,旧金山。
  13. Vapnik,V. (1995),统计学习理论的本质。斯普林格出版社。
  14. 沙皮尔热,歌手 Y,辛格哈尔 A (1998)。应用于文本过滤的 Boosting 和 Rocchio】。在 SIGIR '98:第 21 届信息检索研究与发展国际年会论文集,第 215-223 页
  15. 布雷曼 L.(2001 年)。随机森林。机器学习,45 卷 1 期,第 5-32 页。
  16. Nathalie Japkowicz 和 Mohak Shah (2011 年)。评估学习算法:分类观点。剑桥大学出版社。
  17. 汉利 j .和麦克尼尔 B. (1982)。受试者工作特性(ROC)曲线下面积的含义和用途。放射学 143,29–36。
  18. 玺恩,李伟银,李玉山(2000)。三十三种新旧分类算法的预测精度、复杂度和训练时间的比较。机器学习 40:203–228。
  19. A.摩尔和李明善(1994 年)。最小化交叉验证误差的高效算法。进行中。第 11 国际机场。糖膏剂《论机器学习》,第 190-198 页,新泽西州新不伦瑞克。摩根·考夫曼。
  20. Nitesh 诉 Chawla 等人。艾尔。(2002).合成少数过采样技术。人工智能研究杂志。16:321-357.*

三、无监督机器学习技术

在上一章中,我们重点介绍了监督学习,即从已标记的训练数据集进行学习。在现实世界中,获取带有标签的数据通常很困难。在许多领域中,实际上不可能标记数据,要么是因为标记的成本,要么是因为数据生成的巨大数量或速度而难以标记。在这些情况下,各种形式的无监督学习提供了探索、可视化和执行描述性和预测性建模的正确方法。在许多应用中,无监督学习通常与监督学习相结合,作为分离感兴趣的数据元素以进行标注的第一步。

在这一章中,我们将关注各种实用的、非常适合无监督学习的方法、技术和算法。我们首先注意到在处理数据和转换时,监督学习和非监督学习之间的共同问题。然后,我们将简要介绍在无监督学习中面临的特殊挑战,由于缺乏“基础真理”和在这些条件下学习的性质。

然后,我们将讨论应用于未标记数据集的特征分析和降维技术。接下来是对广泛的聚类方法的介绍和对实际使用中各种算法的讨论,就像我们在第二章中对监督学习所做的那样,展示了每种算法如何工作,何时使用,以及它的优点和局限性。我们将通过介绍不同的集群评估技术来结束集群部分。

在聚类处理之后,我们将探讨离群点检测这一主题。我们将对比各种不同的技术和算法,这些技术和算法说明了在给定的数据集中是什么使得一些对象成为离群值——也称为异常。

本章将以聚类和异常值检测实验结束,这些实验是用真实世界的数据集进行的,并对获得的结果进行了分析。在本案例研究中,我们将使用 ELKI 和 SMILE Java 库来完成机器学习任务,并将展示代码和实验结果。我们希望这能让读者感受到这些工具的强大功能和易用性。

监督学习的共同问题

我们讨论的许多与监督学习相关的问题在无监督学习中也很常见。下面列出了其中一些:

  • 算法处理的特征类型:大多数聚类和离群点算法需要数字表示才能有效工作。转换分类或顺序数据必须小心进行
  • 维数灾难:拥有大量特征会导致空间稀疏,影响聚类算法的性能。必须选择一些选项来适当地降低维度——或者是仅保留最相关特征的子集的特征选择,或者是将特征空间转换成较低维度空间的一组新的主要变量的特征提取
  • 内存和训练时间的可扩展性:由于内存或训练时间的限制,许多无监督学习算法无法扩展到几千个以上的实例
  • 数据中的异常值和噪声:许多算法受到特征中的噪声、异常数据的存在或缺失值的影响。它们需要被适当地转换和处理

无监督学习特有的问题

以下是关于无监督学习技术的一些问题:

  • 参数设置:决定特征的数量、特征的有用性、聚类的数量、聚类的形状等等,对某些无监督的方法提出了巨大的挑战
  • 评估方法:由于缺乏基本事实,无监督学习方法是不适定的,因此对算法的评估变得非常主观。
  • 硬标签或软标签:许多无监督学习问题需要以排他或概率的方式给数据加上标签。这给许多算法带来了问题
  • 结果和模型的可解释性:与监督学习不同,基础事实的缺乏和一些算法的性质使得解释来自模型和标签的结果更加困难

特征分析和降维

在中,首先要掌握的工具是不同的特征分析和维度缩减技术。如同在监督学习中一样,降维的需要源于许多类似于前面讨论的特征选择和降维的原因。

较少的区分维度使得数据和聚类的可视化更加容易。在许多应用中,无监督的降维技术用于压缩,然后可以用于数据的传输或存储。当较大的数据有开销时,这尤其有用。此外,应用降维技术可以提高许多算法在内存和计算速度方面的可伸缩性。

符号

我们将使用类似于章节中关于监督学习的符号。这些示例以维表示,并表示为矢量:

x=(x1,x [2] ,…x*[d])^T*

包含 n 个示例的整个数据集可以表示为一个观察矩阵:

Notation

降维的思想是通过输入特征的变换、投影或组合来找到 k ≤ d 特征,使得较低维度的 k 捕获或保留原始数据集的有趣属性。

线性方法

线性维度方法是一些最古老的统计技术,用于减少特征或将数据转换到更低的维度,保留有趣的区分属性。

在数学上,我们使用线性方法执行转换,从而使用原始数据元素的线性转换创建新的数据元素:

Linear methods

s = Wx

这里, W [k × d] 是线性变换矩阵。变量 s 也被称为潜变量或隐藏变量。

在本主题中,我们将讨论两种最实用和最常用的方法。我们将列出这些技术的一些变体,以便读者可以使用这些工具进行实验。这里的主要假设——通常形成限制——是转换之间的线性关系。

主成分分析

PCA 是一种广泛使用的降维技术(参考文献 1】)。将原始坐标系旋转到新的坐标系,该坐标系利用数据中最大方差的方向,从而在低维子空间中产生不相关的变量,而这些变量在原始特征空间中是相关的。PCA 对特征的缩放很敏感。

输入和输出

PCA 通常对数值数据集有效。许多工具为名义特征提供了分类到连续的转换,但这会影响性能。主成分的数量,或 k ,也是由用户提供的输入。

它是如何工作的?

PCA 最基本的形式是试图找到数据在新轴上的投影,这被称为主成分 ??。主组件是从原始空间捕捉最大方差方向的投影。简而言之,PCA 通过在最大方差的方向上旋转数据的原始轴来找到第一主分量。该技术通过再次确定与第一个轴正交的下一个最佳轴,通过寻找第二高的方差等等,直到捕捉到大多数方差,来找到下一个主分量。一般来说,大多数工具要么选择主成分的数量,要么选择继续寻找成分,直到捕获到原始数据集中的某个百分比(例如 99%)的方差。

数学上,寻找最大方差的目标可以写成

![How does it work?How does it work?

λv=Cv是本征分解

这相当于:

How does it work?

这里, W 是主成分, S 是输入数据的新变换。通常,在计算部分使用特征值分解或奇异值分解。

How does it work?

图 1:主成分分析

优点和局限性

  • PCA 的一个优点是它是最优的,因为它最小化了数据的重构误差。
  • 主成分分析假设正态分布。
  • 对于具有高维度的大型数据集,方差-协方差矩阵的计算会变得很密集。或者,可以使用奇异值分解 ( SVD ),因为它迭代地工作,并且不需要显式协方差矩阵。
  • 当数据中有噪声时,PCA 有问题。
  • 当数据位于复杂流形中时,PCA 失败,这是我们将在非线性降维部分讨论的主题。
  • PCA 假设特征之间的相关性,并且在没有这些相关性的情况下,它不能进行任何变换;相反,它只是对它们进行排名。
  • 通过将原始特征空间转换成一组新的变量,PCA 导致数据可解释性的损失。
  • 主成分分析还有许多其他受欢迎的变体,它们克服了主成分分析的一些偏见和假设。

独立成分分析 ( ICA )假设源中存在非高斯的混合物,并使用生成技术,试图在更小的混合物或成分中找到原始数据的分解(参考文献【2】)。主成分分析和独立成分分析的主要区别在于,主成分分析创建的是不相关的成分,而独立成分分析创建的是独立的成分。

数学上,它假设Advantages and limitations是独立源∈ Advantages and limitations的混合,这样每个数据元素y=y¹,y²,…。y*^k***^T而独立性是由![Advantages and limitations 所暗示的:概率主成分分析 ( PPCA )基于使用混合模型寻找成分和使用期望最大化** ( EM ) ( 参考文献【3】)的最大似然公式。它克服了 PCA 面临的缺失数据和离群点影响的问题。### 随机投影(RP)**当数据可以大幅度分离时——即使是高维数据——可以将数据随机投影到低维的空间,而不会影响可分离性,并且可以用相对少量的数据实现良好的泛化。随机投影使用这种技术,细节如下所述(参考文献【4】)。#### 输入和输出**随机投影适用于数字和分类特征,但分类特征被转换为二进制。输出是输入数据元素的低维表示。投影的尺寸数量, k ,是用户定义输入的一部分。#### 它是如何工作的?**这种技术使用随机投影矩阵将输入数据投影到低维空间。原始数据How does it work?被转换到低维空间How does it work?,其中k<p使用:

How does it work?

这里, k x d 矩阵 R 中的列是独立同分布的零均值正态变量,并且被缩放到单位长度。使用概率抽样构建随机矩阵 R 有多种方式。RP 的计算复杂度为 O(knd) ,比 PCA 的伸缩性好很多。在许多实际的数据集中,RP 给出了与 PCA 相当的结果,并且可以扩展到大的维度和数据集。

优点和局限性

  • 它将扩展到数据集大小和维度的非常大的值。在大规模的文本和图像学习问题中,这种技术已经被成功地用作预处理技术。
  • 使用 RP 时,有时会发生大量信息丢失。

多维标度(MDS)

MDS 有很多种形式——古典的、公制的和非公制的。MDS 的主要思想是保持成对的相似性/距离值。它通常包括将高维数据转换成二维或三维数据(参考文献 [5])。

输入和输出

MDS 可以根据用户选择的距离函数对数字和分类数据进行处理。要转换的维数, k ,是用户定义的输入。

它是如何工作的?

给定 n 数据元素,计算 n x n 相似度或距离矩阵。可以选择使用距离,如欧几里德距离、马氏距离,或相似性概念,如余弦相似性、Jaccard 系数等。MDS 在其非常基本的形式中试图找到距离矩阵在低维空间中的映射,其中变换点之间的欧几里得距离类似于亲和矩阵。

数学上:

How does it work?

这里的How does it work?输入空间和How does it work?映射空间。

如果使用核来变换输入亲和空间,那么 MDS 就成为降维的非线性方法。当输入空间中的点之间的距离是欧几里德距离时,经典 MDS 等价于 PCA。

优点和局限性

  • 关键的缺点是解释高维数据所需的较低维度的主观选择,通常人类只限于两个或三个维度。一些数据在这个低维空间中可能不能有效地映射。
  • 优点是您可以使用框架对最低维度执行线性和非线性映射。

非线性方法

一般而言,非线性维度缩减涉及对 KPCA 等线性方法中的计算执行非线性变换,或者在流形学习中寻找较低维度中的非线性关系。在一些领域和数据集中,低维数据的结构是非线性的——这就是 KPCA 等技术有效的地方——而在一些领域,数据在低维中不会展开,你需要多方面的学习。

核主成分分析(KPCA)

内核 PCA 使用在第二章、现实世界监督学习的实用方法中描述的内核技巧,使用 PCA 算法在高维空间中转换数据以找到有效的映射(参考文献【6】)。

输入和输出

类似于 PCA,但增加了对内核和内核参数的选择。例如,如果选择了径向基函数 ( RBF )或高斯核,那么核连同伽马参数成为用户选择的值。

它是如何工作的?

与前一章讨论的支持向量机 ( SVM )的方式相同,KPCA 使用“核技巧”将输入空间转换到高维特征空间。寻找最大方差的整个 PCA 机制然后在变换的空间中执行。

如五氯苯甲醚:

How does it work?**How does it work?

代替线性协方差矩阵,通过构造 N x N 矩阵,使用核方法将非线性变换应用于输入空间,而不是使用 ϕ (x) 进行实际变换。

k(x,y)=((x),**(y)=****

由于核变换实际上并没有将特征变换到显式特征空间,因此找到的主成分可以被解释为数据在成分上的投影。在下图中,使用圆上的 scikit-learn 示例生成的二元非线性数据集(参考文献 [27])展示了使用 RBF 核进行 KPCA 后的线性分离,并通过逆变换返回到几乎相似的输入空间:

**How does it work?

图 2:圆形数据集上的 KPCA 和逆变换。**

优点和局限性

  • KPCA 克服了 PCA 提出的非线性映射。
  • KPCA 有与标准 PCA 相似的异常值、噪声和缺失值问题。有强大的方法和变化来克服这一点。
  • 由于核矩阵的增加,KPCA 在空间上存在可扩展性问题,这可能成为高维大数据集的瓶颈。在这些情况下,可以使用 SVD 作为替代方案。

流形学习

当高维数据嵌入到较低的维中,这些维是非线性的,但是具有复杂的结构,流形学习是非常有效的。

输入和输出

流形学习算法需要两个用户提供的参数: k ,代表初始搜索的邻居数量, n ,流形坐标的数量。

它是如何工作的?

如下图所示,使用 scikit-learn 实用程序绘制的三维 S 曲线(参考文献 [27])在 2D PCA 中表示,在 2D 流形中使用 LLE 表示。有趣的是,当使用 LLE 的流形学习表示清楚地分离颜色时,观察蓝色、绿色和红色点如何在 PCA 表示中混合。还可以观察到,欧几里德距离的等级排序在流形表示中没有保持:

**How does it work?

图 PCA 和流形学习后的数据表示**

为了保留结构,将保留测地线距离而不是欧几里德距离。一般的方法是构建一个图结构,如邻接矩阵,然后使用不同的假设计算测地线距离。在 Isomap 算法中,全局成对距离被保留(引用 [7])。在局部线性嵌入** ( LLE )算法中,进行映射是为了照顾局部邻域,即附近的点映射到变换中的附近点(引用【9】)。拉普拉斯特征映射类似于 LLE,除了它试图通过使用图拉普拉斯来保持 LLE 的“局部性”而不是“局部线性”(参考文献【8】)。**

优点和局限性

  • Isomap 是非参数的;它保留了全局结构,没有局部最优,但受到速度的阻碍。
  • LLE 和拉普拉斯特征映射是非参数的,没有局部最优,速度很快,但是不能保持全局结构。

**

聚类

聚类算法可以根据技术、输出、过程和其他考虑因素以不同的方式分类。在本主题中,我们将介绍一些最广泛使用的聚类算法。

聚类算法

现在有一套丰富的集群技术被广泛应用。本节介绍了其中的一些,解释了它们是如何工作的,它们可以用于什么类型的数据,以及它们的优缺点。这些算法包括基于原型、基于密度、基于概率划分、基于层次、基于图论和基于神经网络的算法。

k-Means

k-means 是一种基于质心或原型的迭代算法,采用分区和重定位方法(参考文献 [10])。k-means 根据使用的距离度量来查找球形聚类,就像欧几里德距离的情况一样。

输入和输出

k-means 可以处理大多数数字特征。许多工具为数值转换提供了分类,但是在计算中使用大量的分类会导致非最优的聚类。用户定义的 k 、待发现的聚类数量以及用于计算接近度的距离度量是两个基本输入。k-means 生成聚类,将数据关联到每个聚类,并将聚类的质心作为输出。

它是如何工作的?

最常见的变体称为劳埃德算法,通过从数据集中随机选取数据元素来初始化给定数据集的 k 质心。它使用某种距离度量(如欧几里德距离)将每个数据元素分配给它最接近的质心。然后,它计算每个聚类的数据点的平均值以形成新的质心,并且重复该过程,直到达到最大迭代次数或者质心没有变化。

从数学上讲,聚类的每一步都可以看作是一个优化步骤,其中要优化的等式由下式给出:

How does it work?

这里,ci 是属于簇 i 的所有点。最小化问题被归类为 NP-hard,因此 k-Means 有陷入局部最优的趋势。

优点和局限性

  • 集群的数量、 k 的选择很难,但是通常搜索技术,例如针对不同的值改变 k ,以及测量度量,例如误差平方和,可以用来找到一个好的阈值。对于较小的数据集,可以尝试分层 k-Means。
  • k-means 可以比大多数算法更快地收敛于更小的值 k ,并且可以找到有效的全局聚类。
  • k-means 收敛会受到质心初始化的影响,因此有许多变体可以用不同的种子等执行随机重启。
  • 当存在异常值和噪声数据点时,k-means 可能表现不佳。使用稳健的技术,如中位数而不是均值,k-Medoids,在一定程度上克服了这一点。
  • 当它们具有任意形状或具有不同密度时,k-means 不会找到有效的聚类。

数据库扫描

基于密度的带噪声的应用空间聚类(DBSCAN)是一种基于密度的分区算法。它将空间中的密集区域与稀疏区域分开(参考【14】)。

输入和输出

DBSCAN 中仅使用数字特征。用户自定义的参数是 MinPtsϵ 给出的邻域因子。

它是如何工作的?

算法首先求出每个点 p 的ϵ-neighborhood,由How does it work?给出。高密度区域被识别为ϵ-neighborhood 中的点数大于或等于给定的 MinPts 的区域;这种ϵ-neighborhood 被定义的点被称为核心点。一个核心点的ϵ-neighborhood 内的点被称为可直接到达。通过从一个可直接到达的核心点跳跃到从第二个点可直接到达的另一个点而实际上可到达的所有核心点被认为是在同一个集群中。此外,在其ϵ-邻域中具有少于 MinPts 的任意点,但是从核心点可直接到达的,属于与核心点相同的聚类。这些在群集边缘的点被称为边界点*。噪声点是既不是核心点也不是边界点的任何点。*

优点和局限性

  • DBSCAN 算法不需要指定簇的数量,可以从数据中自动找到。
  • DBSCAN 可以找到各种形状和大小的星团。
  • DBSCAN 对噪声具有内在的鲁棒性,可以从数据集中发现异常值。
  • DBSCAN 在识别点方面不是完全确定的,其边界或核心分类取决于处理数据的顺序。
  • 由于维度的诅咒,选择的距离度量(如欧几里德距离)通常会影响性能。
  • 当存在密度变化很大的簇时, {MinPts,**}的静态选择会造成很大的限制。

均值漂移

均值偏移是许多基于图像、视频和运动检测的数据集中非常有效的聚类算法(参考文献【11】)。

输入和输出

在均值偏移算法中,仅接受数字特征作为数据输入。内核的选择和内核的带宽是影响性能的用户驱动的选择。均值漂移生成数据点的模式,并围绕这些模式对数据进行聚类。

它是如何工作的?

均值偏移基于核密度估计 ( KDE )的统计概念,其中是一种从样本中估计底层数据分布的概率方法。

给定带宽 h 的内核 K ( x )的内核密度估计由下式给出:

How does it work?

对于维度为 dn 个点。均值漂移算法通过在局部增加密度的方向上移动每个数据点来工作。为了估计该方向,将梯度应用于 KDE,并且梯度采用以下形式:

How does it work?**How does it work?

这里 g(x)=–K’(x)是核的导数。向量 m( x )被称为均值偏移向量,用于在方向上移动点

x^((t+1))=x^t+m(x

同样,当密度函数的梯度为零时,保证收敛。结束于相似位置的点被标记为属于同一区域的聚类。

优点和局限性

  • 均值漂移是非参数的,并且对数据分布不做任何潜在假设。
  • 它可以发现不同形状和大小的不复杂的星团。
  • 不需要明确给出集群的数量;在估计中使用的带宽参数的选择隐含地控制了聚类。
  • 均值漂移对于给定的带宽参数没有局部最优,因此它是确定性的。
  • 由于 KDE 效应,均值漂移对异常值和噪声点具有很强的鲁棒性。
  • 均值漂移算法计算速度慢,并且不能很好地适应大型数据集。
  • 带宽选择应该是明智的;否则,它会导致合并模式,或额外的,浅模式的出现。

期望最大化(EM)或高斯混合建模(GMM)

GMM 或 EM 是一种基于概率划分的方法,它使用基于概率分布的技术将数据划分为 k 簇(引用【13】)。

输入和输出

在新兴市场/GMM 中只允许使用数字特征。模型参数是混合物组分的数量,由 k 给出。

它是如何工作的?

GMM 是一种生成方法,假设有 k 个高斯分量,每个高斯分量有一个均值[i] 和协方差ʃ[I]。以下表达式表示给定 k 高斯分量的数据集的概率:

How does it work?How does it work?How does it work?

为每个 k 高斯分量寻找平均值{ [1] 、[2] 、… [k] }使得分配给每个分量的数据点最大化该分量的概率的两步任务是使用期望最大化 ( EM )过程完成的。

迭代过程可以被定义为 E-step,它在迭代 i 中为该聚类的所有数据点计算预期聚类:

How does it work?

给定属于聚类的数据点,M 步最大化计算 t+1:

How does it work?

EM 过程可以导致 GMM 收敛到局部最优。

优点和局限性

  • 适用于任何功能;对于分类数据,计算离散概率,而对于数值,估计连续概率函数。
  • 它有计算的可扩展性问题。这会导致局部最优。
  • 类似于 k-Means,k 高斯的值必须先验地给定。**

层次聚类

分层聚类是一种基于连通性的聚类方法,它被广泛用于分析和探索数据,而不是用作聚类技术(参考文献 12】)。想法是从顶部或底部迭代地构建二叉树,使得相似的点被分组在一起。树的每一层都提供了有趣的数据摘要。

输入和输出

分层聚类通常基于相似性- 进行转换,因此分类数据和连续数据均可接受。层次聚类只需要相似性或距离度量来计算相似性,而不需要像 k-means 或 GMM 那样需要聚类的数目。

它是如何工作的?

层次聚类有许多变体,但是我们将讨论聚集聚类。聚集聚类的工作原理是首先将所有数据元素放入它们自己的组中。然后,它基于所使用的相似性度量迭代地合并这些组,直到存在单个组。树或分组的每一层都提供了数据的独特分割,由分析师选择适合问题域的正确层。凝聚聚类通常使用树状图来可视化,树状图显示了相似数据点的合并。常用的相似性方法有:

  • 单联动:相似度是各组点之间的最小距离:![How does it work?* 完全联动:相似度是各组点之间的最大距离:How does it work?
  • 平均连锁度:各组点之间的平均相似度:How does it work?

优点和局限性

  • 分层聚类将分层结构强加到数据上,即使可能不存在这样的结构。
  • 相似性度量的选择会导致一组非常不同的合并和树状图,因此它对用户输入有很大的依赖性。
  • 随着数据点的增加,分层聚类的可扩展性受到影响。根据使用的距离度量,它可能对噪声和异常值很敏感。

自组织地图(SOM)

SOM 是一种基于神经网络的方法,可以被视为降维、流形学习或聚类技术(参考文献【17】)。神经生物学研究表明,我们的大脑将不同的功能映射到不同的区域,称为地形图,这构成了这项技术的基础。

输入和输出

SOM 中仅使用数字特征。模型参数由距离函数(通常使用欧几里德距离)和以宽度和高度或网格中单元数量表示的网格参数组成。

它是如何工作的?

SOM,也称为 Kohonen 网络,可以被认为是一个双层神经网络,其中每个输出层是一个二维网格,以行和列的形式排列,每个神经元都完全连接到输入层。

像神经网络一样,权重最初是使用随机值生成的。该流程有三个不同的培训阶段:

  • 竞争阶段:该阶段的神经元基于判别值进行竞争,一般基于神经元权重与输入向量之间的距离;使得两者之间的最小距离决定了输入被分配给哪个神经元。使用欧几里德距离,输入 x i 和网格位置(j,I)】中的神经元之间的距离由w[Ji]:How does it work?给出

  • **Cooperation phase: In this phase, the winning neurons find the best spatial location in the topological neighborhood. The topological neighborhood for the winning neuron I(x) for a given neuron (j, i), at a distance S[ij], neighborhood of size σ, is defined by:How does it work?

    使用一些众所周知的衰减函数,例如指数函数,以随时间减小的方式定义邻域大小,定义如下:

    How does it work?**

  • **Adaptive phase: In this phase, the weights of the winning neuron and its neighborhood neurons are updated. The update to weights is generally done using:How does it work?

    这里,学习率 n(t) 再次被定义为像邻域大小一样的指数衰减。**

使用统一距离矩阵(U-Matrix)的 SOM 可视化创建了神经元与其邻居的权重之间的平均距离的单一度量,然后可以用不同的颜色强度来可视化。这有助于识别邻近的相似的神经元。

优点和局限性

  • SOM 最大的优势是易于理解,使用 U 矩阵可视化对二维数据进行聚类能够非常有效地理解模式。
  • 相似性/距离函数的选择对聚类有很大影响,用户必须仔细选择。
  • SOM 的计算复杂性使得它不可能用于大于几千大小的数据集。

谱聚类

谱聚类是一种基于划分的聚类技术,使用图论作为其基础(参考文献【15】)。它将数据集转换成一个连通图,并进行图划分以找到聚类。这是图像处理、运动检测和一些基于非结构化数据的领域中的一种流行方法。

输入和输出

谱聚类中仅使用数字特征。为了获得最佳性能,必须正确定义模型参数,如选择内核、内核参数、要选择的特征值数量以及 k-Means 等分区算法。

它是如何工作的?

以下步骤描述了如何在实践中使用该技术:

  1. 给定数据点,使用诸如高斯核的平滑核函数计算相似性(或邻接性)矩阵:对于较近的点,How does it work?和较远的点,How does it work?

  2. **The next step is to compute the graph Laplacian matrix using various methods of normalizations. All Laplacian matrix methods use the diagonal degree matrix D, which measures degree at each node in the graph:How does it work?

    一个简单的拉普拉斯矩阵是 L = D(度矩阵)–A(亲和矩阵)。**

  3. 从特征值问题或广义特征值问题计算前 k 个特征值。

  4. 使用诸如 k-Means 之类的划分算法来进一步分离 k 维子空间中的聚类。

优点和局限性

  • 当簇形状或大小不规则且不凸时,谱聚类非常有效。谱聚类有太多的参数选择,调整以获得好的结果是一项相当复杂的任务。
  • 理论上,谱聚类已经被证明在存在噪声数据的情况下更加稳定。当聚类没有很好地分开时,谱聚类具有良好的性能。

亲和繁殖

相似性传播可以被视为 K-medoids 方法的扩展,因为它与从数据中挑选样本的相似性(参考文献【16】)。相似性传播使用具有距离或相似性矩阵的图,并挑选训练数据中的所有示例作为样本。作为数据点之间的相似性的迭代消息传递自动检测集群、样本,甚至数量的集群。

输入和输出

通常,除了最大迭代次数之外,不需要输入参数,这对于大多数算法来说是常见的。

它是如何工作的?

两种类型的消息在数据点之间交换,我们将首先解释:

  • **Responsibility r(i,k): This is a message from the data point to the candidate exemplar. This gives a metric of how well the exemplar is suited for that data point compared to other exemplars. The rules for updating the responsibility are as follows: How does it work? where s(i, k) = similarity between two data points i and k.

    a(i,k) =样本 k 对于 i 的可用性。**

  • **可用性 a(i,k) :这是从候选样本到数据点的消息。考虑到计算中的其他数据点,这给出了指示样本对数据点的支持有多好的度量。这可以被视为软集群分配。可用性更新规则如下:How does it work?How does it work?How does it work?

    图 4:相似性传播中使用的消息类型**

该算法可以总结如下:

  1. 初始化How does it work?

  2. 对于所有增量 in:How does it work?How does it work?How does it work?

  3. 结束。

  4. **对于所有的 x [i] 使得 (r(i,i) + a(i,I)>0)

    1. x[I]为典范。
    2. 使用相似性度量 s(i,j) 将所有非样本 x [j] 分配给最接近的样本。**
  5. 结束。

优点和局限性

  • 亲和度传播是一种确定性算法。k-means 或 K-medoids 对初始点的选择都很敏感,通过将每个点视为样本来克服这个问题。
  • 不必指定聚类的数量,而是通过该过程自动确定。
  • 它在非度量空间中工作,甚至不需要距离/相似性来具有约束性的属性,如三角形不等式或对称性。这使得该算法可用于各种具有分类和文本数据等的数据集:
  • 该算法由于其更新方式易于并行化,且训练时间快。

聚类验证和评估

聚类验证和评估是确定算法有效性的最重要机制之一(参考文献 [18】)。这些主题可以大致分为两类:

  • 内部评估措施:在这种情况下,这些措施使用某种形式的聚类数据本身的质量,而不涉及任何基础事实。
  • 外部评估措施:在这种情况下,这些措施使用一些外部信息,如已知的基本事实或类别标签。

内部评估措施

内部评估仅使用集群和数据信息来收集关于集群结果好坏的指标。应用程序可能会对度量的选择产生一些影响。一些算法偏向于特定的评估指标。因此,在选择正确的指标、算法和参数时,必须基于这些考虑因素。内部评估措施基于不同的质量,如下所述:

  • 紧密度:使用不同策略测量的聚类的方差用于给出紧密度值;方差越低,聚类越紧密。
  • 分离:星团之间的分离程度如何?

符号

下面是对下面使用的符号的简明解释:具有所有数据元素的数据集= D ,数据元素的数量= n ,每个数据元素的维度或特征=D,整个数据的中心 D = c ,聚类的数量= NCIthcluster =CI 数据个数在第I第簇=nI 中,I第簇=CI,方差在第I第簇=σ(CC[I],两点间距离

R 平方

目标是使用聚类之间的平方和与整个数据的平方和之比来测量聚类之间的差异程度。公式如下所示:

R-Squared

邓恩指数

目标是识别密集且分离良好的星团。该度量由从以下公式获得的最大值给出:

Dunn's Indices

戴维斯-波尔丁指数

目标是识别具有低簇内距离和高簇间距离的簇:

Davies-Bouldin index

剪影索引

目标是测量集群间和集群内距离的成对差异。它还用于通过最大化索引来寻找最佳聚类数。公式由下式给出:

Silhouette's index

这里有Silhouette's indexSilhouette's index

外部评估措施

聚类的外部评估度量与使用来自混淆矩阵的元素或使用来自数据和标签的信息理论度量的分类度量具有相似性。一些最常用的措施如下。

兰德指数

Rand index 使用以下公式衡量聚类算法做出的正确决策:

Rand index

F 值

F-Measure 结合了应用于聚类的精度和召回度量,如下式所示:

F-Measure****F-Measure

这里, n [ij] 是簇 j 中类 i 的数据元素的个数,nj 是簇 j 中的个数,nI 是类 i 中的数据个数。F 值越高,聚类质量越好。

归一化互信息指数

NMI 是应用于聚类的众多基于熵的度量之一。与聚类 C 相关联的熵是关于聚类随机选取数据元素的不确定性的度量。

Normalized mutual information index其中Normalized mutual information index是元素在集群 C i 中被选取的概率

两个集群之间的互信息由下式给出:

Normalized mutual information index

这里的Normalized mutual information index,是该元素被两个集群 CC ^( ' ) 选中的概率。

归一化互信息 ( NMI )有多种形式;一个由下式给出:

Normalized mutual information index**

异常值或异常检测

Grubbs 在 1969 年给出了的定义,“异常值,或异常值,是指明显偏离样本中其他成员的值”。

Hawkins 在 1980 年将异常值或异常定义为“一个与其他观测值偏离如此之大的观测值,以至于让人怀疑它是由不同的机制产生的”。

Barnett 和 Lewis,1994 年将其定义为“与该组数据的其余部分不一致的观察值(或观察值的子集)”。

离群算法

异常值检测技术基于不同的异常值定义方法进行分类。每种方法都根据将数据集中的一些对象与其他对象区分开来的一些属性来定义离群值:

  • 基于统计的:根据选择的分布,这是不可能的
  • 基于距离的:这是根据选择的距离度量和阈值距离内的邻居分数从邻居中隔离出的
  • 基于密度的:这是与其邻居更加孤立,而不是反过来与邻居更加孤立
  • 基于聚类的:这个在相对于其他聚类的孤立的聚类中,或者不是任何聚类的成员
  • 基于高维度的:这是在数据被投影到较低维度之后,或者通过为高维度选择适当的度量标准之后,通过通常的技术得到的异常值

基于统计

使用参数方法进行异常值检测的基于统计的技术假设了一些关于数据分布的知识(参考文献【19】)。根据观察值,估算模型参数。模型中概率低于阈值的数据点被视为异常值。当分布未知或不适合假设时,使用非参数方法。

输入和输出

离群点检测的统计方法适用于实值数据集。在假设多元分布的参数方法的情况下,距离度量的选择可以是用户选择的输入。在使用基于频率的直方图的非参数方法的情况下,使用用户定义的阈值频率。在核密度估计技术中,核方法和带宽的选择也是由用户决定的。基于统计的方法的输出是一个表示异常的分数。

它是如何工作的?

大多数基于统计的异常值检测要么假设一个分布,要么使数据符合一个分布,以概率方式检测从该分布生成的最不可能的数据。这些方法有两个不同的步骤:

  1. 训练步骤:在这里,对模型进行估计以拟合数据
  2. 测试步骤:在每个实例上,基于模型和特定实例执行拟合优度,产生分数和离群值

基于参数的方法假设一个分布模型,如多元高斯模型,训练通常涉及使用诸如最大似然估计 ( MLE 等技术来估计均值和方差。测试通常包括技术,如均值方差或箱线图测试,伴随着假设,如“如果超出三个标准差,则异常值”。

正态多元分布可以估计为:

How does it work?

用平均值和协方差ʃ.

Mahalanobis 距离可以是由等式How does it work?给出的分布中的数据点的估计值。当马氏距离受到异常值影响时,还会使用一些变量,如最小协变行列式 ( MCD )。

非参数方法包括使用基于频率或宽度的方法为每个特征构建直方图等技术。当柱中的数据与直方图上的平均值的比率低于用户定义的阈值时,这样的柱被称为稀疏的。特征概率越低,异常值得分越高。总异常值分数可以计算为:

How does it work?

这里, w [f] 是赋予特征 fp [f] 是该特征在测试数据点的值的概率, F 是特征集的权重之和。内核密度估计也用于使用用户定义内核和带宽的非参数方法。

优点和局限性

  • 当模型拟合或数据分布已知时,这些方法非常有效,因为您不必存储整个数据,只需存储进行测试的关键统计数据。
  • 然而,分布的假设在参数方法中会引起一个大问题。大多数使用核密度估计的非参数方法不能很好地适应大型数据集。

基于距离的方法

基于距离的算法在一般的假设下工作,即正常数据有其他更接近它的数据点,而异常数据与其邻居很好地隔离开(参考文献【20】)。

输入和输出

基于距离的技术要求将原生数字或分类特征转换为数值。基于距离的方法的输入是所使用的距离度量(距离阈值ϵ)和π(阈值分数),它们共同确定一个点是否为异常值。对于 KNN 方法,选择 k 是一个输入。

它是如何工作的?

基于距离的异常值有许多变体,我们将在较高层次上讨论每种变体的工作原理:

  • DB ( ϵ ,π )算法:给定半径 ϵ 和阈值π,如果π百分比的点到该点的距离小于 ϵ ,则该数据点被认为是离群点。关于如何完成计算,还有使用嵌套循环结构、基于网格的结构和基于索引的结构的进一步变体。
  • 基于 KNN 的方法也很常见,通过 KNN 点到点的距离或 {1NN,2NN,3NN…KNN} 点到点的平均距离来计算异常值。

优点和局限性

  • 基于距离的算法的主要优势在于它们是非参数化的,并且不对分布以及如何拟合模型做出假设。
  • 距离计算非常简单,并且是并行计算的,有助于算法在大型数据集上扩展。
  • 基于距离的方法的主要问题是第一章中讨论的维数灾难;对于高维数据,稀疏性会导致噪声异常。

基于密度的方法

基于密度的方法扩展了基于距离的方法,不仅测量给定点的局部密度,还测量其邻域点的局部密度。因此,添加的相对因子使其在寻找更复杂的局部或全局异常值时具有优势,但增加了计算成本。

输入和输出

必须向基于密度的算法提供输入半径 ϵ 附近的最小点数 MinPts ,该输入半径以确定其为集群中核心对象的对象为中心。

它是如何工作的?

我们将首先讨论Loca离群因子 ( LOF )方法然后讨论 LOF【21】的一些变种。

给定参数 MinPts ,数据点的 LOF 为:

How does it work?

这里|N*[min pts]**(p)|是点 p 邻域内的数据点个数,lrd[min pts]*是该点的局部可达性密度,定义为:

How does it work?

这里How does it work?是点的可达性,定义为:

How does it work?

LOF 的缺点之一是可能会遗漏邻域密度接近其邻域密度的异常值。使用基于集合的最近路径和源自数据点的基于集合的最近轨迹的基于连通性的离群点 ( COF )用于改进 LOF。COF 将低密度区域与孤立区域区别对待,克服了 LOF 的缺点:

How does it work?

LOF 的另一个缺点是,当集群处于不同的密度并且没有被分离时,LOF 将产生与直觉相反的分数。克服这一点的一个方法是使用 KNNs 及其反向 KNNs 或 RNNs 来使用点的影响空间 ( )。rnn 将给定的点作为它们的 K 个最近邻居之一。点的异常值称为受影响的异常值或流入值,由下式给出:

How does it work?

这里, den ( p )是 p 的局部密度:

How does it work?

图 5:基于密度的异常值检测方法特别适合于发现局部和全局异常值

优点和局限性

  • 已经证明基于密度的方法比基于距离的方法更有效。
  • 基于密度的离群点检测具有高计算成本,并且通常可解释性差。

基于聚类的方法

有些人认为,聚类技术的目标是找到位于一起的数据点组,在某种意义上,这与异常或离群点检测问题是对立的。然而,作为一种高级的无监督学习技术,聚类分析提供了几种方法来发现感兴趣的聚类组,这些聚类组要么远离其他聚类,要么根本不在任何聚类中。

输入和输出

如前所述,聚类技术可以很好地处理实值数据,尽管一些分类值被转换为数值是可以接受的。在 k-均值和 k-中面的情况下,输入值包括聚类数量 k 和距离度量。变体可能需要阈值分数来识别异常组。对于使用 EM 的高斯混合模型,混合成分的数量必须由用户提供。使用 CBLOF 时,需要两个用户定义的参数:小集群的大小和大集群的大小。根据所使用的算法,单个或多组对象被输出为异常值。

它是如何工作的?

正如我们在聚类一节中所讨论的,聚类方法有多种类型,我们将给出几个例子来说明聚类算法是如何扩展到离群点检测的。

k-Means 或 k-Medoids 及其变体通常将数据元素聚集在一起,并受到异常值或噪声的影响。不是通过移除或转换来预处理这些数据点,而是将削弱聚类“紧密度”的这些点视为异常值。通常,异常值是通过两步过程发现的,首先运行聚类算法,然后评估某种形式的异常值分数,该分数用于测量点到质心的距离。此外,许多变体将小于阈值的聚类视为异常组。

使用期望最大化** ( EM )的高斯混合建模** ( GMM )是另一种众所周知的基于聚类的离群点检测技术,其中具有属于聚类的低概率的数据点成为离群点,离群点分数成为 EM 概率输出分数的倒数。

基于聚类的局部异常值因子 ( CBLOF )使用两阶段过程来发现异常值。首先,一个聚类算法将数据划分成不同大小的簇。使用两个用户定义的参数,大簇的大小和小簇的大小,形成两组簇:

How does it work?

优点和局限性

  • 鉴于基于聚类的技术已经被很好地理解,结果更容易解释,并且有更多的工具可用于这些技术。
  • 许多聚类算法仅检测聚类,并且与给出分数或等级或以其他方式识别离群值的离群值算法相比,在无监督技术中效率较低。

基于高维度的方法

基于距离、密度甚至聚类的方法的一个关键问题是维数灾难。随着维度的增加,距离之间的对比变小,邻域的概念变得不那么有意义。在这种情况下,正常点看起来像异常值,假阳性会大量增加。我们将讨论解决这个问题的一些最新方法。

输入和输出

将数据投影到低维子空间的算法可以很好地处理缺失数据。在这些技术中,比如 SOD、 ϕ ,每个维度中的范围数成为一个输入(引用 25】)。当使用进化算法时,具有最低稀疏系数的单元的数量是算法的另一个输入参数。

它是如何工作的?

解决高维离群值问题的总体思路是:

  • 或者将稳健的距离度量与所有先前的技术相结合,以便可以在整个维度上识别异常值
  • 或者将数据投影到更小的子空间上,并在更小的子空间中找到离群值

基于角度的离群度 ( ABOD )方法使用的基本假设是,如果高维度中的数据点是离群点,那么从该点出发朝向最接近它的数据点的所有向量将处于或多或少相同的方向。

![How does it work?图 6:区分离群值和内嵌值的 ABOD 方法给定一点 p ,以及任意两点 xy ,这两点与 p 之间的角度由下式给出:How does it work?

用作 ABOD 分数的方差度量由下式给出:

How does it work?

ABOD 值越小,角度谱中的方差度量就越小,该点成为异常值的几率就越大。

另一种在高维数据中非常有用的方法是使用子空间离群点检测 ( SOD )方法(参考文献【23】)。想法是划分高维度空间,使得在每个 d 维度中有相等数量的范围,比如说 ϕ 。然后,通过在每个 d 维度中选取一个范围而形成的单元 C 的稀疏系数被测量如下:

How does it work?

这里, n 是数据点的总数, N(C) 是单元格 C 中的数据点数。通常,位于具有负稀疏系数的单元中的数据点被认为是异常值。

优点和局限性

  • ABOD 方法对于数据点的数量是O(n3T5),对于较大的数据集变得不切实际。
  • 子空间中的稀疏系数方法需要在低维中进行有效的搜索,并且该问题变得 NP 困难,并且采用了某种形式的基于进化或启发式的搜索。
  • 稀疏系数法是 NP 难的,会导致局部最优。

一等 SVM

在许多领域中,有一个特定的感兴趣的类或类别,其他的并不重要。围绕这个兴趣类别找到一个边界是一类 SVM 背后的基本思想(参考文献【26】)。基本假设是正类(感兴趣的类)的所有点聚集在一起,而其他类元素分散在周围,并且我们可以在聚集的实例周围找到紧密的超球体。SVM 在二元分类中有很好的理论基础和应用,它被转化为求解一类 SVM。下图说明了如何通过使用具有松弛度的一类 SVM 来简化非线性边界,从而避免过度拟合复杂函数:

One-class SVM

图 7:非线性边界的一类 SVM

输入和输出

数据输入通常是数字特征。许多支持向量机可以采用名义特征,并对其应用二进制变换。还需要:标记感兴趣的类别、SVM 超参数,例如核选择、核参数和成本参数等。输出是一个 SVM 模型,可以预测实例是否属于感兴趣的类。这不同于我们之前看到的评分模型。

它是如何工作的?

输入是训练实例{ x [1] ,x[2]…x[n]}其中某些实例标记为在+1 班,其余为-1 班。

SVM 的输入还需要一个内核,该内核使用以下公式进行从输入空间到特征空间的变换 ϕ :

How does it work?

使用 SVM 公式创建一个限制类的超球体:

How does it work?

使得How does it work? + How does it work?How does it work?

R 是具有中心 c的超球体的半径,ν ∈ (0,1)表示离群数据部分的上界。

正如在正常 SVM 中,我们使用二次规划进行优化,以获得作为决策边界的解。

优点和局限性

  • 使用一类 SVM 的关键优势是在误差和泛化能力上有许多理论保证,二进制 SVM 也是如此。
  • 高维数据可以很容易地映射到一类 SVM 中。
  • 带核的非线性 SVM 甚至可以找到非球形形状来限制数据簇。
  • 随着数据量的增加,空间和内存方面的训练成本也会增加。
  • 参数调整,尤其是核参数和带有未标记数据的代价参数调整是一个很大的挑战。

离群值评估技术

根据标签、排名和得分来衡量异常值是一个活跃的研究领域。当标签或基本事实已知时,评估的想法变得容易得多,因为离群值类是已知的,并且可以采用标准度量。但是,当地面真相未知时,评估和验证方法是非常主观的,没有明确定义的,严格的统计过程。

监督评估

在已知基本事实的情况下,离群值算法的评估基本上是为离群值得分(基于得分的离群值)寻找最佳阈值的任务。

减少假阳性和提高真阳性之间的平衡是关键概念,精确召回曲线(在第二章、现实世界监督学习实用方法中描述)用于找到最佳阈值。在监督学习中使用置信度得分、预测和实际标签来绘制 pr 曲线,并且在这里对异常值得分进行排序并使用,而不是置信度得分。ROC 曲线和曲线下面积也在许多应用中用于评估阈值。当已知基本事实时,也可以使用曲线下面积度量来比较两种或更多种算法并选择最佳算法。

无监督评估

在大多数真实世界的案例中,了解基本事实是非常困难的,至少在建模任务中是如此。Hawkins 在很高的层次上描述了这种情况下的评估方法,即“包含异常值的样本将显示出这样的特征,如‘外围’和‘内部’观察值之间的巨大差距,以及异常值和内部组之间的偏差,如在一些适当的标准化尺度上测量的那样”。

当基本事实未知时,用于评估异常值的一般技术是:

  • 异常值得分直方图:一种基于可视化的方法,其中异常值得分被分组到预定义的箱中,用户可以根据异常值计数、得分和阈值来选择阈值。
  • 分数归一化和距离函数:在这种技术中,进行某种形式的归一化,以确保所有产生分数的异常值算法具有相同的范围。使用某种形式的基于距离或相似性或相关性的方法来发现不同算法中异常值的共性。这里的一般直觉是:将数据点加权为异常值的算法越多,该点实际上是异常值的概率就越高。

真实案例研究

在这里,我们展示了一个案例研究,说明了如何在现实世界中使用开源 Java 框架和一个众所周知的图像数据集来应用本章中描述的聚类和离群点技术。

工具和软件

我们将介绍两个在本章的实验中使用的新工具:SMILE 和 Elki。SMILE 有一个 Java API,用于说明使用 PCA、随机投影和 IsoMap 的特征约简。随后,Elki 的图形界面被用来执行无监督学习——具体来说,就是聚类和离群点检测。Elki 提供了一套丰富的聚类分析和离群点检测算法,包括大量模型评估器供选择。

注意

点击haifengl.github.io/smile/了解更多关于 SMILE 的信息,并访问elki.dbs.ifi.lmu.de/了解更多关于 Elki 的信息。

商业问题

字符识别是许多业务领域都会遇到的问题,例如,医疗报告和医院图表的翻译、邮政服务中的邮政编码识别、零售银行中的支票存款服务等等。人的笔迹可能因人而异。这里,我们只看手写数字,0 到 9。这个问题变得有趣是因为在某些数字组中的逼真度,例如 1/2/7 和 6/9/0。在本章的实验中,我们使用聚类和异常值分析,使用几种不同的算法来说明这些方法的相对优势和劣势。鉴于这些技术在数据挖掘应用中的广泛使用,我们的主要焦点是获得对数据、算法和评估方法的洞察;我们不应用模型来预测测试数据。

机器学习映射

正如本章标题所暗示的,我们的实验旨在通过忽略识别数据集中数字的标签来演示无监督学习。从数据集学习后,聚类和异常值分析可以产生描述数据模式的宝贵信息,并且通常用于探索这些模式和数据中的相互关系,而不仅仅是预测看不见的数据的类别。在这里描述的实验中,我们关心的是描述和探索,而不是预测。当外部评估措施可用时,使用标签,正如在这些实验中一样。

数据收集

这是已经为我们做好的。关于如何收集数据的细节,见:http://yann.lecun.com/exdb/mnist/MNIST 数据库。

数据质量分析

数据点中的每个特征是 784 个像素之一的灰度值。因此,所有特征的类型都是数字的;除了 class 属性之外,没有其他的分类类型,class 属性是一个范围在 0-9 之间的数字。此外,数据集中没有缺失的数据元素。下面是一个表格,其中包含一些像素的基本统计数据。图像在 28 x 28 框中预先居中,因此在大多数示例中,沿着框边界的数据为零:

|

特征

|

平均的

|

标准发展

|

福建话

|

最大

像素 300 94.25883 One hundred and nine point one one seven Zero Two hundred and fifty-five
像素 301 Seventy-two point seven seven eight 103.0266 Zero Two hundred and fifty-five
像素 302 49.06167 90.68359 Zero Two hundred and fifty-five
pixel303 28.0685 70.38963 Zero Two hundred and fifty-five
像素 304 12.84683 49.01016 Zero Two hundred and fifty-five
像素 305 4.0885 27.21033 Zero Two hundred and fifty-five
像素 306 One point one four seven 14.44462 Zero Two hundred and fifty-four
像素 307 0.201667 6.225763 Zero Two hundred and fifty-four
像素 308 Zero Zero Zero Zero
像素 309 0.009167 0.710047 Zero Fifty-five
像素 310 0.102667 4.060198 Zero Two hundred and thirty-seven

表 1:预处理前原始数据集中的特征汇总

混合国家标准与技术研究所 ( MNIST )数据集是一个广泛用于评估无监督学习方法的数据集。选择 MNIST 数据集主要是因为高维数据中的聚类没有很好地分离。

原始 MNIST 数据集包含来自 NIST 的黑白影像。它们被标准化以适合 20×20 像素的盒子,同时保持纵横比。通过计算质心并将其平移到 28×28 维网格的中心,图像在 28×28 图像中居中。

基于强度,每个像素在 0 到 255 的范围内。784 个像素值变平,成为每个图像的高维特征集。下图描绘了数据中的样本数字 3,它映射到网格,其中每个像素都有一个从 0 到 255 的整数值。

本节描述的实验旨在展示无监督学习技术在众所周知的数据集上的应用。正如在第二章、中所做的那样,现实世界监督学习的实用方法使用监督学习技术,使用几种聚类和异常值方法进行了多次实验。对于每种选择的方法,给出了具有和不具有特征减少的实验结果,随后是结果的分析。

数据采样和转换

由于我们的重点是使用各种无监督技术探索数据集,而不是预测方面,所以我们在这里不关心训练、验证和测试样本。相反,我们使用整个数据集来训练模型以执行聚类分析。

在异常值检测的情况下,我们只创建两类数据的缩减样本,即 1 和 7。选择具有两个相似形状数字的数据集是为了建立一个问题空间,在这个空间中,各种异常检测技术的辨别能力将更加突出。

特征分析和降维

我们使用 SMILE 机器学习工具包的 Java API 演示了不同的特征分析和降维方法——PCA、随机投影和 IsoMap。

Feature analysis and dimensionality reduction

图 8:显示了数字 3,其像素值分布在 28×28 的矩阵中,范围从 0 到 254。

这里给出了加载数据集的代码和读取值的代码以及行内注释:

//parser to parse the tab delimited file
DelimitedTextParser parser = new DelimitedTextParser();parser.setDelimiter("[\t]+");
//parse the file from the location
parser.parse("mnistData", new File(fileLocation);
//the header data file has column names to map
parser.setColumnNames(true);
//the class attribute or the response variable index
AttributeDataSet dataset = parser.setResponseIndex(new NominalAttribute("class"), 784);

//convert the data into two-dimensional array for using various techniques 
double[][] data = dataset.toArray(new double[dataset.size()][]);

五氯苯甲醚

下面的片段说明了使用支持 PCA 的 API 实现的维度缩减:

//perform PCA with double data and using covariance //matrix
PCA pca = new PCA(data, true);
//set the projection dimension as two (for plotting here)
pca.setProjection(2);
//get the new projected data in the dimension
double[][] y = pca.project(data);

PCA

图 9:MNIST 上的主成分分析——在左边,我们看到超过 90%的数据差异是由不到一半的原始特征数量造成的;右边是使用前两个主成分的数据表示。

表 PCA 后 11 个随机特征集合的总结

PCA 计算将特征的数量减少到 274。在下表中,您可以看到随机选择的一组功能的基本统计数据。作为 PCA 的一部分,特征数据已被标准化:

|

特征

|

平均的

|

标准发展

|

福建话

|

最大

one Zero 2.982922 -35.0821 19.73339
Two Zero 2.415088 -32.6218 31.63361
three Zero 2.165878 -21.4073 16.50271
four Zero 1.78834 -27.537 31.52653
five Zero 1.652688 -21.4661 22.62837
six Zero 1.231167 -15.157 10.19708
seven Zero 0.861705 -6.04737 7.220233
eight Zero 0.631403 -6.80167 3.633182
nine Zero 0.606252 -5.46206 4.118598
Ten Zero 0.578355 -4.21456 3.621186
Eleven Zero 0.528816 -3.48564 3.896156

表 PCA 后 11 个随机特征集合的总结

随机预测

这里,我们展示了使用随机投影执行数据转换的 API 的简单用法:

//random projection done on the data with projection in //2 dimension
RandomProjection rp = new RandomProjection(data.length, 2, false);
//get the transformed data for plotting
double[][] projectedData = rp.project(data);

Random projections

图 10:使用 Smile API 的二维 PCA 和随机投影表示

ISOMAP

这段代码片段展示了如何使用 API 进行 Isomap 转换:

//perform isomap transformation of data, here in 2 //dimensions with k=10
IsoMap isomap = new IsoMap(data, 2, 10);
//get the transformed data back
double[][] y = isomap.getCoordinates();

ISOMAP

图 11:IsoMap——使用 Smile API 的二维表示,k = 10

对特征分析和降维的观察

我们可以从图中所示的结果中得出以下观察结果:

  • PCA 方差和维数图清楚地表明,大约 100 个线性组合的特征在数据中具有与 784 个原始特征相似的表示或方差(> 95%)。这是任何非监督特征约简分析的关键第一步。
  • 即使是二维的 PCA,而不是前面描述的 100,在散点图可视化中也显示了一些非常好的见解。很明显,数字 2、8 和 4 彼此之间有很好的区别,这是有意义的,因为它们彼此之间写得很清楚。低维空间中的数字如{1,7}、{3,0,5}和{1,9}要么重叠,要么紧密聚集。这表明仅用两个特征是不可能有效区分的。它还表明,这些类别之间的特性或特征存在重叠。
  • 下一张图比较了 PCA 和随机投影,两者都是在较低的 2 维中完成的,显示了输出之间有许多共同之处。如前所述,两者对不同类别具有相似的分离。有趣的是,PCA 在分离数字{8,9,4}方面比随机投影做得更好。
  • 下一个图 Isomap 显示了良好的区分度,类似于 PCA。主观上,它似乎比随机预测更好地分离了数据。例如,视觉上,{3,0,5}在 Isomap 中比在 PCA 中更容易分离。

聚类模型、结果和评估

使用 MNIST-6000 数据集进行了两组实验。数据集由 6000 个例子组成,每个例子都用 28 x 28 平方像素的灰度值表示一个手写数字。

首先,我们运行一些聚类技术来识别 10 组数字。对于案例研究的这一部分的实验,我们使用软件 Elki。

在第一组实验中,没有涉及特征缩减。使用所有 28×28 像素。使用了聚类技术,包括 k-Means、EM(对角高斯模型工厂)、DBSCAN、Hierarchical (HDBSCAN 层次提取)以及相似性传播。在每种情况下,我们都使用来自两个内部评估者的指标:Davies Bouldin 和 Silhouette,以及几个外部评估者:Precision、Recall、F1 measure 和 Rand Index。

Clustering models, results, and evaluation

图 12:K-Means——使用误差平方和(SSE)来寻找最优的 k ,即聚类数。曲线中通常用于选择最佳 k 值的弯头在图中不是特别可检测的。

在 k 均值的案例中,我们使用 k 值的范围进行了几次运行。图显示误差平方和(SSE)指标随着 k 的增加而减少。

该表显示了 k=10 的结果,每个结果的等级在括号中:

|

算法

|

轮廓

|

戴维斯-波尔丁指数

|

精确

|

回忆

|

子一代

|

兰特

k-表示劳埃德 +-0.09 0.0737 (1) 2.8489 (3) 0.4463 (3) 0.47843 (3) 0.4618 (1) 0.8881 (3)
对角高斯模型工厂 圆盘烤饼 0 (1) 0.1002 (6) 1 (1) 0.1822 (4) 0.1003 (5)
基于密度的噪声应用空间聚类 0 (4) 0 (1) 0.1003 (5) 1 (1) 0.1823 (3) 0.1003 (5)
分级(HDBSCAN 分级提取) +-0.05 0.0435 (3) 2.7294 0.1632 (4) 0.9151 (2) 0.2770 (2) 0.5211 (4)
分层(简化的层次提取) 圆盘烤饼 0 (1) 1 (1) 0.0017 (5) 0.0033 (6) 0.8999 (2)
亲和传播 +-0.07 0.04690 (2) 1.7872 (2) 0.8279 (2) 0.0281 (4) 0.0543 (5) 0.9019 (1)

表 3。MNIST 数据聚类算法评估

在第二次聚类实验中,首先使用 PCA 对数据集进行预处理,并且使用与第一次实验中相同的算法来使用每个示例具有 273 个特征的结果数据。结果如表所示:

|

算法

|

轮廓

|

戴维斯-波尔丁指数

|

精确

|

回忆

|

子一代

|

兰特

k-表示劳埃德 +-0.14 0.0119 3.1830 0.3456 0.4418 0.3878 (1) 0.8601
对角高斯模型工厂 +-0.16 -0.0402 3.5429 0.1808 0.3670 0.2422 0.7697
基于密度的噪声应用空间聚类 +-0.13 -0.0351 1.3236 0.1078 0.9395 (1) 0.1934 0.2143
分级(HDBSCAN 分级提取) +-0.05 0.7920 (1) 0.0968 0.1003 0.9996 0.1823 0.1005
亲和传播 +-0.09 0.0575 1.6296 0.6130 (1) 0.0311 0.0592 0.9009 (1)
子空间 +-0.00 0.0 0 (1) 0.1003 one 0.1823 0.1003

表 4。PCA 后 MNIST 数据聚类算法的评价

观察和聚类分析

如表 2.1 和 2.2 所示的,使用不同的评估方法对聚类章节中讨论的不同算法进行了比较。

通常,根据技术、领域和业务需求比较不同的内部和外部度量是非常重要的。当标签或结果在数据集中可用时,使用外部测量成为更容易的选择。当标记数据不可用时,规范是使用内部度量,每个内部度量都有一些排名,并查看所有度量的比较排名。重要且通常有趣的观察是在这个阶段进行的:

  • 使用诸如误差平方和的度量来评估具有变化 k (如图所示)的 k-Means 的性能,是查看集群数量的“最优性”的基本步骤。该图清楚地显示,随着 k 的增加,分数随着聚类分离的改善而提高。

  • 当我们分析表 2.1 时,其中使用了所有 784 个特征,并且示出了不同算法的所有评估测量,一些关键的事情突出出来:

    • k-均值和相似性传播都分别在标准偏差和平均值方面示出了轮廓指数中的大的重叠(k-均值+-0.09±0.0737;亲和繁殖±0.07±0.04690)。因此,很难用这个标准来分析它们。
    • 在 DB 指数(极小为好)、Rand 指数(接近 1 为好)等度量中,我们看到亲和传播和层次聚类表现出非常好的结果。
    • 在考虑标签的度量中,层次聚类、DBSCAN 和 EM 具有高精度或高召回率,因此 F1 度量较低。当考虑精确度和召回率时,k-Means 给出最高的 F1 度量。
  • 在表 2.2 中,具有 273 个特征的数据集(使用 PCA 减少,保留 95%的方差)通过相同的算法运行,并通过相同的测量进行评估,我们得出以下有趣的观察结果:

通过减少特征,对某些算法的每个测量都有负面影响;例如,k-Means 的所有度量都降级。当使用简化的特征时,诸如相似性传播的算法具有非常低的影响,并且在某些情况下甚至是积极的影响。当与使用所有特征的结果相比较时,AP 显示出相似的 Rand 指数和 F1,更好的回忆、DB 指数和轮廓测量,以及精度的小变化,证明了明显的鲁棒性。

分层的聚类在更好的 DB 指数和 Rand 指数以及 Rand 指数中接近 AP 的分数方面显示了与之前类似的结果。

异常模型、结果和评估

对于异常值检测技术,我们使用了包含数字 1 的所有示例和数字 7 示例的欠采样子集的原始数据集的子集。想法是两个数字形状的相似性将导致数字 7 的例子被发现是异常值。

使用的模型选自角度、基于距离、聚类、LOF 和一类 SVM。

评估中使用的异常值指标是 ROC AUC、平均精度、R 精度和最大 F1 值。

下表显示了获得的结果,括号中为等级:

|

算法

|

ROC AUC

|

平均值。精确

|

r 精度

|

最大 F1

棱角分明(ABOD) 0.9515 (3) 0.1908 (4) 0.24 (4) 0.3298 (4)
基于距离(KNN 异常值) 0.9863 (1) 0.4312 (3) 0.4533 (3) 0.4545 (3)
基于距离(局部隔离系数) 0.9863 (1) 0.4312 (3) 0.4533 (3) 0.4545 (3)
聚类(EM 异常值) 0.5 (5) 0.97823827 (1) 0.989 (1) 0.9945 (1)
力线 0.4577 (6) 0.0499 (6) 0.08 (6) 0.0934 (6)
LOF(阿洛基) 0.5 (5) 0.0110 (7) 0.0110 (7) 0.0218 (7)
LOF (COF) 0.4577 (6) 0.0499 (6) 0.08 (6) 0.0934 (6)
一级 SVM (RBF) 0.9820 (2) 0.5637 (2) 0.5333 (2) 0.5697 (2)
一级 SVM(线性) 0.8298 (4) 0.1137 (5) 0.16 (5) 0.1770 (5)

表 5 异常值分析算法的评价指标

观察和分析

在中,正如我们评估不同的聚类方法一样,我们使用了几个观察值来比较一些离群值算法。同样,正确的方法是根据所有指标的排名来判断一个算法,然后与其他算法相比,全面了解它的表现。这里使用的异常值度量都是用于比较异常值算法的标准外部度量:

  • 有趣的是,使用正确的参数,即 k=2 ,EM 可以找到正确的分布,并比大多数更有效地发现异常值。它排名很高,在包括最大 F1、R-Precision 和 Avg 在内的重要指标中名列第一。精准。
  • 具有非线性 RBF 核的 1 类 SVM 在大多数指标上表现一致,即在 ROC 面积、R-Precision 和 Avg 方面排名第二。精度和最大 F1。线性 SVM(在大多数排名中排名第五)和 1 级 SVM(排名第二)之间的差异表明,该问题实际上是非线性的。一般来说,当维数很高(784),离群值是非线性的和罕见的,1 类核 SVM 做得很好。
  • 基于局部异常值的技术(LOF 和它的变体)在几乎所有的测量中一直排名靠后。这使我们认识到异常值问题可能不是局部的,而是全球性的。基于距离的算法(KNN 和局部隔离)在曲线下的 ROC 区域中表现最佳,并且优于基于局部异常值的算法,即使使用基于距离的度量给出了问题确实是全局的并且适合于基于距离的测量的洞察。

表 1:预处理前原始数据集中的要素汇总

总结

监督和非监督学习方法都有共同的关注点,即随着数据规模的增长,噪声数据、高维度以及对内存和时间的需求。由于缺乏基础事实,无监督学习特有的其他问题是与模型评估中的主观性及其可解释性、聚类边界的影响等相关的问题。

特征约简是一个重要的预处理步骤,除了呈现其他优点之外,还减轻了可伸缩性问题。线性方法,如主成分分析、随机投影和 MDS,每一种都有特定的优势和局限性,我们必须了解每种方法固有的假设。非线性特征约简方法包括 KPCA 和流形学习。

在聚类算法中,k-Means 是一种基于质心的技术,通过选择聚类数来初始化,它对质心的初始选择很敏感。DBSCAN 是一种基于密度的算法,它不需要用聚类数初始化,并且对噪声和离群点具有鲁棒性。基于概率的技术包括均值漂移和 EM/GMM,均值漂移是确定性的,对噪声具有鲁棒性,EM/对所有类型的特征都表现良好。均值漂移和 EM/GMM 都有可扩展性问题。

层次聚类是一种强大的方法,涉及构建二叉树,该二叉树迭代地将数据点分组,直到达到相似性阈值。对噪声的容忍度取决于所使用的相似性度量。SOM 是一个两层神经网络,允许在二维网格中可视化聚类。谱聚类将数据集视为一个连通图,并通过图划分来识别聚类。相似性传播是另一种基于图的技术,它使用数据点之间的消息传递作为相似性来检测聚类。

聚类算法的有效性和有用性是使用各种验证和评估措施来证明的。内部措施无法获得基本事实;当标签可用时,可以使用外部测量。内部测量的例子是剪影指数和戴维斯-波尔丁指数。Rand 指数和 F-measure 是外部评价指标。

离群点和异常检测是无监督学习的一个重要领域。技术分为基于统计的、基于距离的、基于密度的、基于聚类的、基于高维的和一类 SVM。离群值评估技术包括监督评估和非监督评估,前者是已知的,后者是未知的。

使用 SMILE Java API 和 Elki toolkit 的实验说明了在 MNIST6000 手写数字数据集上各种聚类和离群点检测技术的使用。介绍并比较了不同评估技术的结果。

参考文献

  1. K.皮尔逊(1901 年)。在最接近空间点系统的直线和平面上。哲学杂志,2:559–572。
  2. A.d .回溯(1997 年)。"独立成分分析首次应用于从股票收益中提取结构,《神经系统》,第 8 卷,第 4 期,第 473–484 页。
  3. 给我小费,主教厘米(1999 年)。概率主成分分析。皇家统计学会杂志,B 辑,61(3):611–622。10.1111/1467-9868.00196
  4. 桑乔伊·达斯古普塔(2000 年)。随机投影实验。《第十六届人工智能不确定性会议论文集》(UAI'00),Craig Boutilier 和 moisés goldzmidt(编辑。).摩根考夫曼出版公司,美国加利福尼亚州旧金山,143-151。
  5. T.考克斯和 m .考克斯(2001)。多维缩放。查普曼音乐厅,博卡拉顿,第二版。
  6. 伯恩哈德·朔尔科普夫、亚历山大·j·斯莫拉和克劳斯·罗伯特·穆勒(1999 年)。核主成分分析。《核心方法的进展》,麻省理工学院出版社,麻省剑桥,美国 327-352 页。
  7. 特南鲍姆;德席尔瓦五世;和兰福德,J . C .(2000 年)。非线性降维的全局几何框架。科学。第 290 卷,第 5500 期,第 2319-2323 页
  8. 米(meter 的缩写))Belkin 和 P. Niyogi (2003)。用于降维和数据表示的拉普拉斯特征图。神经计算,15(6):1373–1396。
  9. 南 Roweis 和 L. Saul (2000 年)。通过局部线性嵌入进行非线性降维。科学,290:2323–2326。
  10. 哈迪根,j .和黄,M .(1979)。算法 AS136:一种 k 均值聚类算法。应用统计学,28,100-108。
  11. Dorin Comaniciu 和 Peter Meer (2002 年)。均值漂移:一种稳健的特征空间分析方法。IEEE 模式分析与机器智能汇刊第 603-619 页。
  12. 等级聚类 Jain,a .和 Dubes,R .(1988 年)。聚类数据的算法。新泽西州恩格尔伍德悬崖普伦蒂斯霍尔。
  13. 麦克拉克伦和巴斯福德(1988 年)。混合模型:推理及其在聚类中的应用。纽约州纽约市 Marcel Dekker
  14. 1996 年 5 月至 12 月,北京大学出版社出版。一种基于密度的算法,用于在带有噪声的大型空间数据库中发现聚类。俄勒冈州波特兰市 226-231 号第二届^和美国计算机学会会议录。
  15. Y.Ng、M. I. Jordan 和 Y. Weiss (2001 年)。关于谱聚类:分析和算法,神经信息处理系统进展。麻省理工学院出版社,第 849-856 页。
  16. 德尔伯特·杜克和布伦丹·j·弗雷(2007)。用于无监督图像分类的非度量相似性传播。在 IEEE Int。糖膏剂计算机视觉(ICCV),第 1-8 页。
  17. Teuvo Kohonen (2001 年)。自组织映射。斯普林格,柏林,海德堡。1995.第三,加长版。
  18. 米(meter 的缩写))Halkidi、Y. Batistakis 和 M. Vazirgiannis (2001 年)。关于聚类验证技术,J. Intell。Inf。系统。,第 17 卷,第 107-145 页。
  19. 米(meter 的缩写))马尔科·辛格(2003 年)。新颖性检测:综述-第一部分:统计方法,信号处理。83 (12) 2481–2497
  20. 拜尔斯和拉夫特里(1998 年)。用于估计空间点过程特征的最近邻杂波去除。j .阿梅尔。统计数据。协会 93, 577–584.
  21. Breunig,M. M .,Kriegel,H.-P .,Ng,R. T .,和 Sander,J .(1999 年)。光学-of:识别局部异常值。《第三届欧洲数据挖掘和知识发现原理会议论文集》。施普林格出版社,262-270 年。
  22. Brito,M. R .、Chavez,E. L .、Quiroz,A. J .和 yukich,j . E .(1997 年)。聚类和离群点检测中互 k 近邻图的连通性。统计数据。Prob。列特。35, 1, 33–42.
  23. 阿加瓦尔和俞平声(2000)。高维数据的离群点检测。美国德克萨斯州达拉斯市 ACM SIGMOD 国际数据管理会议。
  24. Ghoting,a .,Parthasarathy,s .,和 Otey,M .(2006 年)。高维空间中基于距离的离群值的快速挖掘数据挖掘(SDM) Bethesda ML 维空间会议论文集 SIAM Int Conf。进行中。暹罗国际。糖膏剂关于数据挖掘(SDM),马里兰州贝塞斯达。
  25. Kriegel,H.-P .,Schubert,m .和 Zimek,A .(2008 年)。基于角度的异常值检测,美国计算机学会会报。知识发现和数据挖掘会议。知识发现和数据挖掘(SIGKDD),内华达州拉斯维加斯。
  26. Schoelkopf,b .,Platt,J. C .,Shawe-Taylor,J. C .,Smola,A. J .,和 Williamson,r . C .(2001 年)。估计一个高维分布的支持度。神经计算。13, 7, 1443–1471.
  27. F Pedregosa 等人sci kit-learn:Python 中的机器学习。机器学习研究杂志,2825-2830。****

四、半监督和主动学习

在第二章、现实世界监督学习的实用方法和第三章、无监督机器学习技术中,我们讨论了两组主要的机器学习技术,它们适用于标记数据可用性的相反情况——一组是所有目标值都已知,另一组是一无所知。相比之下,本章中的技术解决了这样一种情况,即我们必须从混合了一小部分有标签的数据和大量无标签实例的数据中进行分析和学习。

在语音和图像识别中,大量数据是可用的,并且是各种形式的。然而,标记或分类所有这些数据的成本是昂贵的,因此,在实践中,被分类的语音或图像与未被分类的语音或图像的比例非常小。类似地,在 web 文本或文档分类中,万维网上有大量的文档,但是基于主题或上下文对它们进行分类需要领域专家,这使得该过程复杂且昂贵。在这一章中,我们将讨论两个广泛的主题,涵盖“从未标记数据中学习”的领域,即半监督学习 ( SSL )和主动学习。我们将介绍每个主题,并讨论与每个主题相关的分类法和算法,就像我们在前几章所做的那样。由于这本书强调实践方法,我们将讨论每种学习类型可用的工具和库。然后,我们将考虑真实世界的案例研究,并展示在实际情况中应用这些工具时有用的技术。

以下是本章涵盖的主题列表:

  • 半监督学习:

    • 表示、符号和假设

    • 半监督学习技术:

      • 自训练 SSL
      • 协同训练 SSL
      • 聚类和标签 SSL
      • 直推式图标签传播
      • 直推式 SVM
    • 半监督学习案例研究

  • 主动学习:

    • 表示和批注

    • 主动学习场景

    • 主动学习方法:

      • 不确定性采样

        • 最小置信采样
        • 最小间隔采样
        • 标签熵采样
      • 版本空间采样:

        • 查询被异议
        • 查询被委员会
      • 密度加权法

  • 案例学习中的主动学习

半监督学习

半监督学习背后的想法是从有标签和无标签的数据中学习,以提高模型的预测能力。这个概念用一个简单的例子来解释,图 1 ,它显示了当大量未标记的数据可用时,例如,网络上的 HTML 文档,专家可以将其中一些分类到已知的类别中,如体育、新闻、娱乐等。然后,半监督学习技术可以使用这一小组已标记数据和大的未标记数据集来学习模型。因此,使用已标记和未标记数据的知识,该模型可以在未来对看不见的文档进行分类。相比之下,监督学习仅使用标记数据:

Semi-supervised learningSemi-supervised learning

图一。以 web 文档分类为例,半监督学习过程(下图)与监督学习(下图)进行了对比。主要区别是可用于学习的标记数据的数量,在半监督的情况下由限定词“小”突出显示。

表示、符号和假设

像以前一样,我们将介绍我们在本章中使用的符号。数据集 D 由表示为 x 的单个数据实例组成,也表示为一个集合{x1,x2,…xn},即没有标签的数据实例集合。与这些数据实例相关联的标签是{ y [1] , y [2] ,… y [n] }。整个被标记的数据集可以表示为集合中的成对元素,如下所示:d= {(x1,y1),( x 2,y2),…(xn, y 在半监督学习中,我们将数据集 D 进一步分为两组 UL 分别用于未标记和标记数据。

标记数据Representation, notation, and assumptions由所有已知结果的标记数据组成{y [1] ,y [2] ,..y [ l ] }。未标记的数据Representation, notation, and assumptions是结果未知的数据集。| * U * | > | * L * |。

归纳半监督学习由一组技术组成,给定带有标记数据Representation, notation, and assumptions和未标记数据Representation, notation, and assumptions的训练集 D ,学习表示为Representation, notation, and assumptions的模型,使得模型 f 能够很好地预测训练未标记数据 U 之外的未知数据。它“归纳”了一个模型,可以像监督学习算法一样用于预测看不见的实例。

直推式半监督学习由一套技术组成,在给定训练集 D 的情况下,这些技术学习一个模型Representation, notation, and assumptions,该模型只对未标记的数据进行预测。它不需要在看不见的未来实例上执行,因此是比基于归纳的学习更简单的 SSL 形式。

下面列出了半监督学习算法中所做的一些假设,这些假设应该适用于这些类型的成功学习。要使 SSL 工作,这些假设中的一个或多个必须为真:

  • 半监督平滑度:简单来说,如果两个点在密度或距离上“接近”,那么它们的标签一致。相反,如果两个点是分开的并且在不同的密度区域,那么它们的标签不需要一致。
  • 聚类一致性:如果类的数据实例倾向于形成一个聚类,那么未标记的数据可以帮助聚类算法找到更好的聚类。
  • 流形一致性:在许多现实世界的数据集中,高维数据位于低维流形中,使得学习算法能够克服维数灾难。如果在给定的数据集中这是真的,则未标记的数据也映射到流形,并且可以改进学习。

半监督学习技术

在本节中,我们将描述不同的 SSL 技术,以及一些伴随的算法。我们将使用与前几章相同的结构,并在三个小节中描述每种方法:输入和输出它是如何工作的?优点和局限性

自我训练 SSL

自我训练是 SSL 的最简单形式,我们通过应用从标记集学习的模型,执行一个简单的迭代过程,从未标记集输入数据(参考文献 [1]):

Self-training SSL

图二。二进制分类中的自训练 SSL,一些带标签的数据用蓝色矩形和黄色圆圈显示。在各种迭代之后,未标记的数据被映射到各自的类。

输入和输出

输入是带有少量已标记数据和大量未标记数据的训练数据。基本分类器(线性或非线性,如朴素贝叶斯、KNN、决策树或其他)与每个算法所需的超参数一起提供。对数据类型的约束类似于基础学习者。诸如达到最大迭代次数未标记数据用尽等停止条件也是必须做出的选择。通常,我们使用基础学习者来给出输出的概率或等级。作为输出,该技术生成的模型可用于对除了所提供的未标记数据之外的未知数据集执行预测。

它是如何工作的?

整个算法可以总结如下:

  1. 当未达到停止标准时:

    1. 用标记数据训练分类器模型How does it work?L
    2. 将分类器模型 f 应用于未标记数据 U
    3. 选择 k 来自 U 的最有把握的预测作为集合 L [u]
    4. 用 k 个数据点扩充标记数据
  2. 重复 2 下的所有步骤。

抽象地说,自我训练可以被看作是一个应用于半监督设置的期望最大化过程。训练分类器模型的过程是使用 MLE 或 MAP 来寻找参数θ。使用学习模型计算标签类似于期望步骤,其中How does it work?在给定参数θ的情况下从 U 估计标签。学习具有扩充标签的模型的迭代下一步类似于最大化步骤,其中新参数被调整到θ’

优点和局限性

的优点和局限性如下:

  • 简单,适用于大多数监督学习技术。
  • 异常值和噪声会导致预测中的错误得到加强,技术退化。

协同训练 SSL 或多视图 SSL

基于 SSL 的联合训练涉及从同一数据的两个不同“视图”中学习。它是多视图 SS 的一个特例(参考文献[2])。每个视图可以被认为是捕获一些领域知识的点的特征集,并且与另一个视图正交。例如,web 文档数据集可以被认为具有两个视图:一个视图是表示文本的特征,另一个视图是表示到其他文档的超链接的特征。假设每个视图都有足够的数据,从每个视图中学习可以改进整个标注过程。在无法对要素进行此类划分的数据集中,将要素随机分割成不相交的集合会形成视图。

输入和输出

输入是带有少量标记的训练数据和大量未标记的数据。除了提供数据点之外,还有对应于每个视图的特征集,并且假设这些特征集不重叠并且解决不同的分类问题。选择线性或非线性的基本分类器,例如朴素贝叶斯、KNN、决策树或任何其他分类器,以及每个算法所需的超参数。作为输出,该方法生成的模型可用于对除所提供的未标记数据之外的未知数据集执行预测。

它是如何工作的?

我们将使用两种数据视图来演示该算法:

  1. 将数据初始化为How does it work?标记和How does it work?未标记。每个数据点都有两个视图x =【x1,x²和*L =【L¹,L2。*

  2. *未达到停止标准时:

    1. 分别用标记数据 L 1 和 L 2 训练分类器模型How does it work?How does it work?
    2. 将分类器模型 f ¹ 和 f ² 应用到未标记数据上 U 使用它们自己的特征。
    3. U 中选择 k 最有把握的预测,分别套用f1 和f2 为 setL[U]¹和L[U]2。
    4. k 数据点L¹=L¹∪L[¹和L²=L对标记的数据进行扩充]*
  3. 重复 2 下的所有步骤。

优点和局限性

优点和局限性是:

  • 当特性具有不同的方面或不同领域的组合时,联合训练比简单的自我训练更有益
  • 具有正交视图和从中学习的能力的必要和充分条件对该技术的通用性提出了挑战

聚类并标记 SSL

这种技术,像自我训练一样,非常通用,适用于域和数据集,其中假设部分提到的聚类假设成立(参考文献【3】)。

输入和输出

输入是用一些有标签的和大量无标签的实例训练数据。聚类算法及其参数以及分类算法及其参数构成了附加输入。该技术生成一个分类模型,可以帮助预测看不见的数据的类别。

它是如何工作的?

抽象算法可以给定为:

  1. 将数据初始化为How does it work?标记和How does it work?未标记。

  2. 使用聚类算法对整个数据进行聚类,包括已标记和未标记的数据。

  3. *对于每个聚类,设 S 是从集合 L 中抽取的标记实例的集合。

    1. Sf[S]=L[S]学习一个监督模型。
    2. 应用模型 f [s] 并使用前面的模型对每个聚类的未标记实例进行分类。*
  4. *由于所有未标记的实例How does it work?都被前面的过程分配了一个标签,因此在整个集合上运行监督分类模型。How does it work?

    图 3。聚类和标签 SSL–先聚类后分类*

优点和局限性

的优势和的局限性是:

  • 当聚类假设成立并且聚类算法和参数的选择正确时工作得非常好
  • 大量的参数和选择使得这在许多现实世界的问题中成为一种笨拙的技术

直推图标签传播

基于图的方法背后的关键思想是将数据集中标记和未标记的每个实例表示为一个节点,并将边计算为它们之间某种形式的“相似性”。使用假设部分中讨论的标签平滑度的基本概念,已知标签用于传播未标签数据中的标签,也就是说,相似的数据点将在图形上彼此“接近”(参考文献【4】)。

图 4 示出了当手写数字模式改变时,从第一个数据点到最后一个数据点的箭头粗细所指示的相似性是如何变化的。已知第一个标签,由于特征的相似性,标签传播可以有效地标记接下来的三个数字,而最后一个数字虽然标记相同,但与前三个数字相比具有较低的相似性。

*Transductive graph label propagation

图 4。直推图形标签传播–手写数字的分类。最左边和最右边的图像被标记,其他的没有标记。箭头粗细是与左边带标签的数字“2”相似性的视觉度量。*

输入和输出

输入是带有少数标记和大量未标记数据的训练数据。选择图加权或相似度计算方法,如 k-最近加权、高斯衰减距离或ϵ-radius 方法。输出是整个数据的标记集;它通常不像之前看到的算法那样建立归纳模型。

它是如何工作的?

通用标签传播方法如下:

  1. *构建一个图 g = (V,E) 其中:

    • 顶点 V = {1,2…n} 对应于属于标记集合 L 和未标记集合 U 的数据。
    • E 是权重矩阵 W ,使得 W [i,j] 表示两个数据点xI,xj 之间某种形式的相似性。*
  2. 通过How does it work?计算对角度矩阵 D

  3. 假设标记集是二进制的,有How does it work?。将所有未标记数据的标签初始化为 0。How does it work?

  4. 迭代到t*= 0:

    1. How does it work?
    2. How does it work?(将标注实例的标签重置回原来)
    3. 回到步骤 4,直到收敛How does it work?*
  5. 使用收敛标签How does it work?标记未标记的点How does it work?

基于相似性、迭代中选择的优化等等,有许多变化。

优点和局限性

优点和局限性是:

  • 基于图的半监督学习方法在计算方面是昂贵的——通常为 O(n ³ ),其中 n 是实例的数量。虽然加速和缓存技术有所帮助,但大数据的计算成本使得它在许多现实世界的数据情况下不可行。
  • 这种直推性质使其难以用于实际目的,因为在实际目的中,模型需要对看不见的数据进行归纳。还有一些扩展,如谐波混合等等,可以解决这些问题。

直推式 SVM (TSVM)

直推式 SVM 是最古老和最流行的直推式半监督学习方法之一,由 Vapnik 提出(参考文献 [5])。关键原则是,未标记的数据和标记的数据可以帮助使用大幅度的概念找到决策边界。基本原则是决策边界通常不在高密度区域!

输入和输出

输入是具有很少标记和大量未标记数据的训练数据。对于 TSVM 计算,输入必须是数字要素。核的选择、核参数和成本因子都是基于 SVM 的参数,也是输入变量。输出是未标注数据集的标注。

它是如何工作的?

一般来说,SVM 在根据权重向量 w 和服从How does it work?的偏差b公式化的标记硬边界 SVM 中作为优化问题

  1. 将数据初始化为How does it work?标记和How does it work?未标记。
  2. 在 TSVM,方程式修改如下:How does it work?

这取决于以下条件:

How does it work?How does it work?How does it work?

这很像归纳 SVM,但只使用标记数据。当我们约束未标记的数据以符合标记数据的超平面的边以便最大化边缘时,它导致未标记的数据以最大的边缘分离被标记!通过将惩罚因子添加到约束条件中,或者像在归纳 SVM 中那样用核来替换输入空间中的点积,可以从未标记的数据中标记复杂的非线性噪声数据集。

图 5 展示了 TSVM 的概念与仅在标记数据上运行的归纳 SVM 的比较,以及为什么 TSVM 可以使用未标记数据集找到更好的决策边界。超平面两侧的未标记数据集更接近它们各自的类,因此有助于找到更好的边界分隔符。

*How does it work?

图 5。转导 SVM*

优点和局限性

优点和局限性:

  • 给定无噪声的标记数据,TSVMs 可以在线性或非线性数据集中很好地工作。
  • TSVMs 在寻找超参数并调整它们以获得与归纳 SVM 相同的最佳结果方面存在同样的问题。

半监督学习案例研究

在这个案例研究中,我们使用了另一个来自 UCI 知识库的经过充分研究的数据集,即威斯康星州乳腺癌数据集。在实验的第一部分,我们使用名为JKernelMachines的开源库演示了如何应用半监督学习的直推式 SVM 技术。我们为这项技术选择了 SVMLight 算法和高斯核。

在第二部分中,我们使用了基于 GUI 的框架 KEEL,并使用 UCI 乳腺癌数据集比较了几种基于进化学习的算法的结果。以下小节描述了工具、方法和评估措施。

工具和软件

在半监督学习案例研究中使用的两个开源 Java 工具是JKernelMachines,一个直推式 SVM,和一个基于 GUI 的工具 KEEL,它使用进化算法进行学习。

注意

JKernelMachines(直推型 SVM)

JKernelMachines是一个纯 Java 库,为使用和快速开发专用内核提供了一个高效的框架。核是用于支持向量机的相似性函数。JKernelMachines除了线性和高斯等矢量数据上的标准内核之外,还提供了在结构化数据上定义的内核实现。特别是,它提供了内核、在列表上定义的内核以及具有各种缓存策略的内核的组合。该库还包含 SVM 优化算法实现,包括 LaSVM 和使用 SMO 的一类 SVM。该库的创建者报告说,JKernelMachines 在一些常见的 UCI 知识库数据集上的结果与 Weka 库相当或更好。

使用JKernelMachines加载数据和运行直推式 SVM 的示例如下:

*try {
//load the labeled training data
List<TrainingSample<double[]>> labeledTraining = ArffImporter.importFromFile("resources/breast-labeled.arff");
//load the unlabeled data
List<TrainingSample<double[]>> unlabeledData =ArffImporter.importFromFile("resources/breast-unlabeled.arff");
//create a kernel with Gaussian and gamma set to 1.0
DoubleGaussL2 k = new DoubleGaussL2(1.0);
//create transductive SVM with SVM light
S3VMLight<double[]> svm = new S3VMLight<double[]>(k);
//send the training labeled and unlabeled data
svm.train(labeledTraining, unlabeledData);
} catch (IOException e) {
	e.printStackTrace();
}*

在第二种方法中,我们使用带有相同数据集的 KEEL。

注意

KEEL

KEEL ( 基于进化学习的知识提取)是一个带有 GUI 的非商业(GPLv3) Java 工具,它使用户能够为各种数据挖掘问题分析进化学习的行为,包括回归、分类和无监督学习。它减轻了用户编写复杂进化算法的负担,并允许他们专注于使用工具包创建的新学习模型。KEEL 旨在满足研究人员和学生的需求。

KEEL 包含用于数据预处理和后处理的算法以及统计库,以及一个知识提取算法库,该算法库将多个进化学习算法与经典学习技术相结合。

工具中的 GUI 向导为管道的每个阶段提供了不同的功能组件,包括:

  • 数据管理:数据的导入、导出、数据转换、可视化等等
  • 实验设计:选择分类器、估计器、无监督技术、验证方法等
  • SSL 实验:直推式和归纳式分类(见本节 SSL 实验设计的离线方法图片)
  • 统计分析:这为成对和多重比较、参数和非参数程序提供测试。

更多信息请访问sci2s.ugr.es/keel/sci2s . ugr . es/keel/pdf/keel/articulo/Alcalaetal-soft computing-keel 1.0 . pdf

*Tools and software

图 6:KEEL——基于向导的图形界面*

商业问题

乳腺癌是世界范围内女性的头号癌症,尤其是在发展中国家,大多数病例在晚期才被诊断出来。使用非手术方法检查肿瘤块是一种廉价的疾病早期检测预防措施。

在本案例研究中,使用了来自这种程序的标记数据集,目标是使用多种 SSL 技术将乳腺癌数据分类为恶性和良性。

机器学习映射

为了说明到目前为止本章所学的技术,我们将使用 SSL 进行分类。尽管数据集包含所有示例的标签,但是为了将此视为我们可以应用 SSL 的问题,我们将考虑一小部分数据是未标记的。事实上,我们使用未标记数据的不同部分运行了多个实验进行比较。使用的不同基础学习器是我们在前面章节中熟悉的分类算法。

数据收集

这个数据集是由威斯康星大学麦迪逊医院收集的。数据集以 Weka AARF 格式提供。数据没有划分为训练、验证和测试。

数据质量分析

数据中的示例不包含唯一标识符。有 16 个示例的裸细胞核属性缺少值。目标类是唯一的分类属性,有两个值。所有其他属性都是连续的,并且在范围[1,10]内。

数据采样和转换

在实验中,我们给出了 10 重交叉验证的结果。为了进行比较,进行了四次运行,每次使用不同比例的标记数据—10%、20%、30%和 40%。

每个示例都添加了一个数字样本代码编号作为唯一标识符。类别属性的分类值恶性和良性分别由数值 4 和 2 替换。

数据集和分析

乳腺癌症数据集 Wisconsin(原始)可从 UCI 机器学习储存库获得:archive . ics . UCI . edu/ml/datasets/Breast+Cancer+Wisconsin+(原始)

这个数据库最初是从威斯康星大学麦迪逊医院的 William H. Wolberg 博士那里获得的。该数据集由 Wolberg 博士创建,用于乳腺肿瘤的诊断和预后。数据完全基于涉及细针抽吸 ( FNA )测试的测量。在这项测试中,使用小规格针从乳房肿块中抽取液体,然后在显微镜下进行目视检查。

共有 699 个实例组成了数据集,其中包含九个数字属性和一个二元类(恶性/良性)。缺失值的百分比为 0.2%。在数据集中有 65.5%的恶性和 34.5%的良性病例。下表列出了功能名称和有效值范围:

|

民数记

|

功能名称

|

领域

one 样本代码编号 识别号
Two 团块厚度 1 - 10
three 细胞大小的均匀性 1 - 10
four 细胞形状的均匀性 1 - 10
five 边缘粘连 1 - 10
six 单一上皮细胞大小 1 - 10
seven 裸核 1 - 10
eight 平淡的染色质 1 - 10
nine 正常核仁 1 - 10
Ten 有丝分裂 1 - 10
Eleven 班级 良性 2 例,恶性 4 例

特征分析结果

表 1 显示了按功能分类的汇总统计数据。

|   |

团块厚度

|

细胞大小均匀性

|

细胞形状均匀性

|

边缘粘连

|

单个 Epi 单元大小

|

裸核

|

平淡的染色质

|

正常核仁

|

有丝分裂

意思是 Four point four one eight Three point one three four Three point two zero seven Two point eight zero seven Three point two one six Three point five four five Three point four three eight Two point eight six seven One point five eight nine
标准 Two point eight one six Three point zero five one Two point nine seven two Two point eight five five Two point two one four Three point six four four Two point four three eight Three point zero five four One point seven one five
one one one one one one one one one
25% Two one one one Two Two one one
50% four one one one Two three one one
75% six five five four four five four one
最大 Ten Ten Ten Ten Ten Ten Ten Ten Ten

表 1。功能总结

实验和结果

两种 SSL 算法被选择用于实验——自我训练和共同训练。此外,选择了四种分类方法作为基础学习器——朴素贝叶斯、C4.5、K-NN 和 SMO。此外,每个实验使用标记和未标记数据的四个不同部分(10%、20%、30%和 40%标记)来运行。

表 2 中给出了算法和基本分类器的超参数。对于这两种 SSL 算法,您可以看到对应于标记和未标记数据的四个分区的不同运行的准确性。

最后,我们给出了 40%标记情况下每个实验的性能结果。所提供的性能度量是准确度和带有标准偏差的 Kappa 统计量。

|

方法

|

因素

自我训练 最大 ITER = 40
合作培训 最大 ITER = 40,初始未标记池=75
KNN K = 3,欧几里德距离
C4.5 修剪过的树,置信度= 0.25,每片叶子 2 个样本
未指定参数
高年资军医(senior medical officer) C = 1.0,容差参数= 0.001,ε= 1.0E-12,核类型=多项式,多项式次数= 1,拟合逻辑模型=真

表 2。用于自训练和协同训练的基本分类器超参数

| SSL 算法 | 10% | 20% | thirty percent | 40% |
| 自学 C 4.5 | Zero point nine | Zero point nine three | Zero point nine four | Zero point nine four seven |
| 共同培训 SMO | Zero point nine five nine | Zero point nine four nine | Zero point nine six two | Zero point nine five nine |

表 3。标签样本比例不同的样本的模型精度

|

算法

|

准确性(无未标注)

C4.5 10 倍 CV Zero point nine four seven
SMO 10 fold CV Zero point nine six seven

|   |   | 10 倍 CV 威斯康星 40%标记数据 |   |
| 自我培训(kNN) | 准确(性) | 0.9623 (1) | 卡帕 | 0.9170 (2) |
|   | 标准发展 | 0.0329 | 标准发展 | 0.0714 |
| 自我培训(C45) | 准确(性) | 0.9606 (3) | 卡帕 | 0.9144 |
|   | 标准发展 | 0.0241 | 标准发展 | 0.0511 |
| 自我培训(NB) | 准确(性) | 0.9547 | 卡帕 | 0.9036 |
|   | 标准发展 | 0.0252 | 标准发展 | 0.0533 |
| 自我培训(SMO) | 准确(性) | 0.9547 | 卡帕 | 0.9035 |
|   | 标准发展 | 0.0208 | 标准发展 | 0.0435 |
| 联合培训 | 准确(性) | 0.9492 | 卡帕 | 0.8869 |
|   | 标准发展 | 0.0403 | 标准发展 | 0.0893 |
| 联合培训(C45) | 准确(性) | 0.9417 | 卡帕 | 0.8733 |
|   | 标准发展 | 0.0230 | 标准发展 | 0.0480 |
| 合作培训(NB) | 准确(性) | 0.9622 (2) | 卡帕 | 0.9193 (1) |
|   | 标准发展 | 0.0290 | 标准发展 | 0.0614 |
| 共同培训(SMO) | 准确(性) | 0.9592 | 卡帕 | 0.9128 (3) |
|   | 标准发展 | 0.0274 | 标准发展 | 0.0580 |

表 4。使用 40%标记示例的模型性能比较。每个类别中排名最高的表现者显示在括号中。

半监督学习分析

使用 40%的标记数据,使用 C4.5 的半监督自训练达到了与仅使用 C4.5 的 100%标记数据相同的结果。这显示了当数据稀疏标记时半监督学习的强度。

具有多项式核的 SMO,具有 30-40%的数据接近 100%的数据,但不如 C4.5 好

在 40%标记的训练数据上用四个分类器进行自训练和共同训练显示

  • 作为基础分类器和自训练的 KNN 具有最高的准确度(0.9623),其指示数据的非线性边界。与朴素贝叶斯的联合训练非常接近。

  • 使用线性朴素贝叶斯、非线性 C4.5 和高度非线性 KNN 等分类器的自我训练显示出准确度的稳步提高:0.9547、0.9606、0.9623,这再次表明使用自我训练但为问题选择正确的底层分类器非常重要。

  • 与朴素贝叶斯的联合训练具有最高的 Kappa 统计量(0.9193)和与自我训练的 KNN 几乎相似的准确性。特征之间的独立关系——因此将特征集分解成正交的特征集并将其用于分类器——改善了学习。

主动学习

虽然主动学习与半监督学习有许多相似之处,但它有自己独特的方法来对包含标记和未标记数据的数据集进行建模。它植根于人类的基本心理,即问更多的问题往往有助于解决问题。

主动学习背后的主要思想是,如果学习者能够挑选实例进行学习,而不是得到带标签的数据,那么学习者可以用更少的数据更有效地学习(参考 6】)。使用非常少量的标记数据,它可以仔细地从未标记数据中挑选实例,以获得标记信息,并使用它来迭代地改进学习。这种查询未标记数据以从所谓的 oracle(该领域的专家)获得标签的基本方法将主动学习与半监督或被动学习区分开来。下图说明了其中的差异和迭代过程:

![Active learning

图 7。主动机器学习过程与监督和半监督学习过程的对比。

表示和符号

D = {( x [1] , y [2] ),( x [2] , y [2] ),… ( x [n] 给出了数据集 D ,其中表示所有的数据实例及其标签 y [n] )}其中Representation and notation是数据的个个体实例,{ * y * [1] , y [2] ,… * y * [n] 是关联标签的集合。 D 由两组 U 标记数据和 L 未标记数据组成。 x 是没有标签的数据实例的集合{ ** x ** [1] , x [2] ,… ** x ** [ n ] }

数据集Representation and notation包括所有已知结果的标记数据{y1,y2,…yl},而Representation and notation是结果未知的数据集。和之前一样,|U|>|>|L|。

主动学习场景

主动学习场景可以大致分为:

  • 基于流的主动学习:在这种方法中,仅从未标记的数据集中挑选实例或例子,并决定是忽略数据还是将其传递给 oracle 以获得其标签(裁判【10,11】)。
  • 基于池的主动学习:在这种方法中,从未标记的数据集中查询实例,然后根据信息量进行排序,并将这些实例中的一组实例发送到 Oracle 以获得标签(裁判【12】)。
  • 查询合成:在这种方法中,学习者只有关于输入空间(特征)的信息,并从成员的未标记集合中合成查询。这个并不用于实际应用,因为它通常不考虑数据生成分布,因此查询通常是任意的或无意义的。

主动学习方法

不管所涉及的场景如何,每一种主动学习方法都包括选择一种查询策略或采样方法,这种策略或方法建立了在每次迭代中挑选查询的机制。每种方法都揭示了一种独特的方式来寻找具有最佳信息内容的未标记的例子,以改进学习过程。在下面的小节中,我们将描述主要的查询策略框架,它们是如何工作的,它们的优点和局限性,以及每个框架中的不同策略。

不确定性采样

这种形式的采样背后的关键思想是从当前模型最不确定的未标记池中选择个实例。然后,学习者可以避免模型在分类中更确定或更有信心的实例(参考【8】)。

基于概率的模型(朴素贝叶斯、逻辑回归等)是这种方法最自然的选择,因为它们给出了给定模型的置信测度,比如说数据 xθ ,类yIIϵ类,以及概率Uncertainty sampling作为后验概率。

它是如何工作的?

所有基于不确定性的算法的一般过程概述如下:

  1. 将数据初始化为带标签的How does it work?和不带标签的How does it work?

  2. 当仍有未标记数据时:

    1. 用标记数据 L 训练分类器模型How does it work?
    2. 将分类器模型 f 应用于未标记的数据 U 以评估信息性 J 使用一种采样机制(参见下一节)
    3. U 中选择 k 最具信息性的数据作为集合 L [u] 以从 oracle 中获取标签。
    4. 用上一步得到的 k 个新的已标记数据点对已标记数据进行扩充:L=LL[u]。
  3. 重复 2 下的所有步骤。

下面给出了从数据中抽取信息实例的一些最常见的查询合成算法。

最小置信抽样

在这种技术中,数据实例基于它们的置信度反向排序,最有可能被查询或选择的实例是模型最不信任的实例。这背后的想法是,最不自信的是那些靠近边缘或分离超平面的,获得它们的标签将是有效学习边界的最佳方式。

这可以公式化为Least confident sampling

这种方法的缺点是它有效地考虑了最佳信息;没有使用关于其余后验分布的信息。

最小间隔抽样

这个是基于边缘的采样,其中具有较小边缘的实例比具有较大边缘的实例具有更多模糊性。

这可以表述为Smallest margin sampling,其中Smallest margin samplingSmallest margin sampling是实例 x 的两个标签。

标签熵采样

熵,是数据中平均信息量的度量,也是杂质度量,可以用来对实例进行采样。这可以表述为:

Label entropy sampling

优点和局限性

优点和局限性是:

  • 熵抽样是最简单的方法,可以和任何概率分类器一起工作——这是最大的优势
  • 离群值或错误反馈的存在可能会被忽视,并且模型可能会降级

版本空间采样

假设 H 是概括或解释训练数据的所有特定模型的集合;例如,分隔两个线性可分类的所有可能的权重集。版本空间 V 是假设 H 的子集,其与 Tom Mitchell ( 引用【15】)定义的训练数据一致,使得Version space sampling

这种采样背后的思想是从未标记的数据集中查询实例,以减少版本空间的大小或最小化| V |。

通过异议查询(QBD)

QBD 是最早的算法之一,它致力于维护版本空间V——当两个假设在新输入数据的标签上不一致时,该实例被选择用于从 oracle 或专家那里获取标签。

它是如何工作的?

整个算法可以总结如下:

  1. 初始化How does it work?为所有法律假设的集合。

  2. 将数据初始化为How does it work?标记和How does it work?未标记。

  3. 而数据x*[']'*则在 U :

    1. 如果How does it work?为任意h[2]∈V:

      1. 查询 x ['] 的标签,得到y[']
      2. V= { h:h(x['])=*y[']*为所有点。
    2. 否则:

      1. 忽略 x [']
委员会查询(QBC)

委员会查询通过创建分类器委员会并使用它们的投票作为捕获不一致的机制,克服了与维护所有可能的版本空间相关的不一致查询的限制(参考文献【7】)。

它是如何工作的?

对于该算法:

  1. 将数据初始化为How does it work?标记和How does it work?未标记。

  2. 培养模特委员会C= {θ¹θ²,... θ ^c }上标注的数据 w (见下文)。

  3. 对于所有数据x*'??U:

    1. x ' 的预测投票为{ How does it work?
    2. 根据最大差异对实例进行排序(见下文)。
    3. U 中选择 k 最翔实的数据作为集合 L [u] 从 oracle 中获取标签。
    4. k 新标记的数据点L=LL[u]扩充标记的数据。
    5. 重新培训模特{ θ [1] , θ [2] ,...θc}带新 L 。*

对于训练学习者委员会和选择分歧方法这两项任务,每个人都有不同的选择。

可以使用来自 L 的不同样本来训练不同的模型,或者可以使用诸如 boosting 和 bagging 之类的集合方法来训练它们。

投票熵是选择作为不一致度量来排序的方法之一。它的数学表达方式是:

How does it work?

这里, V(y [i] ) 是从所有可能的标签中给予标签yI 的票数,而| C |是委员会的规模。

kull back-lei bler(KL)散度是两个概率分布之间散度的信息论度量。分歧被量化为每个委员会的预测与委员会一致意见的平均差异 C :

How does it work?

优点和局限性

优点和局限性如下:

  • 简单性和它可以与任何监督算法一起工作的事实给了它很大的优势。
  • 在某些情况下,理论上可以保证误差最小化和推广。
  • 由不一致引起的查询受到维护大量有效假设的困扰。
  • 这些方法仍然存在错误反馈被忽视和模型可能降级的问题。

数据分布抽样

以前的方法要么基于模型上的样本造成的不确定性,要么通过减少假设空间大小,从未标记的集合中选择最佳实例。这两种方法都不能解决模型本身的最佳问题。数据分布抽样背后的想法是,添加有助于减少模型误差的样本有助于使用期望值改进对未知实例的预测(参考文献【13 和 14】)。

它是如何工作的?

有不同的方法可以找到给定模型的最佳样本,这里我们将详细描述每一种方法。

预期的车型变化

这背后的想法是从未标记的集合中选择将在模型中带来最大变化的示例:

Expected model change

这里,Pθ=对 xExpected model change的标签的期望是用 x 再训练后包含 x ' 的熵对未标记实例的和。

预期误差减少

在这里,方法是从未标记的集合中选择最能减少模型广义误差的例子。使用具有预期标签的未标记集合来测量广义误差:

Expected error reduction

这里,Pθ ( y | x ) =对 xExpected error reduction的标签的期望,是用 x 再训练后包含 x ^( ' ) 的熵的未标记实例的和。

方差减少

根据噪声偏差方差估计样本外误差的一般公式如下:

Variance reduction

这里, G ( x )是给定标签 y 的模型预测。在方差减少中,我们从未标记的集合中选择最能减少模型中方差的示例:

Variance reduction

这里, θ +表示模型经过新的点 x ^' 及其标签 y ^' 重新训练后的模型。

密度加权法

在这种方法中,我们从未标记的集合中选择与标记的集合具有平均相似性的例子。

这可以表示如下:

Density weighted methods

这里, sim ( xx*^’*)是密度项或相似性项,其中 Hθ是基本效用度量。

优点和局限性

的优点和局限性如下:

  • 最大的优势是它们直接将模型作为优化目标,而不是之前描述的隐式或间接方法
  • 这些方法可以在基于池或基于流的场景中工作
  • 这些方法在界限和推广上有一些理论保证
  • 这些方法的最大缺点是计算成本和实施困难

主动学习案例研究

这个案例研究使用另一个众所周知的公开可用数据集来演示使用开源 Java 库的主动学习技术。像以前一样,我们从定义业务问题开始,使用什么工具和框架,如何在解决方案中实现机器学习的原则,以及数据分析步骤揭示了什么。接下来,我们描述进行的实验,评估各种模型的性能,并提供结果分析。

工具和软件

在主动学习的实验中,JCLAL 是使用的工具。JCLAL 是一个面向主动学习的 Java 框架,支持单标签和多标签学习。

注意

JCLAL 是开源的,在 GNU 通用公共许可证下发布:sourceforge.net/p/jclal/git/ci/master/tree/

商业问题

这些实验中使用的鲍鱼数据集包含鲍鱼(通常称为海螺)的各种物理和解剖特征的数据。目标是预测贝壳年轮的数量,这表明了标本的年龄。

机器学习映射

正如我们已经看到的,主动学习的特点是从一小组标记数据开始,伴随着查询未标记数据的技术,这样我们就可以逐渐地向标记集添加实例。这是通过多次迭代执行的,一次一批。迭代次数和批量大小是这些技术的超参数。用于在不断增长的标记实例数量上进行训练的查询策略和监督学习方法的选择是额外的输入。

数据收集

和以前一样,我们将使用来自 https://archive.ics.uci.edu/ml/datasets/Abalone 的 UCI 知识库的现有数据集。数据库的原始所有者是澳大利亚塔斯马尼亚岛的初级工业和渔业部。

数据类型和属性描述伴随数据,并在表 5 中再现。类属性 Rings 有 29 个不同的类:

|

名字

|

数据类型

|

度量单位

|

描述

名义上的 男,女,和我(婴儿) 标本性别
长度 连续的 毫米 最长外壳尺寸
直径 连续的 毫米 垂直于长度
高度 连续的 毫米 带壳的肉
整体重量 连续的 全鲍鱼
震惊重量 连续的 肉的重量
内脏重量 连续的 内脏重量(出血后)
外壳重量 连续的 干燥后
戒指 整数 数数 +1.5 给出以年为单位的年龄

表 5。鲍鱼数据集特征

数据采样和转换

对于这个实验,我们将随机选择的【4,155 条记录视为未标记,而将剩余的 17 条记录保留为标记。没有数据的转换。

特征分析和降维

在只有八个特征的情况下,不需要进行降维。数据集附带了一些关于特征的统计数据,如表 6 所示:

|   | 长度 | 直径 | 高度 | 整体 | 剥壳 | 内脏 | 外壳 | 铃声 |
| 福建话 | Zero point zero seven five | Zero point zero five five | Zero | Zero point zero zero two | Zero point zero zero one | Zero point zero zero one | Zero point zero zero two | one |
| 最大 | Zero point eight one five | Zero point six five | One point one three | Two point eight two six | One point four eight eight | Zero point seven six | One point zero zero five | Twenty-nine |
| 平均 | Zero point five two four | Zero point four zero eight | Zero point one four | Zero point eight two nine | Zero point three five nine | Zero point one eight one | Zero point two three nine | Nine point nine three four |
| 南达科他州 | Zero point one two | Zero point zero nine nine | Zero point zero four two | Zero point four nine | Zero point two two two | Zero point one one | Zero point one three nine | Three point two two four |
| 科雷尔 | Zero point five five seven | Zero point five seven five | Zero point five five seven | Zero point five four | Zero point four two one | Zero point five zero four | Zero point six two eight | one |

表 6。按功能汇总统计数据

模型、结果和评估

我们进行了两组实验。第一个使用基于池的场景,第二个使用基于流的场景。在每个集合中,我们使用熵抽样、最小置信抽样、边际抽样和投票熵抽样。使用的分类器是朴素贝叶斯、逻辑回归和 J48(c 4.5 的实现)。对于每个实验,运行 100 次迭代,批量大小为 1 和 10。在表 7 中,我们展示了这些结果的一个子集,特别是使用朴素贝叶斯、简单逻辑和 C4.5 分类器(批量为 10)的每种采样方法的基于池和基于流的场景。

注意

全套结果可以在github . com/mjmlbook/mastering-Java-machine-learning/tree/master/chapter 4上看到。

JCLAL 库需要一个 XML 配置文件来指定使用哪个场景、选择的查询策略、批处理大小、最大迭代次数和基本分类器。以下是一个配置示例:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<experiment>
    <process evaluation-method-type="net.sf.jclal.evaluation.method.RealScenario">
        <file-labeled>datasets/abalone-labeled.arff</file-labeled>
        <file-unlabeled>datasets/abalone-unlabeled.arff</file-unlabeled>    
        <algorithm type="net.sf.jclal.activelearning.algorithm.ClassicalALAlgorithm">
      <stop-criterion type="net.sf.jclal.activelearning.stopcriteria.MaxIteration">
              <max-iteration>10</max-iteration>	
      </stop-criterion>
      <stop-criterion type="net.sf.jclal.activelearning.stopcriteria.UnlabeledSetEmpty"/>
            <listener type="net.sf.jclal.listener.RealScenarioListener">
                <informative-instances>reports/real-scenario-informative-data.txt</informative-instances>
            </listener>
            <scenario type="net.sf.jclal.activelearning.scenario.PoolBasedSamplingScenario">
                <batch-mode type="net.sf.jclal.activelearning.batchmode.QBestBatchMode">
                    <batch-size>1</batch-size>
                </batch-mode>
                <oracle type="net.sf.jclal.activelearning.oracle.ConsoleHumanOracle"/>
               <query-strategy type="net.sf.jclal.activelearning.singlelabel.querystrategy.EntropySamplingQueryStrategy">
                    <wrapper-classifier type="net.sf.jclal.classifier.WekaClassifier">
                        <classifier type="weka.classifiers.bayes.NaiveBayes"/>
                    </wrapper-classifier>
                </query-strategy>
            </scenario>
        </algorithm>
    </process>
</experiment>

工具本身通过以下方式调用:

java -jar jclal-<version>.jar -cfg <config-file>

基于池的场景

在下面的三个表格中,我们比较了使用朴素贝叶斯、简单逻辑和 C4.5 分类器时基于池的场景的结果。

朴素贝叶斯:

|

实验

|

ROC 下的区域

|

f 测度

|

假阳性率

|

精确

|

回忆

基于池的-EntropySampling-naive Bayes-b10 0.6021 0.1032 0.0556(1) 0.1805 0.1304
基于池的-KLDivergence-NaiveBayes-b10 0.6639(1) 0.1441(1) 0.0563 0.1765 0.1504
基于池的-最小确认采样-朴素贝叶斯-b10 0.6406 0.1300 0.0827 0.1835(1) 0.1810(1)
基于池的-VoteEntropy-NaiveBayes-b10 0.6639(1) 0.1441(1) 0.0563 0.1765 0.1504

表 7。使用朴素贝叶斯分类器的基于池的场景的性能

逻辑回归:

|

实验

|

ROC 下的区域

|

f 测度

|

假阳性率

|

精确

|

回忆

基于池的-EntropySampling-简单逻辑-b10 0.6831 0.1571 0.1157 0.1651 0.2185(1)
基于池的-KL divergence-简单逻辑-b10 0.7175(1) 0.1616 0.1049 0.2117(1) 0.2065
基于池-最小确认采样-简单逻辑-b10 0.6629 0.1392 0.1181(1) 0.1751 0.1961
基于池的-VoteEntropy-simple logistic-b10 0.6959 0.1634(1) 0.0895 0.2307 0.1880

表 8。使用逻辑回归分类器的基于池的场景的性能

C4.5 :

|

实验

|

ROC 下的区域

|

f 测度

|

假阳性率

|

精确

|

回忆

基于池的-EntropySampling-J48-b10 0.6730(1) 0.3286(1) 0.0737 0.3432(1) 0.32780(1)
基于池-KLDivergence-J48-b10 0.6686 0.2979 0.0705(1) 0.3153 0.2955
基于池的-LeastConfidentSampling-J48-b10 0.6591 0.3094 0.0843 0.3124 0.3227
基于池的-VoteEntropy-J48-b10 0.6686 0.2979 0.0706 0.3153 0.2955

表 9。使用 C4.5 分类器的基于池的场景的性能

基于流的场景

在下面的三个表中,我们使用朴素贝叶斯、逻辑回归和 C4.5 分类器,通过四种不同的采样方法,获得了基于流的场景的实验结果。

朴素贝叶斯:

|

实验

|

ROC 下的区域

|

f 测度

|

假阳性率

|

精确

|

回忆

stream based-EntropySampling-naive Bayes-b10 0.6673(1) 0.1432(1) 0.0563 0.1842(1) 0.1480
基于流-最小确认采样-朴素贝叶斯-b10 0.5585 0.0923 0.1415 0.1610 0.1807(1)
基于流-边缘采样-朴素贝叶斯-b10 0.6736(1) 0.1282 0.0548(1) 0.1806 0.1475
基于流的 VoteEntropyQuery-naive Bayes-b10 0.5585 0.0923 0.1415 0.1610 0.1807(1)

表 10。使用朴素贝叶斯分类器的基于流的场景的性能

逻辑回归:

|

实验

|

ROC 下的区域

|

f 测度

|

假阳性率

|

精确

|

回忆

stream based-EntropySampling-simple logistic-b10 0.7343(1) 0.1994(1) 0.0871 0.2154 0.2185(1)
stream based-least confident sampling-simple logistic-b10 0.7068 0.1750 0.0906 0.2324(1) 0.2019
基于流-边缘采样-简单逻辑-b10 0.7311 0.1994(1) 0.0861 0.2177 Zero point two one four
stream based-VoteEntropy-simple logistic-b10 0.5506 0.0963 0.0667(1) 0.1093 0.1117

表 11。使用逻辑回归分类器的基于流的场景的性能

C4.5 :

|

实验

|

ROC 下的区域

|

f 测度

|

假阳性率

|

精确

|

回忆

stream based-EntropySampling-J48-b10 0.6648 0.3053 0.0756 0.3189(1) 0.3032
stream based-least confident sampling-J48-b10 0.6748(1) 0.3064(1) 0.0832 0.3128 0.3189(1)
基于流-余量取样-J48-b10 0.6660 0.2998 0.0728(1) 0.3163 0.2967
stream based-VoteEntropy-J48-b10 0.4966 0.0627 0.0742 0.1096 0.0758

表 12。使用 C4.5 分类器的基于流的场景的性能

主动学习结果分析

有趣的是,基于池的委员会查询(一种集成方法)使用 KL-Divergence 采样在大多数分类器中表现良好。如本节所述,这些方法已被证明具有通过保持较大假设空间来减少误差的理论保证,并且该实验结果从经验上支持了这一点。

使用 C4.5 作为分类器的基于池、基于熵的采样具有最高的精度、召回率、FPR 和 F-Measure。同样,对于基于流的熵采样和 C4.5,指标也很高。使用不同的采样技术和基于池的 C4.5,如 KL-Divergence、LeastConfident 或 vote entropy,指标明显更高。因此,这可以更强烈地归因于底层分类器 C4.5 寻找非线性模式。

当考虑 AUC 时,逻辑回归算法在基于流和基于池两者中表现非常好。这可能完全是因为 LR 在置信度作图中具有良好的概率方法,这是给出良好 AUC 分数的重要因素。

总结

在前几章中浏览了监督和非监督机器学习技术及其在真实世界数据集上的应用之后,本章介绍了半监督学习 ( SSL )和主动学习 ( AL )的概念、技术和工具。

在 SSL 中,我们有一些带标签的示例和许多未标记的示例,目标是简单地在带标签的示例上进行训练,以便对未标记的示例进行分类(直推式 SSL),或者使用未标记和带标签的示例来训练模型,以便对新的、看不见的数据进行正确分类(归纳式 SSL)。SSL 中的所有技术都基于一个或多个与半监督平滑度、集群一致性和流形一致性相关的假设。

不同的 SSL 技术适用于不同的情况。简单的自训练 SSL 是直接的,并且与大多数监督学习算法一起工作;当数据来自不止一个域时,协同训练 SSL 是一种合适的方法。当集群一致性假设成立时,可以使用集群和标签 SSL 技术;直推图标签传播利用了“接近度”测量,这在计算上可能是昂贵的。直推式 SVM 对线性或非线性数据表现良好,我们看到一个使用JKernelMachines库在 UCI 乳腺癌数据集上训练具有高斯核的 TSVM 的例子。在本章 SSL 部分的结论部分,我们使用图形化 Java 工具 KEEL 展示了比较 SSL 模型的实验。

我们在本章的后半部分介绍了主动学习。在这种类型的学习中,使用各种策略来查询数据集的未标记部分,以便向专家呈现将证明在从整个数据集学习中最有效的示例。随着专家或甲骨文向选定的实例提供标签,学习者稳步提高其概括能力。人工智能技术的特征在于分类器的选择,或者分类器委员会,更重要的是,在于所选择的查询策略。这些策略包括不确定性抽样,其中置信度最低的实例是查询;版本抽样,其中选择解释训练数据的假设子集;以及数据分布抽样,其中涉及通过减少泛化错误的选择来改进模型。我们提出了一个使用 UCI 鲍鱼数据集的案例研究,以展示实践中的主动学习。这里使用的工具是用于主动学习的 JCLAL Java 框架。

参考文献

  1. 亚罗斯基博士(1995 年)。无监督的词义消歧对抗监督的方法。计算语言学协会第 33 届年会会议录(第 189-196 页)
  2. 布卢姆和米切尔(1998 年)。通过联合训练将标记和未标记的数据结合起来。计算学习理论研讨会论文集。
  3. Demiriz,a .,Bennett,k .和 Embrechts,M .(1999 年)。使用遗传算法的半监督聚类。工程中的人工神经网络。
  4. Yoshua Bengio,Olivier Delalleau,Nicolas Le Roux (2006 年)。标签传播和二次准则。《半监督学习》第 193-216 页
  5. T.约阿希姆(1998 年)。使用支持向量机进行文本分类的直推推理,ICML。
  6. B.已解决(2008 年)。好奇的机器:结构化实例的主动学习。威斯康星大学麦迪逊分校博士论文。
  7. D.安格鲁因(1988)。查询和概念学习。机器学习,2:319–342。
  8. D.刘易斯和 w .盖尔(1994 年)。训练文本分类器的序贯算法。美国计算机学会 SIGIR 信息检索研究与发展会议论文集,第 3-12 页。ACM/Springer。
  9. 韩升洙、奥珀和宋波林斯基(1992)。委员会查询。《美国计算机学会计算学习理论研讨会论文集》, 287-294 页。
  10. D.科恩、l .阿特拉斯、r .拉德纳、M. El-Sharkawi、R. Marks II、M. Aggoune 和 D. Park (1992 年)。用查询和选择性采样训练连接主义者网络。神经信息处理系统进展。摩根·考夫曼。
  11. D.科恩,l .阿特拉斯和 r .拉德纳(1994 年)。主动学习提高概括能力。机器学习,15(2):201–221。
  12. D.刘易斯和 j .卡特莱特(1994 年)。用于监督学习的异质不确定性采样。《机器学习国际会议论文集》(ICML),第 148–156 页。摩根·考夫曼。
  13. 南 Dasgupta、A. Kalai 和 C. Monteleoni (2005 年)。基于感知器的主动学习分析。《学习理论会议录》,第 249-263 页。斯普林格。
  14. 南 Dasgupta、D. Hsu 和 C. Monteleoni (2008 年)。一种通用的不可知主动学习算法。《神经信息处理系统(NIPS)进展》,第 20 卷,第 353–360 页。麻省理工出版社。
  15. T.米切尔(1982)。概括为搜索。人工智能,18:203–226。*

五、实时流机器学习

在第二章、现实世界监督学习的实用方法、第三章、无监督机器学习技术和第四章、半监督和主动学习中,我们讨论了各种分类、聚类、离群点检测、半监督和主动学习技术。从现有或历史数据中完成的学习形式传统上被称为批量学习。

所有这些算法或技术都假定三件事,即:

  • 有限的训练数据可用于构建不同的模型。
  • 学习的模型将是静态的;也就是说,模式不会改变。
  • 数据分布也将保持不变。

在许多真实世界的数据场景中,要么没有先验的训练数据可用,要么数据本质上是动态的;也就是说,随时间不断变化。许多现实世界的应用程序也可能有具有瞬时性质的数据,这些数据以高速度或高容量出现,例如物联网传感器信息、网络监控和 Twitter 订阅源。这里的要求是立即从实例中学习,然后更新学习。

动态数据的性质和潜在变化的分布使得现有的基于批处理的算法和技术通常不适合这样的任务。这就产生了机器学习中的自适应或可更新或增量学习算法。这些技术可用于从数据流中不断学习。在许多情况下,通过将大数据学习问题转换为增量学习问题,并一次检查一个示例,也可以克服从大数据学习的缺点,这是由于大数据的大小以及需要将整个数据放入内存中。

在这一章中,我们将讨论假设,并讨论监督和非监督学习中促进实时或流机器学习的不同技术。我们将使用开源库大规模在线分析 ( MOA )来执行真实世界的案例研究。

本章的主要部分是:

  • 假设和数学符号。
  • 基本的流处理和计算技术。讨论流计算、滑动窗口(包括 ADWIN 算法)和采样。
  • 概念漂移和漂移检测:介绍学习进化系统和数据管理,检测方法,以及隐式和显式适应。
  • 增量监督学习:讨论从标记流数据学习,建模技术,包括线性,非线性和集成算法。接下来是验证、评估和模型比较方法。
  • 增量无监督学习:聚类技术类似于第三章、中讨论的无监督机器学习技术,包括验证和评估技术。
  • 使用离群点检测的无监督学习:基于分区和基于距离,以及使用的验证和评估技术。
  • 基于流的学习的案例研究:介绍 MOA 框架,提出业务问题,特征分析,映射到机器学习蓝图;描述实验,并以结果的展示和分析结束。

假设和数学符号

这里有一些由许多流机器学习技术做出的关键假设,我们将在这里明确地陈述它们:

  • 数据中的个特征是固定的。
  • 数据具有小到中等的维度或特征数量,通常有数百个。
  • 示例或训练数据的数量可以是无限的或非常大的,通常为数百万或数十亿。
  • 监督学习或聚类中的类别标签的数量很小且有限,通常少于 10 个。
  • 正常情况下,内存是有上限的;也就是说,我们无法将所有的数据都存储在内存中,因此从数据中学习必须考虑到,尤其是像 K 近邻这样的懒惰学习者。
  • 通常,处理事件或数据的时间有一个上限,通常是几毫秒。
  • 数据中的模式或分布可以随着时间而演变。
  • 学习算法必须在有限时间内收敛到一个解。

D[t]= {x[I],y [i] : y = f(x) }为时间 t ∈ {1,2,… i }的给定数据。

增量学习算法产生模型/假设序列{.., G [j-1] ,G [j] , G [j+1] ..}对于数据序列而模型/假设Gt 24】I 只取决于之前的假设Gt 28】I-1 和当前数据DI。

基本流处理和计算技术

我们现在将描述一些可以在数据流上执行的基本计算。如果我们必须在内存和速度有限的情况下运行汇总操作,如聚合或直方图,我们可以肯定需要某种折衷。在这些情况下,有两种众所周知的近似方法:

  • ϵ 近似值:计算在误差的分数 ϵ 内接近精确值。
  • ( ϵ 、??、δ )近似值:计算在 1 ϵ 内接近精确值,概率在 1—δ内。

流计算

我们将举例说明一些基本计算和聚合,以强调当我们必须在内存受限的情况下计算基本操作,同时还要考虑整个数据时,批处理和基于流的计算之间的差异:

  • 频率计数或点查询:计数最小草图的通用技术已经成功应用于对数据流进行各种汇总。主要的技术是创建一个大小为 x 的窗口。然后,给定期望的概率(δ)和容许误差( ϵ ,可以使用 w = 2/ ϵStream computations创建存储器中数据的大小。与每一行相关联的是一个 hash 函数: h (。).该将值 x 统一转换为区间[1,2 … w 中的值。这种查找和更新方法可用于执行值、点积或频率计数的点查询。
  • 非重复计数:Hash-Sketch 的通用技术可用于执行“非重复值”查询或计数。给定输入流值 x ∈ [0,1,2…的域。N-1],哈希函数 h ( x )跨[0,1,…2l-1]均匀映射值,其中 L=O(log N)
  • 平均值:计算平均值而不需要存储所有的值是非常有用的,通常使用递归方法,其中只需要观察值的数量 (n) 和到目前为止看到的值的总和(≘xn:Stream computations
  • 标准偏差:与平均值一样,标准偏差可以使用无记忆选项来计算,该选项只有观察次数( n )、目前所见值的总和(≘x??【n)以及这些值的平方和(≘x[n]²):Stream computations
  • 相关系数:给定一个两个不同值的流,很多算法需要计算两者之间的相关系数,这可以通过维护每个流的运行总和(∈xn 和∈yn)、平方和(∈xn2²和∈来完成相关性由Stream computations给出

推拉窗

通常,你不需要完整的数据来计算统计或总结,只需要“最近的过去”。在这种情况下,滑动窗口技术用于计算汇总统计数据,方法是保持窗口大小固定或可调整,并在最近的过去移动它。

自适应滑动窗口 ( ADWIN )是一种众所周知的技术,用于检测变化作为以及估计计算中所需的值。ADWIN 背后的思想是保持最后看到的值的可变长度窗口,其特征是窗口具有统计上与窗口内的平均值没有变化的事实一致的最大长度。换句话说,当且仅当新的输入值会改变平均值时,旧的值才会被丢弃。这具有双重优势,既可以记录变化,又可以在最近的流中维护动态值,如聚合值。可以使用众所周知的 Hoeffding 界限来确定用于投掷物品的主观概念“足够大”,该界限为:

Sliding windows

这里的Sliding windows分别是大小为| * W * [ 0 ] |和| * W * [ 1 ] |的两个窗口W0 和W[1[1[1]之间的调和平均值,其中 W 包含更近的元素。此外,设Sliding windowsSliding windows为各自的计算平均值。]]

该算法可以概括为:

  1. ADWIN ( x:输入流,δ:置信度)

  2. init(W)//初始化窗口 W

  3. while (x){

    W←W∩{x[t]}//将新实例xt 添加到窗口头 W

  4. 重复 W←W–xold//从窗口尾部删除元素

  5. Sliding windows < Sliding windows适用于 W 的每一次拆分

  6. 输出Sliding windows

  7. }

ADWIN 的还表明,它提供了假阳性和假阴性的理论界限,这使得它成为一种非常有前途的技术。

取样

在许多基于流的算法中,需要减少数据或选择数据子集进行分析。对于基于流的数据,必须增强对整个数据进行采样的正常方法。

必须解决的采样中的关键问题是样本的无偏性如何,以及它们在产生流的总体中的代表性如何。在非流式环境中,这完全取决于样本大小和采样方法。均匀随机抽样(第二章,现实世界监督学习的实用方法)是用来减少批量数据世界中的数据的最著名的技术之一。储层取样技术被认为是在给定存储器限制的情况下减少数据的非常有效的方法。

储层采样的基本思想是保持一个固定大小的储层或样本,比如说 k ,进入河流的每个元素都有一个替换储层中较老元素的概率 k/n 。详细算法如下所示:

ReservoirSampling(x:inputstream, k:sizeOfReservoir)
//add first k elements to reservoir
for(i = 0; i < k; i++)
  addToReservoir(x)
  while (x){
    for(i = 0; i < k; i++)
    //flip a coin to get random integer
    r = randomInteger[1..n]
    if(r ≤ k){
      //move it inside the reservoir
      addToReservoir(x)
      //delete an instance randomly from reservoir
      position = randomInteger[1..k]
      removeInstance(position)
    }
}

还有对这些方法的扩展,如最小采样和减载,克服了与基本方法相关的一些问题。

概念漂移和漂移检测

正如在本章的介绍中所讨论的,无限流的动态本质与静态学习的基本原则完全相反;也就是说,数据或模式的分布保持不变。尽管可能会有快速突然的变化,这里讨论的是缓慢渐进的变化。这些缓慢、渐进的变化很难被检测到,从噪声中分离这些变化变得更加困难:

Concept drift and drift detection

图 1 底部面板中颜色从黄色到蓝色的渐变说明了概念漂移。采样数据反映了数据分布的潜在变化,必须检测到这种变化并学习新的模型。

在过去的二十年中,各种研究中描述了几种技术,如下图所示进行分类:

Concept drift and drift detection

图 2 漂移检测技术的类别

数据管理

的主要思想是在内存中管理一个与数据的动态特性一致的模型。

部分记忆

这些技术使用内存缓冲区中最近使用的数据来学习或获取汇总信息。前面讨论的关键问题是:有效检测变化和有效学习的合适窗口大小是多少?在基于固定窗口大小的技术中,我们使用队列的思想,其中具有最近时间戳的新实例进入,而具有最早时间戳的实例被驱逐。因此,该窗口包含所有最近的足够多的例子,并且大小通常基于存储器的物理可用性和队列中数据元素的大小来选择。在自适应窗口大小中,队列与检测算法结合使用。当检测算法基于性能评估指示漂移的迹象时,可以减小窗口大小以有效地移除不再有助于模型的旧示例。

全部记忆

的想法是存储所有例子或数据的足够的统计数据。一种方法是给数据加上权重,权重会随着时间而衰减。使用λ给出的速率因子进行指数加权可能非常有效:

wλ=exp(–λ* I)

检测方法

给定观察到给定数据的概率*【P(X)】*,模式/类别 P(C) 的概率,以及给定类别 P(X|C) 的数据的概率——这是模型——检测方法可以在高层次上分为两类:

  • 监控模型、分类器或 P(C|X) 的发展或性能
  • 监测环境中的分布或观察 P(X)P(C)P(X|C)

监控模式演变

虽然这种方法是基于的假设,即模型的所有学习都是静态的,并且数据来自独立的、相同的分布 ( i.i.d. ),这在许多应用中并不成立,但它仍然被证明是有效的。接下来描述一些众所周知的技术。

Widmer 和 Kubat

这个是观察错误率或错误分类率以及模型变化的最早方法之一,例如由于新分支导致的树结构。使用这些和已知的阈值,学习窗口大小增加或减少。

漂移检测法或 DDM

这个方法假设被观察的参数,比如正确或错误标记事物的分类器,是一个遵循二项式分布的二进制随机变量。它假设错误分类的概率为概率 pi,标准偏差为Drift Detection Method or DDM,其中在序列中的第I第点计算值。然后,该方法使用两个级别:

  • 预警级别:当p[I]+s[I]≥p[min]*+2 s[min]
  • 检测电平:当p*[I]+s[I]≥p[min]+3 s[min]

在“警告”和“检测”级别之间的所有例子被用于训练新的分类器,当达到“检测”级别时,该分类器将替换“不良”分类器。

早期漂移检测法或 EDDM

EDDM 使用与 DDM 相同的技术,但稍有改动。它使用分类率(即召回率)而不是错误率(1-准确度),并使用正确预测和两个错误预测之间的距离来改变级别。

EDDM 计算两个误差之间的平均距离p[I]^'和两个s[I]'。这些级别是:

  • 预警级别:(p[I]^'+2 [sI]'*)‖(*p'[max]+2 **s^'[max])<α
  • 检测等级:(p[I]'+2 [s[I]')‖(p^'[max]+2 **s^'[max])<β]

参数 αβ 通常由用户分别调整到 90%和 95%左右。

监控分布变化

当没有模型或分类器来检测变化时,我们应用使用某种形式的统计测试来监控分布变化的技术。这些测试用于识别分布变化。由于各种假设,无论是参数性的还是非参数性的,以及不同的偏见,很难具体说出哪一种效果最好。这里我们提供一些众所周知的统计测试。

韦尔奇 t 检验

这个是对学生 t 测试和两个样本的改编。该测试适于取大小为N1 和N2 的两个窗口,其均值为Welch's t testWelch's t test且方差为Welch's t testWelch's t test以计算 p 值,并使用该值拒绝或接受零假设:

Welch's t test

科尔莫戈罗夫-斯米尔诺夫试验

该统计测试通常用于比较两个分布之间的距离,并验证它们是否低于特定阈值。这可以通过使用具有不同累积分布函数的两个不同样本大小的窗口 N [1] 和N[2]F1 和 F2KS来适应变化检测:

Kolmogorov-Smirnov's test

假设两个分布相似的零假设,当且仅当Kolmogorov-Smirnov's test通过在 Kolmogorov-Smirnov 表中查找获得时,以 α 的置信度被拒绝。

CUSUM 和 Page-Hinckley 试验

累积和 ( 累积和)被设计为以指示输入的平均值何时明显不同于零:

g0= 0,g[t]=max(0,g[t–1])+ϵ[t]–v

g [t] > h 时,我们引发变化检测,其中( h,v )为用户自定义的参数。请注意,累积和检验是无记忆的,并且是单侧或不对称的,只检测增加。

Page Hinckley 测试类似于 CUSUM,但有一点小小的变化,如下所示:

g 0 = 0,gt=g[t–1]+ϵ[t]–v

为了增加和减少数值,我们使用G[t]= min(G[t],G[t–1]或 G[t]= max(G[t],G[t–1]

适应方法

显式和隐式适应是两种众所周知的技术,用于在检测到变化时适应环境变化。

显性适应

在显式适配中,使用了以下附加技术:

  • 使用新数据从头开始重新训练模型,以便以前的模型或数据不会影响新模型
  • 使用更改或新数据更新模型,以便平稳过渡-假设更改是渐进的,而不是剧烈的
  • 当协作方法优于任何单一模型时,创建一个随时间学习的模型序列或集合

内隐适应

在隐式适应中,我们一般使用集成算法/模型来适应概念的变化。这可能意味着使用不同的组合,从单个分类器到集成预测,再到使用 ADWIN 进行基于窗口的自适应分类器,所有这些都属于隐式自适应的选择范围。


增量监督学习

这个部分介绍了当每个实例的真实标签可用时,从流数据中学习的几种技术。特别是,我们提出了适合增量学习的线性、非线性和基于集成的算法,以及评估和验证这些模型所需的方法,记住学习受到内存和 CPU 时间限制的约束。

建模技术

建模技术分为线性算法、非线性算法和集成方法。

线性算法

这里描述的线性方法几乎不需要修改来处理流数据。

带有损失函数的在线线性模型

在该算法中可以使用不同的损失函数,例如铰链、逻辑和平方误差。

输入和输出

在这些方法中只使用数字特征。应用权重更新的损失函数 l 和学习速率λ的选择被作为输入参数。输出通常是可更新的模型,其给出的预测伴随有置信度值。

它是如何工作的?

基本算法假设线性权重组合,类似于第二章、现实世界监督学习的实用方法中解释的线性/逻辑回归。流或在线学习算法可以总结为:

  1. for(t=1,2,…T)do

    1. x[T]=receive();//接收数据
    2. How does it work?;//预测标签
    3. y[t]=observe true label();//得到真实标签
    4. 损失=l(w[t],(xt,w[t]);//计算损耗
    5. if(l(wt,( x t, w t )) > 0 然后
    6. How does it work?;//更新权重
    7. 结束
  2. 结束

可以根据问题的类型插入不同的损失函数;下面是一些众所周知的类型:

  • 分类:

    • 铰链损耗: l ( w [t] , x [t] ,w[t])= max(0,1-YF(x[t], w [t] )
  • 回归:

    • 平方损失:How does it work?

随机梯度下降 ( SGD )可以被认为是改变权重以最小化平方损失,就像在前面的损失函数中一样,但是在每个例子中沿着梯度的方向进行。权重的更新可以描述为:

How does it work?How does it work?

优点和局限性

在线线性模型与第二章、现实世界监督学习实用方法中描述的线性模型具有相似的优点和缺点:

  • 在某种程度上是可解释的,因为每个特征的权重给出了对每个特征的影响的洞察
  • 假设线性关系、附加和不相关的要素,因此不会对复杂的非线性现实世界数据进行建模
  • 对数据中的异常值非常敏感
  • 非常快,通常是最先尝试或基线的算法之一

在线朴素贝叶斯

应用贝叶斯定理来获得预测作为后验概率,给定一个 m 维输入:

Online Naïve Bayes

输入和输出

在线朴素贝叶斯可以接受分类和连续输入。分类特征更容易,因为算法必须维护每个类的计数,同时计算给定类的每个特征的P(Xj|Y)概率。对于连续特征,我们必须假设一个分布,例如高斯分布,或者以增量方式计算在线核密度估计值,或者以增量方式离散化数字特征。输出是可更新的模型,可以预测带有置信度值的类别。作为概率模型,它们具有分布在 0 和 1 之间的更好的置信度得分。

它是如何工作的?
  1. for(t = 1,2,…T)do

    1. x[T]=receive();//接收数据
    2. increment counters(xt[t]);//更新P(Xj| Y)
    3. How does it work?//后验概率
  2. 结束

优点和局限性
  • 这个是最快的算法,并且具有较低的内存占用以及计算成本。它非常受在线或快速学习者的欢迎。
  • 假设数值特征的分布或某些偏差会影响预测质量。

非线性算法

正在使用的最流行的非线性流学习分类器之一是 Hoeffding 树。在接下来的小节中,将介绍 Hoeffding 界限的概念,以及算法本身。

赫夫丁树或快速决策树(VFDT)

胡夫丁树 ( HT )背后的关键思想是胡夫丁界限的概念。给定一个实值随机变量 x ,其值域的大小为 R ,假设我们有 nx 的独立观测值,并将平均值计算为Hoeffding trees or very fast decision trees (VFDT)

赫夫丁界限指出,在概率为 1–δ的情况下,变量 x 的实际均值至少为Hoeffding trees or very fast decision trees (VFDT),其中Hoeffding trees or very fast decision trees (VFDT)

赫夫丁界限独立于生成样本的概率分布,并且仅通过 n 个示例给出了良好的近似。

赫夫丁界限的思想被用于叶子展开。如果 x [1] 是最具信息性的特征并且 x [2] 排在第二位,那么使用用户定义的分割函数 G 进行分割。)的方式使得:

Hoeffding trees or very fast decision trees (VFDT)

输入和输出

分类数据和连续数据都可以是数据输入的一部分。在许多实现中,连续特征被离散化。期望的概率参数 1–δ和决策树通用的分裂函数 G (。)成为输入的一部分。输出是可解释的决策树模型,并且可以用类和置信度值来预测/学习。

它是如何工作的?

HoeffdingTree(x:inputstream,G(。):splitFunction,δ:probabilityBound)

  1. 假设 HT 是一棵单叶(根)树

  2. InitCounts( n [ijk] , root )

  3. for(t=1,2,…T)do//来自 stream

    1. x*[T]= receive();*//接收数据
    2. y[t]= obtaintruelable();//获取真实标签
    3. HT grow((xt,yt), HT ,δ)
    4. end

HT grow((xt,yt), HTG (。), δ)

  1. *l = sort((*x[t], y [t] ),HT);//使用 HT 将数据排序到叶子 l

  2. update counts(n[ijk],l); //更新叶子 l 处的计数

  3. if(examplessofarnotofsame class(); //检查是否有多个类

  4. computefeachfeature(,G(。))

    1. How does it work?

赫夫丁树有一些有趣的特性,例如:

  • 它们是稳健的低方差模型
  • 它们表现出较低的过度拟合
  • 由于 Hoeffding 界限,理论上保证错误率的概率很高

赫夫丁树有多种变体可以适应概念漂移,称为概念适应 VFDT。他们在流上使用滑动窗口的概念。决策树中的每个节点都保持足够的统计量;基于 Hoeffding 测试,当准确性更好时,替换子树被生长和交换。

优点和局限性

优点和局限性如下:

  • 基本 HT 有属性接近所选的问题,ϵ 和打破平局。决定任何节点的属性数量也是一个问题。一些问题在 VFDT 得到了解决。
  • 随着树的变化,扩展树的内存限制以及在实例上花费的时间成为一个问题。
  • 如前所述,VFDT 在模式变化方面有问题,CVFDT 试图克服这些问题。对于实时和大数据,它是最优雅、快速、可解释的算法之一。

集成算法

集成学习背后的想法类似于批量监督学习,其中多种算法被训练并以某种形式组合起来,以预测看不见的数据。即使在网络环境中,不同的教学方法也能带来同样的好处;例如,使用不同类型的多种算法,使用相似类型但具有不同参数或采样数据的模型,所有这些都使得找到不同的搜索空间或模式,并减少总误差。

加权多数算法

加权多数算法 ( WMA )训练一组基本分类器并组合它们的投票,以某种方式加权,基于多数做出预测。

输入和输出

对输入类型的约束(仅分类、仅连续或混合)取决于所选的基本分类器。模型的可解释性取决于所选的基础模型,但很难解释模型组合的输出。当预测不正确时,每个模型的权重通过每个示例/实例的因子( β )来更新。权重和模型的结合可以给出一些可解释性的概念。

它是如何工作的?

weighted majority algorithm(x:inputstream,hm: m 个学习者模型)

  1. 初始化权重(w [i] )

  2. for(t=1,2,…T)do

    1. xT*= receive();*
    2. foreach 模型 hkh
    3. y[I]↓hk;
  3. How does it work? How does it work?

  4. 否则How does it work?

  5. 如果已知 y

    1. i = 1 到 m do

    2. 如果yI≦y

    3. wi←wI**β*

      如果…就会结束

      结束于

  6. 结束

优点和局限性

优点和局限性如下:

  • WMA 有个简单的实现和个系综误差的理论界限
  • 困难在于选择正确的基础算法作为模型和池中模型的数量

在线装袋算法

正如我们在关于监督学习的章节中看到的,bagging 算法从训练集中创建不同的样本,并使用多种算法进行学习和预测,减少了方差,在学习中非常有效。

输入和输出

对输入类型的约束(仅分类、仅连续或混合)取决于所选的基本分类器。基础分类器算法以及与该算法相对应的参数选择也是输入。输出是可以基于选择的分类器预测类别/置信度的学习模型。

它是如何工作的?

基本分批装袋算法需要完整的数据来创建不同的样本,并将这些样本提供给不同的分类器。Oza 的在线 Bagging 算法改变了这种约束,使从无界数据流中学习成为可能。基于采样,原始算法中的每个训练实例被复制多次,并且每个基础模型用原始实例的 k 个副本来训练,其中:

P(k)= exp(–1)/k!

这相当于取一个训练样本,为每个分类器选择 k ~泊松(1) ,并更新基本分类器 k 次。因此,消除了对示例数量的依赖,并且该算法可以在无限流上运行:

OnlineBagging(x: inputstream,h [m] : m 个学习模型)

  1. 初始化所有 m ∈ {1,2,..M

  2. for(t=1,2,…T)do

    1. xT*= receive();*

    2. foreach 模型 m = {1,2,.. M }

      鱼 (1)

      更新型号(h [m] ,w,x[t])

    3. 结束

  3. 返回

  4. How does it work?

优点和局限性

优点和局限性如下:

  • 经验表明,它是最成功的在线或流算法之一。
  • 必须在不查看其他实例的情况下将权重赋予数据实例;这减少了对不同加权方案的选择,这些方案可以批量获得并且在模型性能上是好的。

性能完全由选择的 M 个学习者决定——用于问题领域的学习者类型。我们只能通过采用模型验证技术一节中描述的不同的验证技术来决定这个选择。

在线助推算法

监督增强算法采用许多精度略高于随机的弱学习器,并通过对错误分类的样本进行迭代采样来组合它们,以产生一个强学习器。Oza 的在线增强算法中的概念是相同的,只是对连续数据流进行了修改。

输入和输出

对输入类型的约束(仅分类、仅连续或混合)取决于所选的基本分类器。基本分类器算法和它们各自的参数是输入。输出是可以基于选择的分类器预测类别/置信度的学习模型。

它是如何工作的?

批量升压改为在线升压修改如下:

  1. M 基本模型保留两组权重, λ ^c 是维度为 M 的向量,携带正确分类实例的权重之和,λw 是维度为 M 的向量,携带错误分类实例的权重之和。

  2. 权重被初始化为 1。

  3. 给定一个新的实例( x [t] , y [t] ),该算法经历更新基本模型的迭代。

  4. 对于每个基础模型,重复以下步骤:

    1. 对于第一次迭代, k =泊松(λ) 被设置,并且学习分类器使用( x [t] ,y[t])
    2. Ifh 来更新算法(这里表示为h*[1】k]次) 增加λw1, ϵ [1] ,计算被h*1 错误分类的加权分数,并将该示例的权重乘以 1/2 ϵ [1] 。
优点和局限性

优点和局限性如下:

  • 同样,表现是由多个学习者的选择、他们的类型和问题的特定领域决定的。模型验证技术一节中描述的不同方法有助于我们选择学习者。
  • 理论和经验表明,Oza 的在线增强并非“无损”;也就是说,模型与其批次版本不同。因此,它受到性能问题的困扰,并且近年来已经研究了不同的扩展来提高性能。

在线设置中的验证、评估和比较

在中,与我们在前面章节中看到的机器学习模式相比,流学习对执行验证和评估的核心步骤提出了独特的挑战。我们不再处理批量数据的事实意味着验证评估和模型比较的标准技术必须适应增量学习。

模型验证技术

在离线或批量设置中,我们讨论了调整算法参数或测试算法泛化能力的各种方法,作为防止过拟合的对策。批次标记数据中的一些技术,如交叉验证,不能直接应用于在线或流设置。下面给出了在线或流设置中最常用的技术。

事前评估

顺序评估法是一种向算法提供实例,然后使用损失函数与实际标签进行比较来测量算法输出预测的方法。因此,该算法总是在看不见的数据上测试,并且不需要“维持”数据来估计泛化。基于实际值和预测值之间的累积损失函数之和来计算先验误差,由下式给出:

Prequential evaluation

为了更好地估计变化的数据,进行了三种基本的概率评估,它们是:

  • 使用地标窗口(基本)
  • 使用滑动窗口
  • 使用遗忘机制

最后两种方法是对前面描述的技术的扩展,在这两种方法中,您可以对随时间推移而减少的预测设置权重或衰减因子。

维持评估

这个是批学习的保持机制或“独立测试集”方法的扩展。这里,基于一些固定的间隔或算法已经看到的例子/实例的数量,总的标记集或流数据被分成训练集和测试集。想象一个连续的数据流,我们在Holdout evaluationHoldout evaluation放置众所周知的间隔来比较评估指标,如下一节所讨论的。

受控排列

上述机制的问题在于,它们提供了在时间内的“平均”行为,并且可能掩盖一些基本问题,例如算法在开始时做得很好,而在结束时由于漂移而做得很差。前述方法的优点在于,它们可以应用于真实的输入流以获得估计。克服这一缺点的一种方法是创建不同的随机数据集,其中在保持时间上的接近性的同时稍微打乱顺序,并且在许多这些随机集上进行评估。

评估标准

大多数评估标准与监督学习章节中描述的标准相同,应根据业务问题、业务问题到机器学习技术的映射以及从中获得的好处进行选择。在本节中,为读者总结了最常用的在线监督学习评估标准:

  • 准确率:由学习算法Evaluation criteria得到正确分类的真阳性和真阴性的的度量
  • 平衡精度:当类别不平衡时,平衡精度常用作为衡量标准。平衡准确度是特异性和敏感性的算术平均值。在二元分类问题中,当从相同的概率中抽取正面和负面实例时,它也可以被认为是准确性。
  • ROC 曲线下面积(AUC):ROC 曲线下面积给出了算法泛化的良好度量。接近 1.0 意味着该算法具有良好的泛化能力,而接近 0.5 意味着它更接近随机猜测。
  • Kappa 统计量(K):Kappa 统计量用于度量分类中随机猜测的期望精度的观察精度。在在线学习中,Kappa 统计量是通过计算先验精度( p o)和随机分类器精度( p c)来使用的,并由以下公式给出:Evaluation criteria
  • Kappa Plus 统计量:Kappa Plus 统计量是对通过用持久分类器代替随机分类器而获得的 Kappa 统计量的修改。持久分类器是基于前一个实例的标签或结果来预测下一个实例的分类器。

如前所述,在考虑“漂移”或概念变化时,除了这些标准测量值之外,还使用一些已知的测量值来给出定量测量值:

  • 真实变化检测概率:通常用合成数据或已知变化的数据来衡量。它赋予学习算法检测变化的能力。
  • 假警报概率:在线设置使用检测时间的倒数或平均运行长度,而不是使用离线设置中的假阳性率,平均运行长度是使用假阳性检测之间的预期时间计算的。
  • 检测延迟:这是指识别漂移所需的时间。

比较算法和指标

当在在线设置中比较两个分类器或学习者时,通常的机制是采用性能度量的方法,例如错误率,并使用适合在线学习的统计测试。下面描述两种广泛使用的方法:

  • McNemar test: McNemar's test is a non-parametric statistical test normally employed to compare two classifiers' evaluation metrics, such as "error rate", by storing simple statistics about the two classifiers. By computing statistic a, the number of correctly classified points by one algorithm that are incorrectly classified by the other, and statistic b, which is the inverse, we obtain the McNemar's Test as:Comparing algorithms and metrics

    检验遵循χ2 分布,p 值可用于检查统计显著性。

  • Nemenyi test: When there are multiple algorithms and multiple datasets, we use the Nemenyi test for statistical significance, which is based on average ranks across all. Two algorithms are considered to be performing differently in a statistically significant way if the ranks differ by a critical difference given by:Comparing algorithms and metrics

    这里,K =算法数量,N =数据集数量。

假设临界差值遵循 Student-T 分布。

使用聚类的增量无监督学习

数据流中聚类背后的概念与批处理或离线模式中的概念相同;也就是说,寻找在数据中聚集在一起的感兴趣的聚类或模式,同时将处理所需的有限内存和时间限制作为约束。对现有算法进行单遍修改或保持小的存储器缓冲区以对现有算法进行小批量版本,构成了对所有算法进行的基本改变,以使它们适合于流或实时无监督学习。

建模技术

在线学习的聚类建模技术分为基于分区的、基于层次的、基于密度的、基于网格的,类似于批量聚类的情况。

基于分区

基于分区的算法的概念类似于基于批处理的聚类,其中形成 k 个聚类以优化某些目标函数,例如最小化聚类间距离、最大化聚类内距离等等。

在线 k-Means

k-Means 是最流行的聚类算法,它将数据划分为用户指定的 k 聚类,主要是为了最小化质心和聚类指定点之间的平方误差或距离。我们将举例说明 k-Means 的一个非常基本的在线改编,其中存在几个变体。

输入和输出

主要地,数字特征被认为是输入;一些工具采用分类特征,并将它们转换成某种形式的数字表示。算法本身将参数的聚类数 k 和最大迭代次数 n 作为输入。

它是如何工作的?
  1. 输入数据流被认为是无限的,但是具有恒定的块大小。

  2. 块大小的存储器缓冲器被保留用于存储数据或数据的压缩表示。

  3. 最初,块大小的第一个数据流被用于寻找簇的 k 质心,质心信息被存储并且缓冲器被清空。

  4. 对于达到块大小时的下一个数据:

    1. 对于最大迭代次数或者直到质心没有变化:
    2. 用缓冲数据和当前质心执行 k-Means。
    3. 最小化质心和分配给聚类的数据之间的平方和误差。
    4. 迭代后,清空缓冲区,获得新的质心。
  5. 重复步骤 4,直到数据不再可用。

优点和局限性

优点和局限性如下:

  • 与基于批处理的类似,检测到的聚类的形状取决于距离度量,并且不适用于具有不规则形状的问题域。
  • 在基于批处理的情况下,参数 k 的选择会限制具有许多不同模式或聚类的数据集的性能。
  • 离群点和缺失数据会给在线 k-Means 的聚类行为带来很多不规则性。
  • 如果所选择的缓冲区大小或迭代 k-Means 运行的流的块大小很小,它将不会找到正确的聚类。如果选择的块大小很大,可能会导致速度变慢或丢失数据更改。诸如非常快速 k-Means 算法 ( VFKM )之类的扩展使用 Hoeffding 界限来确定缓冲区大小,在很大程度上克服了这种限制。

基于层次和微聚类

层次化的方法通常是基于聚类特征 ( CF )和聚类树 ( CT )的。我们将描述层次化聚类的基础和元素以及 BIRCH 算法,CluStream 算法基于该算法的扩展。

群集功能是一种以压缩方式计算和保存有关群集的汇总统计信息的方法,而不是保留属于群集的全部数据。在一个 d 维数据集中,集群中有 N 个点,计算每个维度的总和 LS 和每个维度的数据总平方和 SS 形式的两个集合,并且表示这个三元组的向量形成集群特征:

CF [j] = < N,LS [j] ,SS[j]>

这些统计数据有助于总结整个集群的信息。使用以下公式可以很容易地计算群集的质心:

质心[j]= LS[j]/N

可以使用以下公式来估计群集的半径:

Hierarchical based and micro clustering

可以使用以下公式来估计簇的直径:

Hierarchical based and micro clustering

CF 向量具有很好的增量和附加属性,这在流或增量更新中非常有用。

对于增量更新,当我们必须更新 CF 向量时,以下情况成立:

Hierarchical based and micro clusteringHierarchical based and micro clusteringHierarchical based and micro clustering

当两个 cf 必须合并时,以下情况成立:

Hierarchical based and micro clusteringHierarchical based and micro clusteringHierarchical based and micro clustering

聚类特征树 ( CF 树)代表的一种层次树结构。CF 树的构建需要两个用户定义的参数:

  • 分支因子 b ,它是任何节点可以拥有的子集群或非叶节点的最大数量
  • 最大直径(或半径) T ,一个 CF 父节点的叶节点可以吸收的样本数

插入等 CF 树操作通过递归遍历 CF 树并使用 CF 向量基于距离度量寻找最近的节点来完成。如果叶节点已经吸收了由参数 T 给出的最大元素,则该节点被拆分。在操作结束时,CF 向量会针对其统计信息进行适当更新:

Hierarchical based and micro clustering

图 3 示出了分层结构的示例聚类特征树。

我们将按照这个概念来讨论 BIRCH ( 平衡迭代约简和聚类层次)。

输入和输出

BIRCH only 接受数字特征。CF 和 CF 树参数,例如分支因子 b 和树叶的最大直径(或半径) T 是用户定义的输入。

它是如何工作的?

BIRCH 是为超大型数据库设计的,它原本是一个两遍算法;即扫描一次整个数据,然后再重新扫描一次,这样就是一个 O(N) 算法。它可以很容易地进行在线修改,作为保留相同属性的单遍算法:

  1. 在第一阶段或扫描中,它检查数据,并通过顺序访问点和执行前面讨论的 CF 树操作来创建内存中的 CF 树结构。
  2. 在第二阶段,一个可选的阶段,我们删除离群值并合并子聚类。
  3. 第三阶段是克服第一阶段中的数据顺序问题。我们使用凝聚层次聚类来重构 CF 树。
  4. 第四阶段是最后一个阶段,这是一个可选阶段,用于计算统计数据,如质心,将数据分配给最近的质心,等等,以提高效率。

优点和局限性

优点和局限性如下:

  • 这是最流行的算法之一,可以对大型数据库或数据流进行线性扩展。
  • 它具有 CF 和 CF 树形式的紧凑内存表示,用于对输入数据进行统计和操作。
  • 它比大多数算法更好地处理异常值。
  • 一个主要的限制是,当簇的形状不是球形时,它表现得不好。
  • Aggarwal 等人扩展了桦树中 CF 向量和聚类的概念,并命名为微聚类和聚类流

输入和输出

仅 CluStream】接受数字特征。在用户定义的参数中,有内存中微簇的数量( q )和时间阈值( δ ),在此之后它们可以被删除。此外,输入中包括用于存储微团簇信息的时间敏感参数,由 αl 给出。

它是如何工作的?

  1. The micro-cluster extends the CF vector and keeps two additional measures. They are the sum of the timestamps and sum of the squares of timestamps:

    微团簇 [j] = < N,LS [j] ,SS [j] ,ST,SST >

  2. 该算法将 q 微聚类存储在存储器中,并且每个微聚类具有最大边界,该边界可以基于质心和聚类实例距离之间的平均值和标准偏差来计算。测量值乘以一个随时间呈指数下降的系数。

  3. 对于每个新实例,我们基于欧几里德距离选择最近的微簇,并决定它是否应该被吸收:

    1. 如果新实例和最近的微簇的质心之间的距离落在最大边界内,则它被吸收并更新微簇统计。
    2. 如果没有一个微集群可以吸收,则使用该实例创建一个新的微集群,并基于时间戳和阈值( δ ),删除最旧的微集群。
  4. 通过使用金字塔时间窗概念,微聚类信息不时地被存储在辅助存储器中。每个微群具有指数减少时间间隔,使用 α l 来创建快照。这些有助于在时间和空间上的有效搜索。

优点和局限性

优点和局限性如下:

  • CluStream 已经被证明在实时发现集群方面非常有效
  • CluStream 算法通过使用金字塔时间戳的有效存储,具有高效的时间和空间使用。像桦树一样,CluStream 只能找到球形的簇

基于密度

类似于批量聚类,基于密度的技术克服了基于距离的算法所面临的“形状”问题。这里,我们将介绍一个众所周知的基于密度的算法 DenStream,它基于前面讨论的 CF 和 CF 树的概念。

输入和输出

核心微团簇的邻域范围是用户定义的半径 ϵ 。第二个输入值是微聚类的最小总权重,其是对象中每个实例的到达时间的加权函数的总和,其中权重以与另一个用户定义的参数 λ 成比例的时间常数衰减。最后,使用输入因子 β ∈ (0,1)来区分潜在的核心微簇和离群微簇。

它是如何工作的?

  1. 基于 CluStream 的微簇概念,DenStream 拥有两种数据结构:p-微簇用于潜在簇,o-微簇用于离群点检测。

  2. 每个p-微簇结构具有:

    1. 与其相关联的权重,该权重随着其被更新的时间戳而呈指数下降。如果微簇中有 j 对象:How does it work?其中*f(t)=*2^(-λt)

    2. 加权线性和 ( WLS )和加权线性平方和 ( WSS )存储在类似线性和平方和的微簇中:How does it work?

      和直径是,然后使用先前定义的加权度量来计算,与在 CF 中完全一样。例如,半径可以被给定为:

    How does it work?

  3. 每个o-微簇具有与p-微簇相同的结构以及与之相关联的时间戳。

  4. 当新的实例到达时:

    1. 找到最近的 p 微簇,如果新的半径在用户定义的边界 ϵ 内,则插入该实例。如果插入,p-微簇的统计数据会相应更新。
    2. 否则,找到一个o-微簇,如果新半径再次在边界内,则插入实例。该边界由用户定义参数的乘积 β × μ 定义,如果半径增长超过该值,则o-微簇移动到p-微簇
    3. 如果实例不能被o-微簇吸收,那么一个新的微簇被添加到o-微簇中。
  5. 在基于权重的时间间隔 t 内,o-微团簇可以变成p-微团簇,反之亦然。时间间隔由 λβ 、定义为:How does it work?

优点和局限性

优点和局限性如下:

  • 基于参数的,DenStream 可以为实时数据找到有效的聚类和异常值。
  • 它的优点是可以发现任何形状或大小的聚类和异常值。
  • 如果选择不当,更新 o 微群和 p 微群的内务处理工作在计算上可能会很昂贵。

基于网格

这种技术基于将多维连续空间离散化为具有网格的多维离散化版本。将传入实例映射到网格在线并保持网格离线,这是一种高效且有效的实时发现集群的方法。

这里我们介绍 D-Stream,这是一个基于网格的在线流聚类算法。

输入和输出

如同在基于密度的算法中一样,在 D 流中使用了实例权重衰减的思想。此外,如下所述,由输入空间形成的格网中的像元可被视为稀疏、密集或分散的区别,这些区别对于算法的计算和空间效率至关重要。那么,基于网格的算法的输入是:

  • λ :衰减因子
  • 0 < C [l] < 1 和 C [m] > 1:控制网格中密集和稀疏单元之间的边界的参数
  • β > 0:控制稀疏单元被认为是零星的条件之一的常数。

它是如何工作的?

  1. 在时间 t 到达的每个实例具有随时间呈指数下降的密度系数:How does it work?

  2. 网格单元 g 在任何给定时间 t 的密度由 D(g,t) 给出,并且是映射到网格单元 g :How does it work?E(g,t) 给出的所有实例的调整密度的总和

  3. 网格中的每个单元格将统计信息捕获为一个特征向量,由以下各项给出:

    • CV(g)=<t[g], t > [m] , D标签状态 >其中:
    • t[g]=上一次网格单元被更新
    • t[m]=上一次网格单元因稀疏而被移除
      ** D =上一次更新时网格单元的密度* 标签 =类标签*
  4. 当新实例到达时,它被映射到单元格 g ,并且特征向量被更新。如果 g 不可用,则创建它并更新网格列表。

  5. 包含空实例的网格单元将被删除。此外,长时间未更新的单元会变得稀疏,反之,当映射许多实例时,它们会变得密集。

  6. 在称为间隔的固定时间间隔内,检查格网像元的状态,实例数少于一定数量的像元(由密度阈值函数确定)将被视为异常值并被移除。

优点和局限性

优点和局限性如下:

  • D-Streams 已经在理论上和经验上被证明在空间和时间上以非常高的效率发现零星的和正常的集群。
  • 它可以有效地找到任何形状或大小的集群。

验证和评估技术

第三章、无监督机器学习技术中讨论的许多静态聚类评估方法,都有一个静态和非进化模式的假设。这些内部和外部测量中的一些甚至被用在基于流的聚类检测中。本节我们的目标是首先强调流学习中聚类评估固有的问题,然后描述解决这些问题的不同内部和外部措施,最后介绍一些仍然有效的现有内部和外部措施。

河流聚类评价中的关键问题

了解特定于流和集群的一些重要问题非常重要,因为这些措施需要解决这些问题:

  • 老化:给定时间后,点与聚类度量无关的性质。
  • 遗漏点:一个点的属性,该点不仅因为属于该簇而被遗漏,而且它在该簇中被遗漏的量。
  • 错位点:进化出新的簇而引起的簇的变化。合并现有聚类或删除聚类会导致时间点错位。必须考虑这些变化对时间的影响。
  • 群集噪声:选择不属于群集的数据或围绕噪声形成群集及其随时间的影响必须考虑在内。

评估措施

评估在流数据环境中的聚类测量必须提供有用的聚类质量指数,考虑进化和噪声数据流、重叠和合并聚类等的影响。在这里,我们提出了一些在流聚类中使用的外部度量。在第三章、无监督机器学习技术中遇到的很多内部度量,比如剪影系数、邓恩指数、R-Squared 等也有使用,这里不再赘述。

聚类映射度量(CMM)

CMM 背后的思想是在给定地面事实的情况下,量化点与集群的连通性。它分三个阶段工作:

映射阶段:在这个阶段,由流学习算法分配的聚类被映射到地面真实聚类。基于这些,使用 k-最近邻的概念来测量距离和点连通性的各种统计。

p 到聚类 C i 中其最近的 k 邻居的平均距离由下式给出:

Cluster Mapping Measures (CMM)

一个集群的平均距离由下式给出:

Cluster Mapping Measures (CMM)

群集CI 中的点 p 的点连通性由下式给出:

Cluster Mapping Measures (CMM)

对每个聚类的类别频率进行计数,并且通过计算直方图和聚类中的相似性来执行聚类到基本事实的映射。

具体地,簇 C [i] 被映射到地面真值类, Cl [j] 被映射到地面真值簇Cluster Mapping Measures (CMM),其覆盖了 C [i] 的大部分类频率。剩余被定义为来自类ClI[I]的未被基础真值聚类Cluster Mapping Measures (CMM)覆盖的实例数,以及类Cl1、Cl2、Cl3……Cl1C中实例的总剩余**

Cluster Mapping Measures (CMM)

集群 C [i] 的映射使用:

Cluster Mapping Measures (CMM)

惩罚阶段:在这个步骤中,使用故障对象的计算来计算每个不正确映射的实例的惩罚;也就是说,不是噪声但放置不正确的对象,使用:

Cluster Mapping Measures (CMM)

o 相对于找到的所有聚类的总罚分由下式给出:

Cluster Mapping Measures (CMM)

CMM 计算:使用寿命期间加权的所有惩罚由下式给出:

Cluster Mapping Measures (CMM)

这里, C 是发现簇, Cl 是地面真值簇, F 是故障对象, w(o) 是实例的权重。

垂直测量

有效性或 V-Measure 是基于流聚类中感兴趣的两个属性计算的外部度量,即同质性完整性。如果设置有 nC*= {CC[1], c [2] …, c [n] }和 kK= {K1,K.. k [m] }***

同质性:同质性定义为一个聚类的属性,反映了该聚类中所有数据属于同一类的程度。

条件熵和类别熵;

V-MeasureV-Measure

同质性被定义为:

V-Measure

更高的均匀度值是更理想的。

完备性:完备性被定义为同质性的镜像属性,即一个类的所有实例都属于同一个聚类。

类似于同质性,条件熵和聚类熵被定义为:

V-MeasureV-Measure

完整性被定义为:

V-Measure

使用权重因子 β 将 V-Measure 定义为同质性和完整性的调和平均值:

V-Measure

完整度或 V-measure 的值越高越好。

其他外部措施

下面给出了一些在分类已知的情况下比较聚类算法或测量聚类有效性时非常流行的外部度量:

纯度:它们类似于之前定义的同质性和完备性。

纯度定义为:

Other external measures

熵的定义是:

Other external measures

这里, q =类的数量, k =簇的数量, n r =簇的大小 rOther external measures

精度召回F-Measure :聚类算法修改的信息检索度量如下:

给定,Other external measuresOther external measures

精度定义为:

Other external measures

召回的定义是:

Other external measures

F-measures 定义为:

Other external measures

使用离群点检测的无监督学习

在数据流中寻找离群值或异常值的主题是机器学习的新兴领域之一。这个领域还没有像基于分类和聚类的问题那样被研究人员探索。然而,有一些非常有趣的想法扩展了聚类的概念,以从数据流中发现离群值。我们将提供一些已被证明在流异常检测中非常有效的研究。

基于划分的聚类离群点检测

这里的中心思想是使用基于分区的在线聚类算法,并基于聚类大小排序或聚类间距离排序,将聚类标记为离群值。

这里我们介绍一个由 Koupaie 等人提出的算法。,使用增量 k 均值。

输入和输出

和大多数 k-Means 算法一样,只使用了数字特征。发生离线聚类的聚类数量 k 和异常值窗口数量 n 是输入参数。输出是恒定的异常值(局部和全局)和检测这些异常值的可更新模型。

它是如何工作的?

  1. 该算法的工作原理是让 k-Means 算法处于两种模式,离线模式和在线模式,两种模式并行工作。

  2. 对于在线模式:

    1. 在给定的窗口 w 上应用 k-Means,找到数据的聚类和分区。
    2. 根据聚类距离和聚类大小对聚类进行排序。相距最远且尺寸较小的聚类被认为是离群值。
    3. 将窗口内存中的异常值存储为集合O[w]= {x[1], x [2..] x [n] }并将其视为局部异常值。
    4. 窗口被清空,重复该过程。
  3. 对于离线模式:

    1. 从*【n】*、先前的窗口中获得离群值,并创建集合:How does it work?
    2. 使用 k-Means 将该窗口与集合 S 聚类,并找到最远且尺寸小的聚类。
    3. 这些聚类都是全局离群值。
    4. 窗口被清除,重复该过程。

优点和局限性

优点和局限性如下:

  • 它对两个参数 kn 非常敏感,并且会产生大量噪声。
  • 仅发现球形簇/异常值,而不同形状的异常值会被遗漏。

基于距离的聚类离群点检测

基于距离的离群点检测是流学习领域中研究最多、研究最多和实现最多的方法。基于距离的方法有许多变体,基于滑动窗口、最近邻的数量、半径和阈值以及考虑数据中异常值的其他度量。在本节中,我们将尝试给出一些最重要的算法。

输入和输出

大多数算法将以下参数作为输入:

  • 窗口大小 w ,对应于算法寻找异常模式的固定大小
  • 滑动尺寸 s ,对应于将被添加到窗口的新实例的数量,并且旧实例被移除
  • 使用最近邻计算时实例的计数阈值 k
  • 距离阈值 R 用于定义距离中的异常值阈值

作为标签或分数(基于邻居和距离)的异常值是输出。

它是如何工作的?

我们展示了基于距离的流异常值算法的不同变体,给出了它们不同或独特之处的见解。每个算法中的独特元素定义了当载玻片过期时会发生什么,如何处理新载玻片,以及如何报告异常值。

确切的风暴

精确风暴将当前窗口 w 中的数据存储在众所周知的索引结构中,以便高效地完成范围查询搜索或查找给定点的距离 R 内的邻居的查询。它还存储所有数据点的前一个和后一个邻居的 k :

  • 过期幻灯片:过期幻灯片中的实例从影响范围查询的索引结构中移除,但保留在先前的邻居列表中。
  • 新幻灯片:对于新幻灯片中的每个数据点,执行范围查询 R ,结果用于更新实例的前后列表,实例存储在索引结构中。
  • 异常值报告:在任何窗口中,在过期的和新的幻灯片元素的处理完成后,来自后续列表和未过期的先前列表的至少具有 k 个元素的任何实例被报告为异常值。

摘要-C

Abstract-C 保持了类似于 Exact Storm 的索引结构,但是,不是为每个对象保持前后列表,而是为实例参与的窗口保持邻居计数列表:

  • 过期幻灯片:过期幻灯片中的实例从影响范围查询的索引结构中移除,并且对应于最后一个窗口,从计数列表中移除第一个元素。
  • 新幻灯片:对于新幻灯片中的每个数据点,执行范围查询 R ,结果用于更新列表计数。对于现有实例,计数随着新的邻居而更新,并且实例被添加到索引结构中。
  • 异常值报告:在任何窗口中,过期的和新的幻灯片元素处理完成后,当前窗口中邻居计数小于 k 的所有实例都被认为是异常值。

事件的直接更新(到期)

DUE 为高效的范围查询保留了与其他算法完全一样的索引结构,但有一个不同的假设,即当过期的幻灯片出现时,不是每个实例都受到相同的影响。它维护两个优先级队列:不安全的内部队列和外部列表。不安全内联队列根据其前面邻居的最小过期时间的升序对实例进行了排序。异常值列表包含当前窗口中的所有异常值:

  • 过期幻灯片:从影响范围查询的索引结构中移除过期幻灯片中的实例,并为过期邻居更新不安全内联队列。那些成为异常值的不安全的内联者被从优先级队列中移除,并被移动到异常值列表中。
  • 新幻灯片:对于新幻灯片中的每个数据点,执行范围查询 R ,结果用于更新该点的后续相邻点,对于该实例,仅更新最近的先前点。基于这些更新,该点被添加到不安全内部优先级队列中,或者从队列中移除并添加到异常值列表中。
  • 异常值报告:在任何窗口中,过期的和新的幻灯片元素处理完成后,异常值列表中的所有实例都被报告为异常值。

基于微聚类的算法(MCOD)

基于微聚类的异常值检测克服了对每个数据点执行范围查询的计算问题。在这些算法中,使用微聚类数据结构来代替范围查询。微集群以一个实例为中心,半径为 R 。属于微簇的所有点都变成了内点。外部的点可以是离群点或内点,并存储在单独的列表中。由于保留了不安全内联程序的优先级队列,它还具有类似的数据结构:

  • 过期幻灯片:过期幻灯片中的实例从微簇和具有离群值和内联值的数据结构中移除。在 DUE 算法中,为过期的邻居更新不安全的内联队列。微聚类也针对未过期的数据点进行更新。
  • 新幻灯片:对于新幻灯片中的每个数据点,实例或者成为微聚类的中心,或者成为微聚类的一部分,或者被添加到事件队列和离群值的数据结构中。如果该点在距离 R 内,它被分配给一个现有的微簇;否则,如果 R 内有 k 个点,则成为新微簇的中心;如果不是,它进入事件队列和可能的异常值的两个结构。
  • 异常值报告:在任何窗口中,在过期的和新的幻灯片元素的处理完成后,异常值结构中具有少于 k 个相邻实例的任何实例被报告为异常值。

近似风暴

近似风暴,顾名思义,是精确风暴的近似。这两种近似方法是:

  • 通过增加因子 ρ 并将窗口改为 ρW 来减少窗口中的数据点数量。
  • 通过使用在先前列表中是安全内联者的邻居的数量与当前窗口中的数量的分数来存储该数量而不是先前邻居的数据结构。

过期和新载玻片的处理以及如何根据这些步骤确定异常值如下:

  1. 过期幻灯片:与精确风暴相同——过期幻灯片中的实例从影响范围查询的索引结构中移除,但保留在先前的邻居列表中。
  2. 新幻灯片:对于新幻灯片中的每个数据点,执行范围查询 R ,结果用于计算前面讨论的分数,并更新索引结构。如果安全内联体的大小超过了这个值,通过移除随机内联体,安全内联体的数量被限制为 ρW 。假设安全内联器中的大多数点都是安全的。
  3. 异常值报告:在任何窗口中,过期的和新的幻灯片元素处理完成后,当基于分数、窗口大小和先前列表的实例的邻居数量的近似值(见参考【17】)小于 k 时,视为异常值。
优点和局限性

优点和局限性如下:

  • Exact Storm 对存储列表和检索邻居的存储和 CPU 有很高的要求。而且,它引入了延迟;即使它们是在高效的数据结构中实现的,范围查询也会很慢。
  • 与 Exact Storm 相比,Abstract-C 有一个小优势,因为它不需要花费时间为窗口中的每个实例寻找活动邻居。存储和花费的时间仍然在很大程度上取决于所选择的窗口和幻灯片。
  • DUE 比 Exact Storm 和 Abstract-C 有一些优势,因为它可以有效地重新评估点的“内联性”(即,不安全的内联体是保持内联体还是变成离群体),但是对结构进行排序会影响 CPU 和内存。
  • 由于使用了微集群结构并消除了成对距离计算,MCOD 在内存和 CPU 方面具有明显的优势。将邻居信息存储在微簇中也有助于记忆。
  • 与其他方法相比,Approx Storm 具有时间优势,因为它不处理前一个窗口的过期数据点。

验证和评估技术

验证和评估基于流的异常值仍然是一个开放的研究领域。在许多研究比较中,我们看到使用了各种指标,例如:

  • 根据每个对象的 CPU 时间进行评估的时间
  • 在流中检测到的异常值的数量
  • 与现有标签、TP/精度/召回 PRC 曲线下面积等相关的异常值数量

通过改变诸如窗口大小、半径内的邻居等参数,我们确定了对前面提到的性能度量的敏感性,并确定了鲁棒性。

流学习的案例研究

本章的案例研究由几个实验组成,这些实验说明了基于流的机器学习的不同方法。选择一个经过充分研究的数据集作为流数据源,并使用基于监督树的方法,如朴素贝叶斯、Hoeffding 树以及集成方法。在非监督方法中,使用的聚类算法包括 k-Means、DBSCAN、CluStream 和 CluTree。异常检测技术包括 MCOD 和 SimpleCOD 等。我们还显示了分类实验的结果,证明处理概念漂移。如本章前面所述,在滑动窗口中计算统计数据的 ADWIN 算法在分类实验中使用的几种算法中使用。

工具和软件

用于数据流挖掘的最流行、也可以说是最全面的基于 Java 的框架之一是由怀卡托大学创建的开源大规模在线分析 ( MOA )软件。框架是流分类、聚类和离群点检测算法的集合,支持变化检测和概念漂移。它还包括数据生成器和几个评估工具。该框架可以用新的流数据生成器、算法和评估器来扩展。在本案例研究中,我们采用了几种使用基于文件的数据流的流数据学习方法。

注意

产品主页:moa.cms.waikato.ac.nz/

GitHub:github.com/Waikato/moa

图 4图 5 中显示的 MOA 工具的一系列截图所示,顶层菜单让您选择要完成的学习类型。例如,对于分类实验,工具的配置包括选择要运行的任务(此处选择为后续评估),然后配置我们想要使用的学习者和评估者,最后是数据流的源。在配置任务对话框中显示的窗口宽度参数会影响所选模型的准确性,我们将在实验结果中看到。除了为窗口宽度选择不同的值之外,所有基础学习者参数都保留为默认值。任务配置完成后,点击运行按钮即可运行:

Tools and softwareTools and software

图 4。用于配置分类前评估的 MOA 图形界面,包括设置窗口宽度

Tools and softwareTools and software

图 5。用于预先分类任务的图形界面。在配置任务中,您必须选择一个学习者,找到数据流(细节未显示),并选择一个评估者

任务运行完成后,可以将模型评估结果导出到 CSV 文件中。

商业问题

本案例研究的问题是不断从电力市场数据流中学习,并预测市场价格的运动方向。我们比较了不同分类方法的准确性和平均成本,包括概念漂移以及聚类和离群点检测的性能。

机器学习映射

本案例研究中使用的数据集可用于说明经典的基于批处理的监督和非监督学习技术。但是,在这里,我们将它视为基于流的数据源,以展示我们如何利用本章中描述的技术,使用 MOA 框架来执行分类、聚类和异常值检测任务。在这种情况下,我们演示了如何在静态和演化数据流呈现概念漂移的假设下实现增量学习。

数据收集

数据集被称为电力或 ELEC 数据集,由新南威尔士电力市场收集。这个市场的价格是可变的,根据供求关系每 5 分钟调整一次。该数据集由 1996 年 5 月至 1998 年 12 月间每半小时获得的 45,312 个数据点组成。目标是相对于 24 小时移动平均线的价格运动的指示,无论是上涨还是下跌。

注意

数据文件是 ARRF 格式的公开文件,可在 http://downloads . SourceForge . net/project/moa-datastream/Datasets/Classification/elec norm new . ARFF . zip?r = http % 3A % 2F % 2f moa . CMS . wai kato . AC . NZ % 2f datasets % 2F&ts = 1483128450&use _ mirror = cytranet。

数据采样和转换

在这里进行的实验中,没有进行数据采样;数据集中的每个示例都是单独处理的,不排除任何示例。所有数字数据元素都被规范化为 0 到 1 之间的值。

特征分析和降维

ELEC 数据集有 45,312 条记录,包含 9 个特征,包括目标类。特征 class 和 day 是名义的(分类的),所有其他的是数字的(连续的)。这些特征在表 1表 2 中列出,并给出了 ELEC 数据集的描述性统计数据:

|

名字

|

数据类型

|

描述

班级 名义上的 上涨、下跌——价格相对于 24 小时移动平均线的运动方向
日期 连续的 记录价格的日期
名义上的 一周中的第几天(1-7)
时期 连续的
nswprice 连续的 新南威尔士的电价
nswdemand 连续的 新南威尔士的电力需求
维克普莱斯 连续的 维多利亚州的电价
受害者需求 连续的 维多利亚州的电力需求
转移 整数

表 1。ELEC 数据集特征

|   |

数数

|

意思是

|

标准

|

25%

|

50%

|

75%

日期 Forty-five thousand three hundred and twelve 0.49908 0.340308 0.031934 0.456329 0.880547
时期 Forty-five thousand three hundred and twelve Zero point five 0.294756 Zero point two five Zero point five Zero point seven five
nswprice Forty-five thousand three hundred and twelve 0.057868 0.039991 0.035127 0.048652 0.074336
nswdemand Forty-five thousand three hundred and twelve 0.425418 0.163323 0.309134 0.443693 0.536001
维克普莱斯 Forty-five thousand three hundred and twelve 0.003467 0.010213 0.002277 0.003467 0.003467
受害者需求 Forty-five thousand three hundred and twelve 0.422915 0.120965 0.372346 0.422915 0.469252
转移 Forty-five thousand three hundred and twelve 0.500526 0.153373 0.414912 0.414912 0.605702

表 2。ELEC 数据集特征的描述性统计

这里省略了特征减少步骤,因为它在大多数基于流的学习中。

模型、结果和评估

实验分为分类、概念漂移、聚类和离群点检测。这里给出了每组实验的学习过程的细节和实验的结果。

监督学习实验

对于这组实验,选择了线性、非线性和集成学习器,以便说明各种分类器的行为。随机梯度下降 ( SGD ),使用线性 SVM,朴素贝叶斯是线性分类器,而 Lazy k-NN 是非线性分类器。对于集成学习,我们使用两个元学习器,利用 Bagging ( LB )和 OxaBag,使用不同的线性和非线性基础学习器,如 SGD、朴素贝叶斯和 Hoeffding 树。OxaBag 中使用的算法在集成算法一节中描述。在 LB 中,用于重采样的权重因子是可变的(这里使用默认值 6),而 OxaBag 中的权重是固定的 1。

所有分类方法都选择顺序评估,因此每个示例首先用现有模型的预测进行测试,然后用于训练模型。这需要选择窗宽,不同窗宽值的各种型号的性能列于表 3 。使用了 100、500、1000 和 5000 个元素的宽度:

|

算法

|

窗口宽度

|

评估时间(CPU 秒)

|

模型成本(冲压工时)

|

分类正确率(百分比)

|

Kappa 统计(百分比)

签名于 One hundred 0.5781 3.76E-10 Sixty-seven Zero
签名于 Five hundred 0.5781 3.76E-10 Fifty-five point six Zero
签名于 One thousand 0.5469 3.55E-10 Fifty-three point three Zero
签名于 Five thousand 0.5469 3.55E-10 Fifty-three point seven eight Zero
朴素贝叶斯 One hundred 0.7656 8.78E-10 Eighty-six 65.7030
朴素贝叶斯 Five hundred 0.6094 8.00 年至 10 年 Eighty-two point two 62.6778
朴素贝叶斯 One thousand 0.6719 7.77E-10 Seventy-five point three 48.8583
朴素贝叶斯 Five thousand 0.6406 7.35E-10 Seventy-seven point eight four 54.1966
kNN One hundred 34.6406 4.66E-06 Seventy-four 36.3057
kNN Five hundred 34.5469 4.65E-06 Seventy-nine point eight 59.1424
kNN One thousand 35.8750 4.83E-06 Eighty-two point five 64.8049
kNN Five thousand 35.0312 4.71E-06 Eighty point three two 60.4594
LB-kNN One hundred 637.8125 2.88E-04 Seventy-four 36.3057
LB-kNN Five hundred 638.9687 2.89E-04 Seventy-nine point eight 59.1424
LB-kNN One thousand 655.8125 2.96E-04 Eighty-two point four 64.5802
LB-kNN Five thousand 667.6094 3.02 年至 2004 年 Eighty point six six 61.0965
l B-赫夫丁特里 One hundred 13.6875 2.98E-06 Ninety-one 79.1667
l B-赫夫丁特里 Five hundred 13.5781 2.96E-06 Ninety-three 85.8925
l B-赫夫丁特里 One thousand 12.5625 2.74E-06 Ninety-two point one 84.1665
l B-赫夫丁特里 Five thousand 12.7656 2.78E-06 Ninety point seven four 81.3184

表 3。不同窗口大小的分类器性能

对于表 4 中的算法,所用窗口宽度的每个值的性能是相同的:

|

算法

|

评估时间(CPU 秒)

|

模型成本(冲压工时)

|

分类正确率(百分比)

|

Kappa 统计(百分比)

赫夫丁特里 1.1562 3.85E-08 79.1953 57.2266
适应树 2.0469 2.84E-09 83.3863 65.5569
奥萨巴格-朴素贝叶斯 2.01562 1.57E-08 73.4794 42.7636
奥萨巴加德温-赫夫丁特里 5.7812 2.26E-07 84.3485 67.5221
LB-SGD Two 1.67E-08 57.6977 3.0887
l b-朴素贝叶斯 3.5937 3.99E-08 78.8753 55.7639

表 4。分类器的性能(对所有使用的窗口宽度都一样)

概念漂移实验

在本实验中,我们在配置分类任务时继续使用 EvaluatePrequential。这次我们选择DriftDetectionMethodClassifier作为学习器,DDM 作为漂移检测方法。这展示了如何适应不断发展的数据流。使用的基础学习者和获得的结果如表 5 所示:

|

算法

|

评估时间(CPU 秒)

|

模型成本(冲压工时)

|

分类正确率(百分比)

|

Kappa 统计(百分比)

|

检测到变化

签名于 0.307368829 1.61E-09 Fifty-three point three Zero One hundred and thirty-two
朴素贝叶斯 0.298290727 1.58E-09 Eighty-six point six 73.03986 One hundred and forty-three
懒惰-kNN 10.34161893 1.74E-06 Eighty-seven point four 74.8498 Twelve
赫夫丁特里 0.472981754 5.49E-09 Eighty-six point two 72.19816 One hundred and sixty-nine
适应树 0.598665043 2009 年 7 月 19 日 Eighty-four 67.80878 One hundred and fifty-five
LB-SGD 0.912737325 2.33E-08 Fifty-three point three Zero One hundred and thirty-two
l b-朴素贝叶斯 1.990137758 3.61E-08 Eighty-five point seven 71.24056 Two hundred and five
奥萨巴格-朴素贝叶斯 1.342189725 2.29E-08 Seventy-seven point four Fifty-four point zero one seven Two hundred and eleven
LB-kNN 173.3624715 1.14E-04 Eighty-seven point five 75.03296 four
l B-赫夫丁特里 5.660440101 1.61E-06 Ninety-one point three 82.56317 Fifty-nine
奥萨巴格-赫夫丁特里 4.306455545 3.48E-07 Eighty-five point four 70.60209 One hundred and twenty-five

表 5。具有概念漂移检测的分类器的性能

聚类实验

几乎所有在 MOA 工具中实现的聚类算法都用在了这个实验中。收集了外部和内部评估结果,并在表 6 中列出。CMM、同质性和完整性在本章前面已经定义过了。我们以前遇到过纯度和轮廓系数,来自于第三章、无监督机器学习技术中的讨论。SSQ 是实例距它们各自聚类中心的平方距离的总和;SSQ 值越低越好。微聚类的使用在表中用 m = 1 表示。宏聚类的计算频率由选定的时间范围 h 决定,例如:

|

算法

|

通信(communication 的简写)

|

同种

|

完全

|

纯洁

|

SSQ

|

轮廓系数

具有 k 均值的 clustream(h = 5000;k = 2;m = 1) 0.7168 -1.0000 0.1737 0.9504 9.1975 0.5687
k 均值聚类流(h = 1000k = 5) 0.5391 -1.0000 0.8377 0.7238 283.6543 0.8264
clustream(h = 1000;m = 1) 0.6241 -1.0000 0.4363 0.9932 7.2734 0.4936
带 DBSCAN 的 denstream(h = 1000) 0.4455 -1.0000 0.7586 0.9167 428.7604 0.6682
clus tree(h = 5000;m = 1) 0.7984 0.4874 -0.4815 0.9489 11.7789 0.6879
clus tree(h = 1000;m = 1) 0.7090 -1.0000 0.3979 0.9072 13.4190 0.5385
摘要 1.0000 1.0000 -8.1354 1.0000 0.0000 0.0000
MCOD (w = 1000) 1.0000 1.0000 -8.1354 1.0000 0.0000 0.0000

离群点检测实验

在最后一组实验中,使用了五种异常值检测算法来处理 ELEC 数据集。结果在表 7 中给出:

|

算法

|

节点总是在内层

|

节点总是离群值

|

内部和外部节点

MCOD 42449 (93.7%) 302 (0.7%) 2561 (5.7%)
近似风暴 41080 (90.7%) 358 (0.8%) 3874 (8.5%)
简单 cd 42449 (93.7%) 302 (0.7%) 2561 (5.7%)
抽象 c 42449 (93.7%) 302 (0.7%) 2561 (5.7%)
精确风暴 42449 (93.7%) 302 (0.7%) 2561 (5.7%)

表 7。异常值检测评估

下面的图(图 6 )显示了对整个数据集运行 Abstract-C 算法后三对特征的结果。在每个图中,很容易看到由围绕数据点的圆圈标识的异常值。尽管很难同时在多个维度上对异常值进行空间可视化,但集合双变量图给出了在基于流的设置中应用的异常值检测方法的一些结果指示:

Outlier detection experimentsOutlier detection experimentsOutlier detection experiments

图 6。在处理所有 45,300 个实例后,使用 Abstract-C 对三对特征进行异常值检测

图 7 中的图像显示了两个算法Angiulli.ExactSTORMAngiulli.ApproxSTORM同时运行时 MOA 的截图;每个算法的双变量散点图并排显示,并附有每个对象处理时间的比较:

Outlier detection experiments

图 7。氧化锌避雷器中异常检测的可视化

流学习结果分析

基于对来自分类、聚类和异常值检测实验的学习模型的评估,分析揭示了几个有趣的观察结果。

分类实验:

  • 如表 3 所示,从线性算法到非线性算法,性能显著提高。线性 SGD 具有最好的性能,使用 67%的准确性度量,而 KNN 和赫夫丁树显示 82.4%到 93%。这个清楚地表明问题是非线性的,使用非线性算法将会给出更好的性能。
  • K-NNs 提供了良好的性能,但是以评估时间为代价,如表 3 所示。与线性方法相比,评估时间和内存都要高得多,大约高两个数量级。当模型必须在更紧的评估周期中执行时,在选择 KNNs 等算法时必须非常谨慎。
  • 赫夫丁树给出了最好的分类率和 Kappa 统计量。评估时间也不像 KNNs 那么长,但仍然在秒的数量级,这在许多实时的基于流的应用中可能是可接受的,也可能是不可接受的。
  • 朴素贝叶斯的评估时间是最短的——尽管与 SGD 没有太大区别——并且通过正确选择窗口宽度,可以使性能仅次于 Hoeffding 树。例如,在宽度为 100 时,朴素贝叶斯的分类率为 86,仅次于 93 的赫夫丁树,但与超过 13 秒的时间相比,朴素贝叶斯只需要 0.76 秒,如表 3 所示。
  • 保持窗口宽度不变,从线性(SGD,朴素贝叶斯)到非线性(Hoeffding 树)再到基于集合(OzaBag,Adwin,Hoeffding 树)有一个清晰的改进模式,如表 4 所示。这清楚地表明,在理论上,选择集合可以帮助减少误差,但代价是模型中前述的可解释性。
  • 表 5表 3表 4 相比,显示了为什么漂移保护和自动漂移检测学习提高了鲁棒性。作为例子,OzaBag-NaiveBayes、OzaBag-HoeffdingTrees 和 OzaBag-HoeffdingAdaptiveTree 的基于集成的学习都显示出对非漂移保护运行的改进。

聚类实验:

  • 表 6 中的前两个模型中,我们看到,与具有较小范围和 k 为 5 的模型相比,具有 5000 个实例的范围和为 2 的 k 的 k-Means 表现出更高的纯度、更高的 CMM 和更低的 SSQ。在整套结果中(可在本书的网站上找到,见下面的链接),人们可以看到更大视界的影响是造成差异的主要因素。
  • 在使用微聚类的聚类模型中,SSQ 通常比不使用微聚类时小得多。这是可以理解的,因为集群多得多,而每个集群的实例少得多,并且 SSQ 是相对于集群中心来测量的。
  • 发现 DBSCAN 对微聚类和范围大小不敏感。与所有其他模型相比,它在内在指标(轮廓系数)和外在指标(完整性、纯度)上都名列前茅。
  • 这两个 ClusTree 型号具有最好的 CMM 和纯度分数,由于微团簇而具有较低的 SSQ。
  • 最后两个基于异常值的聚类算法具有完美的 CMM 和纯度分数。窗口大小(尽管这会影响评估时间)或邻居计数阈值 k 的值不会显著影响度量。

异常值检测实验:

  • 这组实验中的所有技术都表现得一样好,除了 ApproxSTORM,考虑到该方法中使用的窗口与精确版本相比减少了,这是可以预料的。
  • 对于大多数模型来说,总是在内部的实例与总是在外部的实例的比率接近 140。对于给定的数据集,这是否意味着足够的区分能力取决于实时学习问题的目标。

注意

所有的 MOA 配置文件和实验结果都可以从以下网址获得:github . com/mjmlbook/mastering-Java-machine-learning/chapter 5

总结

基于流的学习中的假设不同于基于批的学习,其中主要的是操作内存和计算时间的上限。必须计算使用滑动窗口或采样的运行统计数据,以便扩展到潜在的无限数据流。我们区分了从静态数据学习(假设生成的数据分布是恒定的)和从动态或演变的数据学习(必须考虑概念漂移)。这是通过涉及监控模型性能变化或监控数据分布变化的技术来实现的。显性和隐性适应方法是适应概念变化的方法。

几种监督和非监督学习方法已经被用于增量在线学习。监督方法包括线性、非线性和集成技术,HoeffdingTree 是特别有趣的,主要是由于它对错误率上限的保证。模型验证技术,如顺序评估,是对增量学习的独特适应。对于静态监督学习,评估方法类似于基于批处理的学习中使用的方法。在发展数据流的情况下,使用其他度量。

在固定内存和时间限制下运行的聚类算法通常在单次通过中使用具有标准技术的小内存缓冲区。在聚类评估过程中,必须考虑特定于流的问题,例如老化、噪声以及遗漏或放错位置的点。数据流中的离群点检测是一个相对较新且不断发展的领域。事实证明,将聚类思想扩展到异常检测非常有效。

本章案例研究中的实验使用了 Java 框架 MOA,展示了用于监督、聚类和异常值检测的各种基于流的学习技术。

在下一章中,我们将开始一次概率图建模技术之旅,这些技术在各种领域的表示、引出知识和学习中是有用的。

参考文献

  1. G.Cormode 和 S. Muthukrishnan (2010 年)。一种改进的数据流概要:计数-最小草图及其应用。算法杂志,55(1):58–75,2005。
  2. 若昂·伽马(2010 年)。从数据流中发现知识,Chapman 和 Hall / CRC 数据挖掘和知识发现系列,CRC 出版社 2010,ISBN 978-1-4398-2611-9,第 I-XIX 页,第 1-237 页。
  3. B.巴布科克,m .达塔尔,r .莫特瓦尼(2002 年)。流数据上移动窗口的采样,第十三届 ACM-SIAM 离散算法年会论文集,第 633–634 页,2002 年。
  4. bifet a .和 Gavalda r .(2007 年)。利用自适应窗口从时变数据中学习。在暹罗国际诉讼中。糖膏剂关于数据挖掘。SDM。443–448.
  5. j .维特(1985 年)。随机取样同一个储层。ACM Trans 数学。Softw 。11, 1, 37–57.
  6. Gama,j .,Medas,p .,Castillo,g .,和 Rodrigues,P. (2004 年)。漂移检测学习。第 17 届巴西研讨会论文集。在阿提夫。智能。SBIA。286–295.
  7. Gama,j .,Sebastiao,r .,和 Rodrigues,第 2013 页。关于评测流学习算法。机器学习 90,3,317–346。
  8. 多明戈斯和赫尔滕(2000 年)。挖掘高速数据流。诉讼中。第六届美国计算机学会国际会议。知识发现和数据挖掘会议。KDD。71–80.
  9. 奥萨,N. (2001 年)。在线集成学习。博士论文,加州大学伯克利分校。
  10. Gama,j .,liobait,I .,Bifet,a .,Pechenizkiy,m .,Bouchachia,A. (2014 年)。概念漂移适应研究综述。ACM 计算调查 46(4),第 44 条。
  11. f .法恩斯特罗姆、j .刘易斯和 c .埃尔坎(2000 年)。重新审视聚类算法的可扩展性。SIGKDD 探索,51–57。
  12. t .张,r . Ramakrishnan 和 m .利夫尼(1996 年)。 BIRCH:一种针对超大型数据库的高效数据聚类方法。ACM SIGMOD 数据管理国际会议论文集。美国计算机学会出版社,103-114 页。
  13. Aggarwal,C. (2003 年)。用于诊断进化数据流变化的框架。在 ACM SIGMOD 会议上。575–586.
  14. 陈,于,涂,林(2007)。基于密度的实时流数据聚类。KDD 07:第 13 届 ACM SIGKDD 知识发现和数据挖掘国际会议论文集。美国计算机学会出版社,133-142 页。
  15. Kremer,h .,Kranen,p .,Jansen,t .,Seidl,t .,Bifet,a .,Holmes,g .,和 Pfahringer,B. (2011 年)。进化数据流聚类的有效评价指标。第 17 届 ACM SIGKDD 知识发现和数据挖掘国际会议论文集。11 年的 KDD。美国纽约州纽约市 ACM,868–876。
  16. 马赫迪拉吉(2009 年)。数据流聚类:算法综述。基于知识的智能工程系统国际期刊,39–44。
  17. F.Angiulli 和 F. Fassetti (2007 年)。检测数据流中基于距离的异常值。《第十六届 ACM 信息和知识管理会议论文集》, CIKM '07,811-820 页,美国纽约州纽约市,2007 年。ACM。
  18. D.杨、伦登斯坦纳和沃德(2009 年)。基于邻居的流数据窗口模式检测。《第 12 届扩展数据库技术国际会议论文集:数据库技术进展》, EDBT '09,第 529-540 页,美国纽约州纽约市,2009 年。ACM。
  19. 米(meter 的缩写))Kontaki、A. Gounaris、A. Papadopoulos、K. Tsichlas 和 Y. Manolopoulos (2011 年)。持续监控数据流上基于距离的异常值。数据工程(ICDE),2011 年 IEEE 第 27 届国际会议,第 135–146 页,2011 年 4 月。***

六、概率图建模

概率图模型 ( PGMs ),也称为图模型,捕捉不同变量之间的关系,表示概率分布。PGM 捕获联合概率分布,并可用于回答不同的查询和进行推理,使我们能够对看不见的数据进行预测。PGM 具有很大的优势,可以获取专家的领域知识以及变量之间的因果关系,从而对系统进行建模。PGM 表示结构,它们可以在一个表示框架中获取知识,这使得共享和理解领域和模型变得更加容易。PGM 很好地捕捉了不确定性或概率性质,因此在需要评分或基于不确定性的方法的应用中非常有用。PGM 广泛用于使用机器学习的各种应用中,例如应用于语言处理、文本挖掘和信息提取、计算机视觉、疾病诊断和 DNA 结构预测等领域。

Judea Pearl 是 PGMs 领域的先驱,并且是第一个引入贝叶斯网络主题的人(参考文献 [2]和[7])。尽管介绍 PGM 的所有知识超出了本章的范围,但我们的目标是详细介绍 PGM 最重要的方面——贝叶斯网络和有向 PGM。我们将把主题分为表示、推理和学习三个领域,并将讨论每个领域的具体算法和子主题。我们将涵盖马尔可夫网络和无向 PGM,总结与 PGM 的一些差异和相似之处,并解决相关领域,如推理和学习。最后,我们将讨论树增广 网络 ( )、马尔可夫链隐马尔可夫模型 ( )。关于这个主题的深入探讨,请参见柯勒和弗里德曼的概率图形模型(参考文献【1】)。

概率再探

概率的许多基本概念在附录 B 、概率中有详细介绍。概率论中的一些关键思想构成了概率图模型的基础。很好地掌握相关理论有助于理解 PGM 以及如何使用它们从数据中进行推断。

概率中的概念

在这一节中,我们将讨论与概率论相关的重要概念,这些概念将在本章后面的讨论中用到。

条件概率

给定两个相关事件 a 和,条件概率的本质是捕捉当已知另一个事件已经发生时,我们如何为其中一个事件赋值。条件概率或条件分布由P(a|a表示,即假设事件a已经发生(相当于假设a为真),事件 a 发生的概率,形式上定义为:

Conditional probability

P(ana)捕捉 a 和 a 同时发生的事件。

链式法则和贝叶斯定理

条件概率定义产生了条件概率链规则,即当有多个事件α [1] ,α [2] ….α [n] 时,则:

p([**…。[=([)(-什么p([|[[【n-1】])]]]]**]

几个事件的概率可以表示为第一个事件的概率乘以第二个事件的概率,以此类推。因此, α [n] 的概率取决于一切α [1] 到α [n] 并且独立于事件的顺序。

贝叶斯规则也遵循条件概率规则,并且可以被正式地给出为:

Chain rule and Bayes' theorem

随机变量、联合和边际分布

通过将事件空间和结果视为属性和值来映射事件空间和结果是很自然的。随机变量被定义为具有不同已知特定值的属性。例如,如果成绩是与学生相关联的属性,并且具有值 {A,B,C} ,那么 P(成绩= A) 表示具有结果的随机变量。

随机变量一般用大写字母表示,如 XYZ ,它们取的值用 Val(X) = x 表示。在本章中,我们将主要讨论本质上是分类的值,也就是说,取固定数量的离散值。在现实世界中,变量也可以有连续的表示。类别为{x ¹ ,x ² …x ^n 的变量的分布可以表示为:

Random variables, joint, and marginal distributions

在许多类别上的这种分布被称为多项式分布**。在只有两个类别的特殊情况下,分布被称为伯努利分布。**

给定一个随机变量,该变量描述的所有事件的概率分布称为边际分布。例如,如果等级是随机变量,边际分布可以定义为(等级= A) = 0.25,P(等级= b) = 0.37,P(等级= C) = 0.38 。**

在许多现实世界的模型中,有不止一个随机变量,考虑所有这些随机变量的分布称为联合分布**。例如,如果学生的智力是作为另一个变量的,用 P(智力)P(I) 表示,并有二元结果{低,高} ,那么考虑智力年级的分布,表示为 P(智力,年级)P(I,G) ,就是联合分布。

一个随机变量的边际分布可以通过将所有其他变量的值相加而从联合分布中计算出来。如表 1 所示,通过对所有行求和可以获得等级的边际分布,通过对所有列求和可以获得智能的边际分布。

**Random variables, joint, and marginal distributions

表 1。I 和 G 上的边际分布**

边际独立和条件独立

边际独立性定义如下。考虑两个随机变量 XY;那么 P(X|Y) = P(X) 表示随机变量 X 独立于 Y 。形式上表示为Marginal independence and conditional independence ( P 满足 X 独立于 Y )。

这意味着联合分布可由下式给出:

P(X,Y) = P(X)P(Y)

如果考试的难度( D )和学生的智力( I )决定了成绩( G ),我们知道考试的难度与学生的智力无关( DI )也隐含着 P(D,I) = P(D)P(I)

当给定第三个变量时,两个随机变量是独立的,这种独立性称为条件独立。给定一组三个随机变量 XYZ ,我们可以说Marginal independence and conditional independence;也就是说,给定 Z ,变量 X 独立于 Y 。有条件独立的必要条件是

Marginal independence and conditional independence

因素

因子是定义高维(大量变量)空间中概率分布的基本构建块。他们给出了帮助处理概率分布的基本运算。

“因子”被定义为将被称为“范围”的随机变量作为输入并给出真实值输出的函数。

形式上,一个因子被表示为Factors,其中范围是(X [1] , X [2] ,…。Xk)。

因子类型

不同类型的因素如下:

  • 联合分布:对于变量的每个组合,你得到一个实值输出。
  • 非标准化度量:当在联合分布中,一个变量是常数时,输出也是实值,但它是非标准化的,因为它的总和不是 1。然而,它仍然是一个因素。
  • 条件概率分布:形式为 P(G|I) 的概率分布是也是一个因子。

对因子执行各种操作,例如:

  • 因子乘积:如果两个因子ϕ1(x[1]、 X [2] 和ϕ2 相乘,则产生实际上,它是取对应于ϕ1 的表格,并将其乘以ϕ2
  • 因子边缘化:这和边缘化是一样的,其中ϕ1 可以对一个变量进行边缘化,比如说 X [2] ,给ϕ*[2]*
  • 因子缩减:仅当其中一个变量不变时,取其他变量的值。

配送查询

给定随机变量的概率,可以执行许多查询来回答某些问题。一些常见的查询类型将在后面的章节中解释。

概率查询

这是最常见的查询类型之一,它有两个部分:

  • 证据:具有众所周知的结果或类别的变量子集。例如,一个随机变量 E = e

  • *Query: A random variable from the rest of the variables. For example, a random variable X.

    P(X|E=E)*

*概率查询的例子是后验边际估计,例如 *P(I =高|L =差,S =低)=?和证据概率如 P(L =坏,S =低)=?

地图查询和边际地图查询

地图查询用于寻找最有可能的变量的子集的概率分配,因此也被称为最可能的解释 ( MPE )。这些查询和概率查询的区别在于,我们得到的不是概率,而是所有变量最可能的值。

在形式上,如果我们有变量W = X–E*,其中我们有 E = e 作为证据,并且有兴趣找到 W 中变量最可能的赋值,*

地图(W|e)=arg max[W]P(We )

边际查询的一个更一般的形式是当我们有一个变量的子集,比如说由构成我们的查询的 Y 给出,并且有 E = e 的证据,我们感兴趣的是找到 Y 中变量最可能的赋值。使用映射定义,我们得到:

地图(Y|e)=arg max[Y]P(Y|e)

假设,Z = X–Y–E,那么边际地图查询就是:

MAP queries and marginal MAP queries*

图形概念

接下来,我们将简单回顾一下图论中的概念以及我们将在本章中用到的一些定义。

图形结构和属性

图被定义为包含节点和连接这些节点的边的数据结构。在本章的上下文中,随机变量表示为节点,边表示随机变量之间的连接。

形式上,如果 X = {X [1] ,X [2] ,…X [k] } 其中 X [1] ,X [2] ,…X [k] 是表示节点的随机变量,那么在Graph structure and properties给出的节点之间可以有一条属于集合 e 的有向边,也可以有一条无向边 Graph structure and properties,该图被定义为数据结构Graph structure and properties。当集合 e 中来自集合 X 的节点之间的每条边都是有向的时,称一个图为有向图,类似地,无向图是节点之间的每条边都是无向的,如图 1 中的所示。同样,如果有一个图既有有向边又有无向边,那么符号Graph structure and properties表示一条边可以是有向边也可以是无向边。

Graph structure and properties

图一。有向图、无向图和部分有向图

如果图中存在有向边Graph structure and properties,则节点XI 称为父节点,节点Xj 称为子节点

在无向图的情况下,如果有一条边XI*–X*[j],则称节点 X [i] 和 X [j] 为邻居。

有向图中节点 X 的父节点集合称为节点 X 的边界,类似地,无向图中的相邻节点形成彼此的边界。节点 X 的度数就是它参与的边数。节点 X 的度数是有向图中与节点 X 有关系的边的数量,使得边在节点 Y 和节点 XXY 之间。图的度是该图中节点的最大度。

子图和集团

子图是表示整个集合中一些节点的图的一部分。是无向图中顶点的子集,使得每两个不同的顶点是相邻的。

路径、踪迹和循环

如果有个变量X1,X2,…。XK 在图 K = (X,E) 中,它形成一条路径,如果,对于每一个 i = 1,2...k–1,我们有Path, trail, and cycles或者X[I]–X[j];也就是说,变量之间要么有一条有向边要么有一条无向边——回想一下这可以被描绘成XI?Xj。有向路径至少有一条有向边:Path, trail, and cycles

如果有变量 X [1] , X [2] ,…。 X [k] 在图中 K = (X,E) 如果对于每一个 i = 1,2,则形成一个尾迹...k–1,我们要么有Path, trail, and cycles

一个图叫做连通图,如果对每一个XI,…Xj 在XI 和Xj 之间有一条轨迹。

在一个图 K = (X,e) 中,如果节点 XY 之间存在有向路径, X 称为 Y 的祖先, Y 称为 X后代

如果一个图 K 有一条有向路径 X [1] , X [2] ,…Xk 其中X1?Xk,该路径称为一个循环。相反,没有圈的图称为无圈图。

贝叶斯网络

一般来说,所有概率性图形模型都有三个基本元素构成重要部分:

  • 表示:这回答了模型意味着什么或者表示什么的问题。的思路是如何表示和存储 P(X [1] , X [2] ,……XnT15)。

  • 推论:这回答了这个问题:给定模型,我们如何执行查询,如何得到答案。这给了我们从已知证据中推断未知值的能力,给出了模型的结构。激发主要讨论点的是各种形式的推理,包括计算和正确性问题之间的权衡。

  • 学习:这个回答了给定数据,什么模型是正确的这个问题。学习分为两个主要部分:

    • 学习参数给定的结构和数据
    • 学习参数给定的结构和数据

在我们的讨论中,我们将使用著名的学生网络作为贝叶斯网络的例子来说明概念和理论。学生网络有五个随机变量,捕捉各种属性之间的关系,定义如下:

  • 考试难度( D
  • 学生的智力( I )
  • 学生得到的分数( G
  • 学生 SAT 成绩( S )
  • 学生根据成绩得到的推荐信( L )。

这些属性中的每一个都有二进制分类值,例如,变量难度 ( D )有两个类别( d 0, d 1),分别对应低和高。等级 ( G )有三个类别值对应于等级 (A,B,C) 。图中的箭头表示从领域知识中编码的依赖关系——例如,如果我们知道考试的难度和学生的智力就可以确定等级,而如果我们只知道等级 ( 图 2 )就可以完全确定推荐信。可以进一步观察到,变量之间没有明显的边缘表明它们是相互独立的——例如,考试的难度和学生的智力是独立变量。

Bayesian networks

图二。“学生”网络

表象

一个图表简洁地表示了随机变量之间的复杂关系,允许快速算法在完全枚举被禁止的地方进行查询。在这里定义的概念中,我们展示了有向无环图结构和条件独立性是如何使涉及大量变量的问题变得易于处理的。

定义

贝叶斯网络被定义为具有以下特征的系统模型:

  • 若干随机变量{ X [1] , X [2] ,…。Xk}

  • 一个有向 无环图 ( DAG ),节点代表随机变量。

  • 对每个依赖于其父节点的节点的局部 条件概率分布(CPD)P(X[I]| parent(X[I])

  • 使用链式分布规则获得的联合概率分布是如下给出的因子:Definition

  • For the student network defined, the joint distribution capturing all nodes can be represented as:

    P(D,I,G,S,L)=P(D)P(I)P(G D,I)P(S I)P(L G)

推理模式

给定一些数据和事实,贝叶斯网络有助于回答各种查询,这里讨论这些推理模式。

因果或预测推理

例如,如果给出的证据是“智力低下”,那么得到右上角象限图 3 所示“好信”的几率有多大?这是通过因果推理解决的。如第一象限所示,因果推理自上而下流动。

证据或诊断推理

如果给出了证据,比如一封“坏信”,那么这个学生得到“好成绩”的可能性有多大?如左上象限的图 3 所示,这个问题通过证据推理来解决。如第二象限所示,证据推理自下而上。

因果推理

从寻找“相关原因”中获得有趣的模式是因果推理的目标。如果给出了“C 级”和“高智商”的证据,那么课程难度“高”的几率会是多少?这种推理也被称为“解释”,因为一个原因解释了另一个原因的原因,这在第三象限图 3 的左下方进行了说明。

综合推理

如果一个学生选了一门“简单”的课程,却有一封“糟糕的信”,那么他得到“C”的可能性有多大?这可以用具有组合推理模式的查询来解释。请注意,它具有混合信息,并且不像其他推理模式那样沿单一固定方向流动,如图右下方象限 4 所示:

Combined reasoning

图 3。推理模式

独立性、影响流、D-分离、I-Map

当执行查询时,可以利用节点之间的条件独立性来减少计算。在这一节中,我们将讨论一些与独立性相关的重要概念。

影响力的流动

影响 是一个变量的条件或结果如何改变与另一个变量相关的价值或信念的影响。我们已经从推理模式中看到了这一点,这些推理模式影响直接关系(父母/子女)、因果/证据关系(父母和子女以及中间物)以及组合结构中的变量流。

影响不流动的唯一情况是当存在“v 型结构”时。也就是说,给定三个变量Flow of influence之间的边,在 X [i - 1] 和 X [i + 1] 之间存在 v 型结构,没有影响流。例如,课程的难度和学生的智力之间没有影响。

D-分离

随机变量 XY 在图 G 中被称为 d 分隔,假定在 XY 之间没有活动轨迹,在 G 中给定 Z 。它正式表示为:

dsepT2G*(X,Y|Z)*

d 分离的要点是它完美地映射到点之间的条件独立性。这给出了一个有趣的性质:在贝叶斯网络中,给定节点的父节点,任何变量都独立于它的非后代。

在学生网络示例中,节点/变量字母与难度、智力和 SAT 分开,给出了分数。

智能地图

从 d-分离,在图 G 中,我们可以收集来自 d-分离的所有独立性,并且这些独立性被正式表示为:

I-Map

如果 P 满足 I ( G ,那么我们说 GP 的独立映射或 I 映射。

I-Map 的主要观点是,它可以被正式地证明与独立性的因式分解关系成立。反过来也可以证明。

简而言之,人们可以在贝叶斯网络图 G 中读到,不管任何参数,分布 P 中的所有独立性都成立!

以学生网络为例,其整体分布如下所示:

P(D,I,G,S,L) = P(D)P(I|D)P(G D,I)P(S D,I,G)P(L D,I,G,S)

现在,考虑独立于 I-Maps:

  • 变量 ID 是非后代并且不以父母为条件,所以 P(I|D) = P(I)

  • 变量 S 独立于其非后代 DG ,给定其父 IP(S D,I,G)=P(S|I)

  • Variable L is independent of its non-descendants D, I, and S, given its parent G. P(L¦D,I,G,S)=P(L|G)

    (D,I,G,S,L)=P(D)P(I)P(G D,I)P(S I)P(L G)

因此,我们已经展示了 I-Map 有助于仅给定图网络的因式分解!

推论

概率图模型的最大优势是它们的能力,在给定一些证据的情况下,以条件或地图或边际地图的形式回答概率查询。

形式上,证据的概率 E = e 由下式给出:

Inference

但是这个问题已经被证明是 NP 难的(参考 [3]),或者具体来说,# P-完全。这意味着当有大量的树或变量时,它是难以处理的。即使树宽(最大集团中的变量数量)为 25,这个问题似乎也很难解决——大多数现实世界的模型的树宽都比这个大。

因此,如果之前讨论的精确推理是难以处理的,那么是否可以使用一些近似,以便在一定的误差范围内,我们可以使问题易于处理?已经表明,即使是计算带有误差的推论的近似算法? < 0.5,这样我们就找到一个数 p 这样|P(E=E)–P|<,也是 NP-Hard。

但好消息是,这是显示指数时间复杂性的“最坏情况”结果之一。在“一般情况”下,可以应用试探法来减少精确算法和近似算法的计算时间。

执行精确和近似推理的一些众所周知的技术在图 4 中描述,除了贝叶斯网络,它还涵盖了大多数概率图模型。

Inference

图 4。精确和近似推理技术

详细讨论这些问题超出了本章的范围。我们将详细解释一些算法,并附有参考文献,以便读者更好地理解。

基于排除的推理

这里我们将描述两种技术,变量消除算法和团树或连接树算法。

变量消去算法

变量消去 ( VE )算法的基础在于分配性,如图所示:

(ab+ac+ad)= a (b+c+d)

换句话说,通过去掉公因数 a ,三乘二加的五次算术运算可以减少为一乘三加的四次算术运算。

让我们通过学生网络中的一个简单例子来理解计算量的减少。如果我们要计算一个概率查询比如考试难度给定的字母是 good,即 P(D L=good)=?

使用贝叶斯定理:

Variable elimination algorithm

要计算 *P(D L=good)=?*我们可以使用链式法则和联合概率:

Variable elimination algorithm

如果我们重新排列右边的术语:

Variable elimination algorithm

如果我们现在替换Variable elimination algorithm,因为因子独立于变量 I ,而变量 S 以变量为条件,我们得到:

Variable elimination algorithm

因此,如果我们小心地进行,一次消除一个变量,我们已经有效地将 O(2 ^n ) 因子转换为 O(nk ² ) 因子,其中 n 是变量的数量, k 是每个变量的观察值的数量。

因此,VE 算法的主要思想是对变量进行排序,使查询变量排在最后。在变量的有序列表上维护因子列表,并执行求和。通常,我们在 VE 算法的实现中使用动态规划(引用【4】)。

输入和输出

输入:

  • 条件概率分布列表/表 F
  • 查询变量列表 Q
  • 观察变量列表 E 和观察值 e

输出:

  • P(Q|E=E)
它是如何工作的?

该算法循环调用eliminate函数,如下所示:

变量消除:

  1. 而*?*,贝叶斯网络中所有随机变量的集合不为空

    1. 中去掉第一个变量 Z
    2. 消除 ( FZ )
  2. 结束循环。

  3. 设置*?*?? F 中所有因素的乘积

  4. 在*中实例化观察变量?*到它们的观测值。

  5. 返回How does it work?(重正化)

消除 ( FZ )

  1. F 中删除所有功能,例如, X [1] , X [2] ,…。涉及 ZXk。
  2. 计算新函数How does it work?
  3. 计算新函数How does it work?
  4. 添加新功能*?*到 F
  5. 返回 F

考虑同样的以 P(D,L = good) 为目标的学生网络的例子。

  1. 挑选一个变量排序列表: SILGD

  2. Initialize the active factor list and introduce the evidence:

    列表: P(S I)P(I)P(D)P(G I,D)P(L G)d(L = good)

  3. Eliminate the variable SAT or S off the listHow does it work?

    列表: P(I)P(D)P(G I,D)P(L G)d(L =好) 1 (I)

  4. Eliminate the variable Intelligence or IHow does it work?

    列表: P(D)P(L G)d(L =好) 2 (G,D)

  5. Eliminate the variable Letter or LHow does it work?

    列表: P(D) [3] (G) [2] (G,D)

  6. Eliminate the variable Grade or GHow does it work?

    列表: P(D) [4] (D)

这样就有了两个值,P(D =高) [4](D =高)P(D =低) [4](D =低),我们得到答案。

优点和局限性

优点和局限性如下:

  • VE 算法的主要优势在于其简单性和通用性,可应用于许多网络。
  • 当网络中有许多连接时,VE 的计算减少优势似乎消失了。
  • 变量最优排序的选择对于计算效益非常重要。

团树或连接树算法

连接树或团树是基于变量消除技术的更有效形式。

输入和输出

输入:

  • 条件概率分布列表/表 F
  • 查询变量列表 Q
  • 观察变量列表 E 和观察值 e

输出:

  • P ( Q| E = e )
它是如何工作的?

涉及的步骤如下:

  1. 道德化:这是一个将有向图转化为无向图的过程,分以下两步:

    1. 用节点间的无向边替换有向边。
    2. 如果有两个不相连但有一个公共子节点的节点或顶点,添加一条连接它们的边。(注意V4 与V5 与V2 与V3 中的5】:

    How does it work?

    图 5。十克的图形道德化,用绿色显示方向边是如何改变的,用红色显示新增加的边

  2. 三角剖分:要理解三角剖分,必须形成弦。一个循环的弦是一对顶点VI 和Vj,它们之间有一条边。如果长度≥ 4 的每个圈都有弦,则称一个图为弦图或三角图。注意图 6V1 和V5 之间的边形成弦使道德化图形成为弦/三角化图形:How does it work?

    图 6。添加蓝色边的图三角剖分将道德化图转换为弦图

  3. Junction Tree: From the chordal graphs a junction tree is formed using the following steps:

    1. 找出图中的所有集团,并使它们成为具有所有顶点的集群的节点。团是在每对节点之间存在一条边的子图。如果两个节点有一个或多个公共顶点,则创建一条由相交顶点组成的边作为分隔符或 sepset。例如,具有边缘的循环 V [1] 、 V [4] 、 V [5] 和 V [6] 、 V [4] 、 V [5] 在V[4[之间具有公共边缘]]

    如果上图包含一个循环,则循环中的所有分隔符都包含相同的变量。通过创建最小生成树来删除图中的循环,同时包括最大分隔符。整个转换过程如图 7 所示:

    How does it work?

    图 7。连接树的形成

  4. 在连接树上运行消息传递算法:连接树可用于计算联合分布,使用集团和分隔符的因子分解,如How does it work?

  5. 计算连接树的参数:连接树参数可以利用原始贝叶斯网络中的父节点逐节点获得,称为集团势,如下:

    1. ( *?*1=P(V[5]|V[2], V3)P(V3)(注在原贝叶斯网边 V [5] 依赖于 V [2] ,V[3V[3]]
  6. 连接树中节点/集团间的消息传递:连接树中的一个节点,用集团CI 表示,将所有来自其邻居的消息与自己的集团势相乘,得到一个范围为集团的因子How does it work?。然后,它对除 sepset 或分隔符SI,j 上的变量之外的所有变量求和,这些变量位于CI 和Cj 之间,然后将结果因子作为消息发送给Cj。How does it work?

    图 8。连接树中节点/集团之间的消息传递

    How does it work?

这样,当消息传递到达树根时,联合概率分布就完成了。

优点和局限性

优点和局限性如下:

  • 算法对与连接树中的树宽相关的计算有一个理论上的上限。
  • 集团中每个势的倍增会导致数值上溢和下溢。

繁殖技术

在这里,我们讨论信念传播,这是一种常用的消息传递算法,通过引入因子图和可以在这些图中流动的消息来进行推理。

信念传播

信念传播是最实用的推理技术之一,适用于大多数概率图模型,包括有向图、无向图、基于链的图和时态图。为了理解信念传播算法,我们需要首先定义因子图。

因子图

从基本的概率理论中我们知道,整个联合分布可以表示为变量子集上的一个因子,如下所示

Factor graph

在 DAG 或贝叶斯网络中fs 是一种条件分布。因此,与变量子集相比,在表达因子的联合分布方面有很大的优势。

因素图是网络的一种表示,其中变量和涉及变量的因素都被制成显式节点(引用 [11])。在上一节的一个简化的学生网络中,因子图如图图 9 所示。

Factor graph

图 9。简化的“学生”网络的因子图

因子图是一个二分图,即它有两种类型的节点,变量和因子。

边缘在两种相反的类型之间流动,即从变量到因子,反之亦然。

将贝叶斯网络转换为因子图是一个简单的过程,如前所示,您可以开始添加变量节点和条件概率分布作为因子节点。贝叶斯网络和因子图之间是一对多的关系,即同一个贝叶斯网络可以在多个因子图中表示,并且不是唯一的。

因子图中的消息传递

有两种不同的信息在这些因素图中流动,这些因素图构成了通过通信进行的大部分计算。

  • 从因子节点到变量节点的消息:从因子节点发送到变量节点的消息在数学上可以表示为:Messaging in factor graphMessaging in factor graphMessaging in factor graph其中Messaging in factor graph因此,Messaging in factor graph是来自因子节点 f [s] 到 x 的消息以及来自 xx 的邻居的所有此类消息的乘积图 10。从因子节点到变量节点的消息传递
  • 变量节点到因子节点的消息:和前面的例子类似,变量到因子的消息可以表示为Messaging in factor graphMessaging in factor graph

因此,所有到达节点 x [m] 的因子都被相乘,除了它发送到的因子。

Messaging in factor graph

图 11。从变量节点到因子节点的消息传递

输入和输出

输入:

  • 条件概率分布列表/表(CPD/CPT) F
  • 查询变量列表 Q
  • 观察变量列表 E 和观察值 e

输出:

  • P ( Q| E = e )
它是如何工作的?
  1. 根据前面讨论的贝叶斯网络创建一个因子图。
  2. 将节点 Q 视为图的根。
  3. 初始化所有的叶子节点,即:How does it work?How does it work?
  4. 以递归方式将消息从一个叶节点传递到下一个节点。
  5. 移动到下一个节点,直到到达根节点。
  6. 根节点处的 Marginal 给出结果。
优点和局限性

优点和局限性如下:

  • 所讨论的这个算法非常通用,可以用于大多数图形模型。当有向树中没有环时,该算法给出精确的推理。
  • 这可以很容易地并行实现,并有助于可伸缩性。根据连接情况,内存需求可能非常高。

基于采样的技术

我们将讨论一个简单的方法,使用粒子和采样来说明从随机变量生成分布 P(X) 的过程。其思想是从贝叶斯网络中重复采样,并使用带有计数的样本来近似推断。

带拒绝的正向采样

关键的想法是使用拓扑顺序生成迭代变量的独立同分布样本。在一些证据的情况下,例如, P(X|E = e) 与生成的样本相矛盾,最简单的方法是拒绝样本并继续进行。

输入和输出

输入:

  • 条件概率分布列表/表 F
  • 查询变量列表 Q
  • 观察变量列表 E 和观察值 e

输出:

  • P ( Q| E = e )
它是如何工作的?
  1. j = 1 到m//样本数

    1. 创建一个拓扑顺序的变量,比如说 X [1] , X [2] , … X [n] 。

    2. i = 1 为n

      1. u[I]?X(父(XI)//将(XI)赋值给变量
      2. 样本(XI, P ( X [i)、P(X[I]|E=E)拒绝,转到 1.1.2。//如果样品与证据不符,则拒绝样品。]
    3. 回车( X [1] , X [2] ,…。Xn 作为样本。

  2. 使用样本中的计数计算 P ( Q | E = e)。

为学生网络生成的一个样本的示例可以是:对难度进行采样并变低,接下来对智力进行采样并变高,接下来使用 CPD 表对难度=低、智力=高的等级进行采样,得到等级=A,对智力=高的 SAT 进行采样,得到 SAT =好,最后使用等级=A 对字母进行采样,得到字母=好。因此,我们得到第一个样本(难度=低,智力=高,等级=A,SAT =好,字母=好)

优点和局限性

优点和局限性如下:

  • 这种技术实现和执行起来相当简单。它要求大量的样本在界限内近似。
  • 当证据集很大时,拒绝过程会变得很昂贵。

学习

学习背后的想法是在给定数据和领域专家的情况下,生成一个结构或找到参数,或者两者都有。

学习的目标如下:

  • 为了便于贝叶斯网络中的推理。推理的前提是结构和参数已知,这是学习的输出。
  • 使用贝叶斯网络促进预测。给定观察变量 X ,预测目标变量 Y
  • 使用贝叶斯网络促进知识发现。这意味着从数据中理解因果关系、关系和其他特征。

学习,一般来说,可以用图 12 来表征。假设有一个已知的概率分布 P ^* ,它可能是也可能不是从贝叶斯网络 G ^* 中生成的。假设观测数据样本是从已知的概率分布 P ^* 中生成或采样的。领域专家可能在场,也可能不在场,以包括关于该结构的知识或先验信念。与其他机器学习算法相比,贝叶斯网络是少数几种可以直接使用领域专家在变量关系或先验概率方面的输入的技术之一。在知识获取和从数据中学习的过程结束时,我们得到具有定义的结构和参数的贝叶斯网络(CPT)作为输出。

Learning

图 12。贝叶斯网络学习的要素

基于数据质量(缺失数据或完整数据)和来自专家的结构知识(未知和已知),下面的是贝叶斯网络学习的四个类别,如表 2 所示:

| 数据 | 结构 |
| 已知结构(学习参数) | 未知结构(学习结构和参数) |
| 完整数据 | 参数估计(最大似然,贝叶斯估计) | 最佳化(搜索和评分技术) |
| 不完整数据 | 非线性参数优化(期望最大化,梯度下降) | 结构和参数优化(结构 EM,混合模型) |

表 2。贝叶斯网络学习的种类

学习参数

在本节中,我们将讨论两种广泛使用的方法来估计给定结构的参数。我们将只讨论完整的数据,读者可以参考(参考文献 [8])中关于不完整数据参数估计的讨论。

贝叶斯网络的最大似然估计

最大 似然估计 ( MLE )是一种非常通用的方法,可以定义为:给定一个数据集合 D ,选择满足以下条件的参数Maximum likelihood estimation for Bayesian networks:

  • Maximum likelihood estimation for Bayesian networks
  • Maximum likelihood estimation for Bayesian networks
  • Maximum likelihood estimation for Bayesian networks

最大似然法是在给定训练数据的情况下选择贝叶斯网络参数的技术。详细讨论见(参考文献 6】)。

给定图 G 和训练数据![Maximum likelihood estimation for Bayesian networks 的已知贝叶斯网络结构,我们想要学习参数或 CPD——准确地说是 CPT。这可以表述为:Maximum likelihood estimation for Bayesian networks

现在每个例子或实例Maximum likelihood estimation for Bayesian networks都可以用变量来表示。如果有由xI 表示的 i 变量,并且每个变量的父变量由父变量Xi 给出,那么:

Maximum likelihood estimation for Bayesian networks

互换变量和实例:

Maximum likelihood estimation for Bayesian networks

术语是:

Maximum likelihood estimation for Bayesian networks

这是给定其父变量父变量Xi 的某个变量 x [i] 的条件可能性。因此,这些条件可能性的参数是由Maximum likelihood estimation for Bayesian networks给出的参数的子集。因此:

Maximum likelihood estimation for Bayesian networks

这里,Maximum likelihood estimation for Bayesian networks称为局部似然函数。这变得非常重要,因为总似然分解成局部似然的独立项,并被称为似然函数的全局分解属性。其思想是,通过简单地使用来自训练数据的不同结果的计数,这些局部似然函数可以被进一步分解为表格 CPD。

N [ijk] 为我们观察变量或节点 i 处于状态 k [,]给定父节点配置 j :

Maximum likelihood estimation for Bayesian networksMaximum likelihood estimation for Bayesian networks

例如,我们可以有一个对应于 X [i] = a [Xi] = b 的简单条目,通过从训练数据估计似然函数如下:

Maximum likelihood estimation for Bayesian networks

作为例子,考虑两种情况。首先,Maximum likelihood estimation for Bayesian networks满足 10 个实例,其中[= b= 100。第二种,当[Xi]= b= 1000 时,Maximum likelihood estimation for Bayesian networks满足 100。请注意,这两种概率达到了相同的值,而第二种概率的数据是第一种概率的 10 倍,是“更有可能”的估计值!类似地,对领域或先前知识的熟悉程度,或者由于不确定性而缺乏知识,也不会被 MLE 捕获。因此,当样本数量有限时,或者当领域专家知道先验知识时,这种方法就会遇到严重的问题。]

贝叶斯网络的贝叶斯参数估计

这种技术通过编码关于参数*的先验知识克服了 MLE 的问题。*具有概率分布。因此,我们可以将关于参数空间的信念或先验知识编码为概率分布,然后在估计中使用变量和参数的联合分布。

让我们考虑单变量参数学习,其中我们有实例 x [1], x [2] … x [M],并且它们都有参数**?** [X] 。

Bayesian parameter estimation for Bayesian network

图 13。单变量参数学习

Bayesian parameter estimation for Bayesian networkBayesian parameter estimation for Bayesian network

因此,网络是参数和数据的联合概率模型。优点是我们可以用它来做后验分布:

Bayesian parameter estimation for Bayesian networkBayesian parameter estimation for Bayesian network

P(?)=之前的

Bayesian parameter estimation for Bayesian network因此,最大似然和贝叶斯估计的区别在于先验的使用。

给定数据集 D ,将其推广到贝叶斯网络 G :

Bayesian parameter estimation for Bayesian networkBayesian parameter estimation for Bayesian network

如果我们假设参数是全局独立的

Bayesian parameter estimation for Bayesian network

因此,我们得到

Bayesian parameter estimation for Bayesian network

再次,如之前,子集**?Xi|Xi 之?**是局部的,因此整个后验概率可以用局部术语计算!

先验和后验采用狄利克雷分布

通常,在实践中,被称为狄利克雷分布的连续概率分布——这是一种贝塔分布——被用于来表示参数的先验。

Prior and posterior using the Dirichlet distribution

概率密度函数:

Prior and posterior using the Dirichlet distribution

这里,Prior and posterior using the Dirichlet distributionPrior and posterior using the Dirichlet distributionα项被称为超参数,而 a [ ijri ] > 0。Prior and posterior using the Dirichlet distribution是伪计数,也称为等效样本量,它为我们提供了先验的度量。

贝塔函数 B(a [ij] ) 通常用伽马函数表示如下

Prior and posterior using the Dirichlet distribution

使用狄利克雷分布的优点是它本质上是共轭的,也就是说,不管可能性如何,如果先验是狄利克雷,则后验也是狄利克雷!

可以看出参数的后验分布? [ijk] 是一个超参数更新的狄利克雷,有一个封闭形式的解!

a[ijk]=a[ijk]+N[ijk]

如果我们使用最大后验估计值和后验均值,它们可以表示为:

Prior and posterior using the Dirichlet distributionPrior and posterior using the Dirichlet distribution

学习结构

在没有任何领域知识或不了解结构的情况下学习贝叶斯网络包括学习结构和参数。我们将首先讨论用于评估网络结构的一些度量,然后讨论用于构建最佳结构的一些众所周知的算法。

评估结构的措施

给定数据集,用于评估贝叶斯网络结构的度量可以大致分为以下类别,许多类别的细节可以在这里获得(参考文献 [14])。

  • Deviance-Threshold Measure: The two common techniques to measure deviance between two variables used in the network and structure are Pearson's chi-squared statistic and the Kullback-Leibler distance.

    给定 M 个样本的数据集 D ,考虑两个变量XI 和Xj,度量散度的皮尔逊卡方统计量为

    Measures to evaluate structuresMeasures to evaluate structuresMeasures to evaluate structuresMeasures to evaluate structures

    d [?2] (D) 为 0;当变量是独立的,较大的值表示变量之间存在相关性。

    库尔巴克-莱布勒散度是:

    Measures to evaluate structures

    d [I] (D) 再次为 0,表示独立,数值越大表示依赖。使用各种统计假设检验,可以使用阈值来确定显著性。

  • 结构得分度量:在贝叶斯网络中,有各种各样的方法给一个结构打分。我们将在这里讨论最常用的措施。在参数学习中讨论的对数似然分数可以用作结构的分数:Measures to evaluate structures

  • 贝叶斯信息得分 ( BIC )也是一种相当流行的得分技术,因为它通过考虑复杂结构的惩罚来避免过拟合,如下面的等式Measures to evaluate structuresMeasures to evaluate structures所示

罚函数在 M 中是对数的,因此,随着它的增加,复杂结构的罚函数不太严重。

Akaike 信息得分(AIC)与 BIC 相似,具有相似的基于惩罚的得分,并且是:

Measures to evaluate structures

在参数学习中讨论的贝叶斯分数也被用作评分标准。

学习结构的方法

我们将在本节讨论一些用于学习结构的算法;细节可以在这里找到(参考文献 [15])。

基于约束的技术

基于约束的算法使用各种变量的独立性测试,通过遵循这里讨论的一步一步的过程,试图找到我们在前面的部分中讨论的不同的结构依赖性,例如 d 分离、v 结构等等。

输入和输出

输入是带有所有变量 {X,Y }的数据集 D ..} 已知每一个实例{1,2,... m },并且没有缺失值。输出是一个贝叶斯网络图 G ,所有的边、方向都在 E 和 CPT 表中。

它是如何工作的?
  1. 创建一个无向边 E 的空集。

  2. 检验两个独立于有边方向的变量之间的条件独立性。

    1. 若对于所有子集S=U–{X,Y },若 X 独立于 Y ,则将其添加到无向边集合E*’*。
  3. 一旦识别出所有潜在的无向边,就可以从集合E*’*中推断出边的方向性。

    1. 考虑一个三元组 {X,Y,Z} ,如果有一条边X–ZY–Z,但是在X–Y之间没有边使用集合中的所有变量,并且进一步,如果 X 不独立于 Y 给定所有的边S=U-
    2. 添加边缘How does it work?How does it work?设置 E
    3. 使用本地计算更新 CPT 表。
  4. 返回贝叶斯网络 G ,边 E ,以及 CPT 表。

优点和局限性
  • 缺乏鲁棒性是这种方法的最大缺点之一。由于独立性假设会渗透到独立测试中,数据中的小错误会对结构造成大的影响。
  • 可伸缩性和计算时间是一个主要问题,因为每个变量子集都要经过测试,并且大约为 2 ^n 。随着变量的数量增加到 100 个,这种方法由于计算时间而失败。
搜索和基于分数的技术

搜索和评分方法可以被视为一种启发式优化方法,其中通过小扰动迭代地改变结构,并且使用诸如 BIC 或最大似然法之类的测量来给结构评分,以找到最佳评分和结构。爬山法、深度优先搜索法、遗传算法等等,都被用于搜索和评分。

输入和输出

输入是包含所有变量 {X,Y }的数据集 D ..} 已知每一个实例{1,2,... m }并且没有缺失值。输出是贝叶斯网络图 G ,所有的边和方向都在 E 中。

它是如何工作的?

How does it work?

图 14。搜索和评分

  1. 初始化图 G ,或者基于领域知识或者空或者满。根据图形初始化边集 E ,根据图形 GE 和数据 D 初始化 CPT 表 T 。还提到了正常终止条件,例如最大终止时间:

  2. maxScore= -8,score=computeScore(G, E ,T)

  3. do

    1. max score = score

    2. For each variable pair*(X,Y)*

      1. For eachHow does it work?

      2. New Graph G ' based parents and variables with edge changes

      3. 计算新的 CPTT’?computeCPT(G ',E ',D)

      4. currentScore = computeScore(G ', E ',T ')

      5. IfcurrentScore>score:

        1. score = currentScore
        2. G ' = GE ' =
  4. 重复 3 while ( How does it work?

优点和局限性
  • 陷入局部最优是大多数启发式搜索方法的缺点,也是最大的缺点之一。
  • 启发式搜索中没有收敛性或理论上的保证,所以搜索终止性很大程度上是靠猜测。

**

马尔可夫网络和条件随机场

到目前为止,我们已经讨论了概率图模型领域中的有向无环图,包括表示、推理和学习的各个方面。当图是无向图时,它们称为马尔可夫网络 ( MN )或马尔可夫随机 ( MRF )。像以前一样,我们将在本节讨论马尔可夫网络的一些方面,包括表示、推理和学习。马尔可夫网络或 MRF 在诸如分割、去噪、立体、识别等计算机视觉的各个领域中非常流行。如需进一步阅读,请参见(参考文献【10】)。

表象

即使马尔可夫网络,像贝叶斯网络一样,有无向的边,它仍然有局部的相互作用和分布。我们将首先讨论参数化的概念,这是一种捕捉这些相互作用的方法,然后讨论 MN 中的独立性。

参数化

MN 中变量之间的相似性通过以下章节中讨论的三种可选参数化技术来获取。

吉布斯参数化

概率分布函数被称为处于吉布分布或由吉布分布参数化,如果

Gibbs parameterization

Z 称为配分函数,定义为:

Gibbs parameterization

请注意,变量之间的相互作用由因子Gibbs parameterization捕获,不是边际概率,而是对联合概率的贡献。参数化马尔可夫网络的因素称为集团势。通过在图中的最大团上选择因子,参数的数量大大减少。

因子图

马尔可夫网络的图结构在使用 Gibbs 参数化时并不揭示诸如因素是否涉及最大团或它们的子集的性质。在贝叶斯网络的推理一节中讨论的因子图具有识别最大集团的步骤,因此可以捕获这些参数化。请参考 BN 中的因子图部分。

对数线性模型

参数化的另一种形式是使用来自统计物理学的能量模型表示。

势被表示为一组特征,势表通常由具有与其相关联的权重的特征来表示。

如果 D 是一组变量,Log-linear models是一个因子,那么:

Log-linear models

因此,随着能量的增加,概率降低,反之亦然。在统计物理学中,在Log-linear models中捕获的对数细胞频率被称为对数线性。联合概率可以表示为:

Log-linear models

Log-linear models是定义在DI 中变量上的特征函数。

独立自主

像贝叶斯网络一样,马尔可夫网络也编码了一组控制无向图中影响流的独立性假设。

全球

一组节点 Z 分隔一组节点 XY ,如果 X 中任意节点之间没有活动路径? XYY 给定 Z 。图 G 中的独立性为:

Global

成对马氏

两个节点, XY ,如果它们之间没有直接的边,那么它们是独立的。这种属性具有局部独立性,是所有属性中最弱的:

Pairwise Markov

马氏毯

给定其马尔可夫毯,节点独立于图中的所有其他节点,这是马尔可夫网络中的一个重要概念:

Markov blanket

这里***= X 的马氏毯*。**

图 15 显示了一个马氏毯为变量 X 为其的父母、子女和子女的父母:

**Markov blanket

图 15。节点 X 的 Markov blanket 它的父节点、子节点和子节点的父节点。**

推论

MNs 中的推理是类似的# P-完全问题,因此应用了类似的近似或试探法。贝叶斯网络中讨论的大多数精确和近似推理技术,如变量消去法、连接树法、信念传播法等,都可以直接应用于马尔可夫网络。边缘和条件保持相似,并通过集团上的潜在函数进行计算,如下

Inference****Inference

马尔可夫毯简化了一些计算。

学习

由于划分函数中所有参数的纠缠,学习马尔可夫网络中的参数是复杂且计算昂贵的。将计算分解成局部分布的有利步骤无法完成,因为划分函数需要网络中所有变量的因子耦合。

MN 中的最大似然估计没有封闭形式的解,因此使用诸如梯度下降的增量技术来优化整个参数空间。优化函数可以显示为凹函数,从而确保全局最优,但是梯度下降中的每一步迭代都需要在整个网络上进行推理,这使得计算成本很高并且有时难以处理。

贝叶斯参数估计需要对整个参数空间进行积分,这同样没有封闭形式的解,甚至更难。因此,最常见的是,近似学习方法,如马尔可夫链蒙特卡罗** ( MCMC )用于 MNs。**

MNs 中的结构学习类似于甚至比参数学习更难,并且已经被证明是 NP 难的。在基于约束的方法中,对于给定的数据集,测试变量之间的条件独立性。在 MNs 中,使用变量对之间的互信息来测试每对变量的条件独立性。然后,基于阈值,边缘被认为存在于该对之间或者不存在。这种方法的一个缺点是需要非常大量的样本来反驳数据中存在的任何噪声。由于成对边缘的出现而导致的网络的复杂性是另一个限制。

在搜索和基于分数的学习中,目标类似于 BNs,其中搜索是针对结构进行的,并且基于各种技术计算分数以帮助和调整搜索。在 MNs 的情况下,我们使用对数线性模型中描述的特征,而不是电势。在优化和评分过程中考虑特征的权重。

条件随机字段

条件 随机场 ( CRFs )是马尔可夫网络的一种特殊形式,其中隐藏的和可观察的主要针对标记序列预测问题进行建模(参考文献【16】)。序列预测问题出现在许多文本挖掘领域,如下一个单词/字母预测、词性 ( 词性)标注等,以及用于 DNA 或蛋白质序列预测的生物信息学领域。

CRFs 背后的思想是序列的条件分布被建模为特征函数,并且标记的数据被用于通过优化经验分布来学习,如下图所示。

**条件分布表示如下,其中 Z ( x )是归一化常数。最大似然用于的参数估计?一般是通过梯度下降等迭代优化方法获得的对数线性凸函数。

**Conditional random fields****Conditional random fields

图 16:映射到词类标记域中序列预测区域的条件随机字段。** **

专业网络

在本节中,我们将涵盖一些基本的专业概率图模型,这些模型在不同的机器学习应用中非常有用。

树形增强网络

在第二章、现实世界监督学习的实用方法中,我们讨论了朴素贝叶斯网络,它做出了所有变量相互独立的简化假设,只依赖于目标或类变量。这是从数据集导出或假设的最简单的贝叶斯网络。正如我们在前面几节中看到的,学习贝叶斯网络中的复杂结构和参数可能很困难,有时甚至很棘手。树增强网络TAN ( 引用【9】)可以被认为是中间的某个地方,引入了对树如何连接的约束。TAN 对特征或变量关系进行约束。除了目标变量之外,一个特征只能有一个其他特征作为父特征,如下图所示:

Tree augmented network

图 17。显示与朴素贝叶斯和贝叶斯网络的比较以及每个节点一个父节点的约束的树扩充网络。

输入和输出

输入是将所有特征作为变量的训练数据集 D ..} 。如果不需要作为预处理步骤进行离散化,则要素具有离散的结果。

输出作为贝叶斯网络与 CPT。

它是如何工作的?

  1. 从训练数据集中计算每对变量之间的互信息。
  2. 建立一个无向图,每个节点是变量,边是它们之间的互信息。
  3. 创建一棵最大加权生成树。
  4. 通过选择结果或目标变量作为根,并使所有边向外流动,将生成树转换为有向图。
  5. 如果类变量和其他特征之间没有有向边,则添加它。
  6. 基于之前构建的 DAG 或 TAN 计算 CPT。

优点和局限性

  • 在许多实际模型中,它比朴素贝叶斯更准确。与完全贝叶斯网络相比,它的构建和计算更简单、更快速。

马尔可夫链

马尔可夫链是专门的概率图模型,有向图包含循环。马尔可夫链可以被视为自动机的扩展,其中权重是转移的概率。马尔可夫链对于建模可直接观察到的时间或序列变化非常有用。进一步研究见(参考文献【12】)。

图 17 表示一个马尔可夫链(一阶),其一般定义可作为一个随机过程给出,包括

Markov chains节点为状态。

表示状态或节点之间转移概率的边。一般用矩阵Markov chains来表示,它是一个 N X N 的矩阵,其中 N 是节点或状态的个数。在给定状态qk 的情况下,Markov chains的值捕捉到节点ql 的转移概率。矩阵的行加 1 和Markov chains的值。

处于该状态的初始概率, p = { p [1] , p [2] ,… p [N] }。

因此,它可以写成三元组 M = (Q, A , p )并且处于任何状态的概率只取决于最后一个状态(一阶):

Markov chains

联合概率:

Markov chainsMarkov chains

图 18。一阶马尔可夫链

隐马尔可夫模型

在许多真实世界的情况下,我们感兴趣的事件是无法直接观察到的。例如,句子中的单词是可观察的,但生成句子的词性却不是。隐马尔可夫 模型 ( HMM )帮助我们对这类存在可观测事件和隐藏状态的状态进行建模(参考文献【13】)。HMM 广泛用于各种建模应用,例如语音识别、语言建模、时间序列分析和生物信息学应用,例如 DNA/蛋白质序列预测。

Hidden Markov models

图 19。显示隐藏变量和可观测值的隐藏马尔可夫模型。

隐藏的马尔可夫模型可以再次定义为三重Hidden Markov models,其中:

  • 是一组被观察到的有限状态或符号。Hidden Markov models
  • q 是一组不可观测的有限状态Hidden Markov models
  • t 是参数。

给定为Hidden Markov models的状态转移矩阵捕获了从状态qk 到ql 的转移概率。

捕捉隐藏状态和观察状态之间关系的发射概率,给定为Hidden Markov modelsb ??。Hidden Markov models

初始状态分布 p = { p [1] , p [2] ,… p [N] }。

因此,HMM 中由一系列隐藏状态 Q = { q [1] , q [2] ,… q [L] }组成的路径是一阶马尔可夫链 M = (Q, Ap )。HMM 中的这条路径发出一个符号序列, x [1] , x [2] , x [L] ,称为观测值。因此,已知观察和隐藏状态,联合概率是:

Hidden Markov models

在现实世界的情况下,我们只知道观察值 x ,不知道隐藏状态 q 。HMM 帮助我们回答以下问题:

  • 最有可能产生观察结果 x 的路径是什么?
  • x 的概率是多少?
  • 给定观察值,处于状态 q i = k 的概率是多少?

HMM 中最可能的路径

让我们假设观察值 x = x [1] , x [2] , x [L] ,我们想要找到生成观察值的路径Most probable path in HMM。这可以表示为:

Most probable path in HMM

路径 q* 不需要是唯一的,但是为了计算和解释,通常假设唯一的路径。以一种天真的方式,我们可以计算长度为 Lq 的所有可能路径,并选择具有最高概率给出指数计算项或速度的路径。更有效的是使用维特比算法,使用动态规划和递归的概念。它的工作原理很简单,就是将等式分解成更简单的项,如下所示:

Most probable path in HMMMost probable path in HMMMost probable path in HMM

这里,Most probable path in HMMMost probable path in HMM给定初始条件Most probable path in HMM,使用动态规划并保持指针指向路径,我们可以有效地计算答案。

隐马尔可夫模型中的后验解码

在给定观测值 x 的情况下,处于状态qIk 的概率可以使用贝叶斯定理写成:

Posterior decoding in HMM

分子可以改写为:

Posterior decoding in HMMPosterior decoding in HMMPosterior decoding in HMMPosterior decoding in HMM

其中Posterior decoding in HMM称为前向变量,Posterior decoding in HMM称为后向变量。

前向变量的计算类似于维特比算法,使用动态编程和递归,而不是求和:

Posterior decoding in HMMPosterior decoding in HMMPosterior decoding in HMM

观察到 x 的概率可以是,那么

Posterior decoding in HMM

前向变量是联合概率,后向变量是条件概率:

Posterior decoding in HMMPosterior decoding in HMMPosterior decoding in HMM

它被称为反向变量,因为动态编程表是从第L第列开始反向填充到第一列的。后向概率也可用于计算观察到 x 的概率,如下所示:

Posterior decoding in HMM

工具和用法

在这一节中,我们将介绍 Java 中两个非常流行的概率图建模工具。

OpenMarkov

OpenMarkov 是一个基于 Java 的 PGM 工具,下面是来自 www.openmarkov.org ?? 的描述:

注意

OpenMarkov 是由 UNED 智能决策支持系统研究中心开发的概率图形模型(PGM)软件工具。

它被设计用于:编辑和评估几种类型的 PGM,如贝叶斯网络、影响图、分解马尔可夫模型等等,从数据中交互式地学习贝叶斯网络,以及成本效益分析。

OpenMarkov 非常擅长从数据中执行交互式和自动化学习。它能够对数据进行预处理(使用频率和值进行离散化),并使用一些搜索算法(如基于搜索的爬山法和基于分数的 PC)进行结构和参数学习。OpenMarkov 以一种称为 pgmx 的格式存储模型。要在大多数传统包中应用模型,可能需要将 pgmx 模型转换为 XMLBIF 格式。各种开源工具提供了这些转换。

这里我们有一些截图,展示了如何使用 OpenMarkov 从数据中学习结构和参数。

图 20 中,我们看到了交互式学习屏幕,您可以在其中选择要使用的数据文件和算法:

OpenMarkov

图 20。OpenMarkov GUI–交互式学习,算法选择

下一步是 预处理选项卡(图 21 ,在这里我们可以选择如何进行离散化:

OpenMarkov

图 21。open Markov GUI–预处理屏幕

最后,在图 22 中,我们看到学习过的贝叶斯网络结构的显示:

OpenMarkov

图 22。open Markov GUI–结构输出

Weka 贝叶斯网络 GUI

与 OpenMarkov 相比,Weka 的用于交互式和自动化学习的 Bayes 网络编辑器具有大量用于 Bayes 网络表示、推理和学习的选项。使用 Weka 的优势是可以获得许多集成良好的预处理和转换过滤器、算法、评估和实验指标。

图 23 中,我们看到了贝叶斯网络编辑器,其中选择了搜索算法,并且可以配置各种选项:

Weka Bayesian Network GUI

图 23。WEKA Bayes 网络–配置搜索算法

图 24 的输出屏幕中显示了学习到的贝叶斯网络的结构和参数:

Weka Bayesian Network GUI

图 24。WEKA Bayes 网络——学习参数和结构

案例研究

在本节中,我们将使用真实世界的机器学习数据集进行案例研究,以说明贝叶斯网络中的一些概念。

我们将使用 UCI 成人数据集,也称为人口普查收入数据集(【http://archive.ics.uci.edu/ml/datasets/Census+Income】??)。这个数据集是从美国人口普查局 1994 年的人口普查数据中提取的。数据的捐赠者是 Ronny Kohavi 和 Barry Becker,他们当时在 Silicon Graphics 工作。该数据集由 48,842 个实例组成,具有 14 个属性,混合了分类和连续类型。目标类是二进制的。

商业问题

问题包括基于人口普查数据预测人口成员的收入,特别是他们的收入是否大于 50,000 美元。

机器学习映射

这是一个分类问题,这一次我们将训练贝叶斯网络来开发预测模型。我们将使用线性、非线性和集成算法,就像我们在前几章的实验中所做的那样。

数据采样和转换

在原始数据集中,有 3620 个实例具有缺失值和六个重复或冲突实例。这里我们只包括没有丢失值的例子。这个集合,没有未知数,被分成 30,162 个训练实例和 15,060 个测试实例。

特征分析

特性及其描述在表 3 中给出:

|

特征

|

类型信息

年龄 连续的。
workclass 私人,自我雇佣公司,自我雇佣公司,联邦政府,地方政府,州政府,无薪,从未工作过。
fnlwgt 连续的。
教育 学士,一些学院,11,HS-grad,Prof-school,Assoc-acdm,Assoc-voc,9,7-8,12,硕士,1-4,10,博士,5-6,学前。
教育-数量 连续的。
婚姻状况 已婚配偶,离婚,未婚,分居,丧偶,已婚配偶不在,已婚配偶。
职业 技术支持,工艺修理,其他服务,销售,行政管理,专业,清洁工,机器操作,检查,行政,文书,农业,渔业,运输,私人服务,保护服务,武装部队。
关系 妻子,自己的孩子,丈夫,非家庭成员,其他亲属,未婚。
人种 白人、亚洲太平洋岛民、美洲印第安爱斯基摩人、其他人、黑人。
女,男。
资本收益 连续的。
资本损失 连续的。
每周小时数 连续的。
母国 美国、柬埔寨、英国、波多黎各、加拿大、德国、美国外围(关岛-USVI 等)、印度、日本、希腊、中国、古巴、伊朗、洪都拉斯、菲律宾、意大利、波兰、牙买加、越南、墨西哥、葡萄牙、爱尔兰、法国、多米尼加共和国、老挝、厄瓜多尔、台湾、海地、哥伦比亚、匈牙利、危地马拉、尼加拉瓜、苏格兰、泰国、南斯拉夫、萨尔瓦多、特立尼达和多巴哥&秘鲁、香港、荷兰。

表 3。UCI 成人数据集–特征

数据集按标签分为 24.78% (>50K)到 75.22% ( ⇐ 50K). Summary statistics of key features are given in )图 25 :

Feature analysisFeature analysis

图 25。功能摘要统计

模型、结果和评估

我们将使用不同风格的贝叶斯网络结构以及常规的线性、非线性和集成算法对成人数据集进行详细分析。Weka 还可以选择使用菜单项在训练数据集上可视化图形模型,如图图 26 所示。当领域专家想要理解图模型的假设和结构时,这非常有用。如果领域专家想要更改或改变网络,可以使用贝叶斯网络编辑器轻松完成并保存。

Models, results, and evaluation

图 26。WEKA Explorer–可视化菜单

图 27 显示了经过训练的贝叶斯网络模型的图形结构的可视化:

Models, results, and evaluation

图 27:贝叶斯网络学习结构的可视化。

用于实验的算法有:

  • 贝叶斯网络分类器
  • 连续数据上带缺省核估计的朴素贝叶斯
  • 连续数据监督离散化的朴素贝叶斯
  • 使用 K2 算法和每个节点三个父节点的选择的具有搜索分数结构参数学习的树扩充网络(TAN)
  • 带搜索和评分的贝叶斯网络
  • 使用爬山和 K2 搜索
  • 使用简单估计进行评分
  • 父母的选择从两个变为三个,以说明对指标的影响
  • 非贝叶斯算法
  • 逻辑回归(默认参数)
  • KNN(有 10 个邻国的 IBK)
  • 决策树(J48,默认参数)
  • AdaBoostM1(决策树桩和默认参数)
  • 随机森林(默认参数)

表 4 给出了实验中使用的所有学习器的评估度量,包括贝叶斯网络分类器以及非贝叶斯算法:

|

算法

|

TP 率

|

FP 率

|

精确

|

回忆

|

f-测度

|

玛丽勒本板球俱乐部

|

ROC 区域

|

中国地区

朴素贝叶斯(核估计量) Zero point eight three one Zero point three nine one Zero point eight two one Zero point eight three one Zero point eight two two Zero point four nine four Zero point eight nine one Zero point nine zero six
朴素贝叶斯(离散化) Zero point eight four three Zero point one nine one Zero point eight six one Zero point eight four three Zero point eight four eight Zero point six Zero point nine one seven Zero point nine three
TAN (K2,3 个父母,简单估计量) Zero point eight five nine Zero point two seven three Zero point eight five six Zero point eight five nine Zero point eight five seven Zero point six Zero point nine one six Zero point nine three one
BayesNet (K2,3 个双亲,简单估计量) Zero point eight six three Zero point two eight three Zero point eight five eight Zero point eight six three Zero point eight six Zero point six zero five Zero point nine three four Zero point nine one nine
BayesNet (K2,2 个双亲,简单估计量) Zero point eight five eight Zero point two eight three Zero point eight five four Zero point eight five eight Zero point eight five five Zero point five nine four Zero point nine one seven Zero point nine three two
BayesNet(爬山,3 个父母,简单估计) Zero point eight six two Zero point two nine three Zero point eight five seven Zero point eight six two Zero point eight five nine Zero point six zero two Zero point nine one eight Zero point nine three three
逻辑回归 Zero point eight five one Zero point three three two Zero point eight four four Zero point eight five one Zero point eight four five Zero point five six one Zero point nine zero three Zero point nine one seven
KNN (10) Zero point eight three four Zero point three seven five Zero point eight two four Zero point eight three four Zero point eight two six Zero point five zero six Zero point eight six seven Zero point eight seven four
决策树(J48) Zero point eight five eight Zero point three Zero point eight five three Zero point eight five eight Zero point eight five five Zero point five nine Zero point eight nine Zero point nine zero four
AdaBoostM1 Zero point eight four one Zero point four one five Zero point eight three three Zero point eight four one Zero point eight two six Zero point five one three Zero point eight seven two Zero point eight seven three
随机森林 Zero point eight four eight Zero point three three three Zero point eight four one Zero point eight four eight Zero point eight four three Zero point five five five Zero point eight nine six Zero point nine one three

表 4。分类器性能指标

结果分析

监督离散化的朴素贝叶斯表现出比核估计相对更好的性能。这给出了一个有用的提示,即大多数贝叶斯网络都需要的离散化将发挥重要作用。

表中的结果表明,随着贝叶斯网络复杂性的增加,性能会不断提高。例如,具有离散化的朴素贝叶斯假设独立于所有特征,并显示出 84.3 的 TP 率,可以有多个父代的 TAN 算法显示出 85.9 的 TP 率,而具有三个父代的 BN 显示出 86.2 的最佳 TP 率。这清楚地表明,具有不超过三个父节点的一些节点的复杂 BN 可以捕获领域知识,并很好地对其进行编码,以根据看不见的测试数据进行预测。

贝叶斯网络使用搜索和评分(使用 K2 搜索三个父节点,使用贝叶斯评分进行评分)来学习结构,并使用简单估计来进行估计,在几乎所有评估指标中表现最佳,如高亮显示的值所示。

贝叶斯网络(使用搜索和爬山得分来学习结构)和 K2 之间的差异非常小,这表明即使是局部搜索算法也可以找到最优解。

具有三亲结构的贝叶斯网络在几乎所有关于看不见的测试数据的指标上击败了大多数线性、非线性和集成方法,例如 AdaBoostM1 和 Random Forest。这显示了 BNs 不仅在学习具有大量缺失值的小数据集的结构和参数方面以及在预测未知数据方面的优势,而且在击败其他复杂算法方面也是如此。

总结

PGM 将领域知识捕获为变量之间的关系,并表示联合概率。它们被用于一系列应用中。

概率将一个事件映射到一个介于 0 和 1 之间的真实值,可以解释为对事件发生频率的度量(频率主义者观点)或对该事件的信任程度(贝叶斯观点)。随机变量、条件概率、贝叶斯定理、链式法则、边际和条件独立性以及因子的概念构成了理解 PGMs 的基础。地图和边际地图查询是询问有关图表中的变量和关系的方法。

图的结构和它们的属性,例如路径、踪迹、循环、子图和集团,对于理解贝叶斯网络是至关重要的。表征、推理和学习构成了网络的核心元素,帮助我们使用这些方法捕捉、提取和预测。从图的表示中,我们可以推断出影响流并检测独立性,这有助于减少查询模型时的计算负载。连接树、变量消除和信任传播方法同样通过简化步骤使查询的推断更易处理。从贝叶斯网络中学习包括从数据中生成结构和模型参数。我们讨论了学习参数和结构的几种方法。

马尔可夫网络 ( MN ),其具有无向边,也包含可以使用参数化技术捕获的交互,例如吉布斯参数化、因子图和对数线性模型。MN 中的独立性支配着影响流,就像贝叶斯网络一样。推理技巧也差不多。学习 MN 中的参数和结构是困难的,并且使用近似方法。诸如树增强网络 ( TAN )之类的专用网络假设节点之间相互独立,并且在一些应用中非常有用。马尔可夫链和隐马尔可夫模型是在一系列领域中也找到应用的其他专业网络。

开放马尔可夫和 Weka 贝叶斯网络图形用户界面作为基于 Java 的工具引入 PGMs。本章的案例研究使用贝叶斯网络从 UCI 成人人口普查数据集学习,并将其性能与其他(非 PGM)分类器进行比较。

参考文献

  1. 达芙妮·柯勒和尼尔·弗里德曼(2009 年)。概率图形模型。麻省理工出版社。国际标准书号 0-262-01319-3。
  2. T.维尔马和 j .珀尔(1988),蒙大拿州第四届人工智能不确定性研讨会论文集,第 352-359 页。因果网络-语义和表达。
  3. 达古姆博士和卢比博士(1993 年)。在贝叶斯信念网络中近似概率推理是 NP 难的。人工智能 60(1):141–153。
  4. 单位伯特勒和 f .布里奥奇,非序列动态规划,学术出版社。纽约,1972 年。
  5. Shenoy,P. P .和 G. Shafer (1990 年)。概率和信任函数传播的公理,载于《人工智能中的不确定性》, 4,169-198,荷兰北部,阿姆斯特丹
  6. 巴亚里和德格鲁特(1989 年)。选择模型中的信息。概率和贝叶斯统计。),全会出版社,纽约。
  7. Spiegelhalter 和 Lauritzen (1990 年)。有向图形结构上条件概率的顺序更新。网络 20。第 579-605 页。
  8. 大卫·赫克曼,丹·盖格,大卫·M·奇克林(1995)。《机器学习杂志》。学习贝叶斯网络:知识和统计数据的结合
  9. n .弗里德曼、d .盖格和 m .戈尔兹米特(1997 年)。贝叶斯网络分类器。机器学习,29,131–163。
  10. Isham,V. (1981 年)。空间点过程和马尔可夫随机场的介绍。国际统计评论,49(1):21–43
  11. Frank R. Kschischang、Brendan J. Frey 和 Hans-Andrea Loeliger,因子图和积算法,IEEE Trans。信息。理论,第 47 卷,第 498-519 页,2001 年 2 月。
  12. Kemeny,J. G .和 Snell,J. L. 有限马尔可夫链。纽约:施普林格出版社,1976 年。
  13. 鲍姆;t .佩特里(1966 年)。有限状态马氏链概率函数的统计推断。数理统计年鉴。37 (6): 1554–1563.
  14. Gelman,a .,Hwang,j .和 Vehtar,A. (2004 年)。了解贝叶斯模型的预测信息标准。统计与计算杂志 24: 997。doi:10.1007/s11222-013-9416-2
  15. 迪米特里斯。玛格丽特酒(2003 年)。从数据中学习贝叶斯网络模型结构。卡内基梅隆大学博士论文。
  16. 约翰·拉弗蒂、安德鲁·麦卡勒姆、费尔南多·佩雷拉(2001 年)。条件随机场:分割和标记序列数据的概率模型,2001 年国际机器学习会议(ICML 2001),第 282-289 页。*****

七、深度学习

在第二章、现实世界监督学习的实用方法中,我们讨论了不同的监督分类技术,这些技术是通用的,可以在广泛的应用中使用。在受监督的非线性技术领域,特别是在计算机视觉领域,深度学习及其变体正在产生显著的影响。我们发现深度学习和相关方法可以应用于图像识别、图像和对象注释、电影描述,甚至文本分类、语言建模、翻译等领域。(参考文献【1、2、3、4、5】)

为了为深度学习奠定基础,我们将从描述什么是神经元以及如何排列它们来构建多层神经网络开始,呈现这些网络的核心元素,并解释它们如何工作。然后,我们将讨论与神经网络相关的问题,这些问题导致了深度学习的进步和结构变化。我们将了解深度学习的一些构建模块,如受限玻尔兹曼机器和自动编码器。然后,我们将通过监督和非监督学习的不同变化来探索深度学习。接下来,我们将参观卷积神经网络(CNN ),并通过一个用例,通过解构 CNN 在计算机视觉领域的应用来说明它们是如何工作的。我们将介绍递归神经网络(RNN)及其变体,以及它们如何用于文本/序列挖掘领域。最后,我们将展示一个使用 MNIST 图像真实数据的案例研究,并使用它来比较/对比不同的技术。我们将使用 DeepLearning4J 作为我们的 Java 工具包来执行这些实验。

多层前馈神经网络

历史上,人工神经网络在很大程度上是通过多层前馈感知器来识别的,因此我们将从讨论此类网络结构的原始元素、如何训练它们、过拟合问题以及解决该问题的技术开始。

输入、神经元、激活函数和数学符号

单个神经元或感知器与第二章、现实世界监督学习实用方法中线性回归主题中描述的单元相同。在本章中,数据实例向量将是由 x 表示的,并且有 d 个维度,每个维度可以表示为Inputs, neurons, activation function, and mathematical notation。与每个维度相关联的权重被表示为具有 d 维度的权重向量 w ,并且每个维度可以被表示为Inputs, neurons, activation function, and mathematical notation。每个神经元都有一个与之相关的额外输入 b ,称为偏置。

神经元预激活执行由下式给出的输入的线性变换:

Inputs, neurons, activation function, and mathematical notation

激活函数由Inputs, neurons, activation function, and mathematical notation给出,它将神经元输入Inputs, neurons, activation function, and mathematical notation转换如下:

Inputs, neurons, activation function, and mathematical notationInputs, neurons, activation function, and mathematical notation

图一。感知器通过输入、权重和偏置反馈来产生输出。

多层神经网络

多层神经网络是理解深度学习网络的第一步,因为多层网络的基本概念和原语构成了所有深度神经网络的基础。

结构和数学符号

我们在这一节介绍神经网络的一般结构。大多数神经网络都是这里概述的结构的变体。我们还提供了相关的符号,我们将在本章的其余部分使用。

Structure and mathematical notations

图二。显示一个输入层、两个隐藏层和一个输出层的多层神经网络。

与神经网络相关的最常见的监督学习算法使用多层感知器。输入层由几个神经元组成,每个神经元独立地连接到输入,有自己的一组权重和偏置。除了输入层,还有一层或多层神经元,称为隐藏层。输入层神经元连接到第一个隐藏层中的每个神经元,该层类似地连接到下一个隐藏层,依此类推,从而形成完全连接的网络。连接到最后一个隐藏层的神经元层称为输出层。

每个隐藏的层由Structure and mathematical notations表示,其中 k 是层。层 0 < k < l 的预激活由下式给出:

Structure and mathematical notations

隐藏层激活为Structure and mathematical notations:

Structure and mathematical notations

最终的输出层激活是:

Structure and mathematical notations

输出通常是每个神经元一个类,并且它以这样的方式被调整,即只有一个神经元被激活,而所有其他神经元的输出为 0。带有Structure and mathematical notations的 softmax 函数用于给出结果。

神经网络中的激活函数

神经网络中使用的一些最著名的激活函数在以下章节中给出,使用它们是因为学习中需要的导数可以用函数本身来表示。

乙状结肠功能

Sigmoid 激活函数由以下等式给出:

Sigmoid function

它可以被视为一个有界的、严格递增的正变换函数,将值压缩在 0 和 1 之间。

双曲正切(" tanh ")函数

以下等式给出了双曲正切函数:

Hyperbolic tangent ("tanh") function

它可以被看作是有界的,严格递增的,但作为一个正的或负的变换函数,压缩-1 和 1 之间的值。

训练神经网络

在本部分,我们将讨论从输入训练集训练神经网络的关键要素,其方式与我们在第二章、现实世界监督学习的实用方法中所做的大致相同。数据集由 D 表示,由单独的数据实例组成。实例通常表示为集合Training neural network。每个实例的标签表示为集合Training neural network。具有数值或实值特征的整个标注数据集被表示为集合中的成对元素,如Training neural network所示。

经验风险最小化

经验风险最小化是一个通用的机器学习概念,用于许多分类或监督学习。这种技术背后的主要思想是将训练或学习问题转化为优化问题(参考文献 [13])。

给定神经网络的参数为**?** = ({ W ¹ , W ² ,…W*L*(+1)},{ b ¹ , b ² ,…bL)这样

Empirical risk minimization

其中第二章、现实世界监督学习的实用方法和第五章、*实时流机器学习中讨论的【随机梯度下降】、*通常被用作优化过程。应用于训练神经网络的 SGD 是:

  1. 初始化**?** = ({ W ¹ , W ² ,…W*L*(+1)},{ b ¹ , b ² ,…bL

  2. 对于每个训练样本,i=1 到 N 个历元

    1. (x^t, y ^t ) Empirical risk minimization //求函数 2 的梯度?= ?+ a?//向

    方向移动

这里使用的学习速率(a)将通过减少最优值附近的振荡来影响算法的收敛;选择 a 的正确值通常是一个超级参数搜索,需要在第二章、现实世界监督学习实用方法中描述的验证技术。

因此,为了学习神经网络的参数,我们需要选择进行参数初始化的方式,选择损失函数Empirical risk minimization,计算参数梯度Empirical risk minimization,将损失传播回来,选择正则化/罚函数 O( ),并计算正则化梯度Empirical risk minimization。在接下来的几节中,我们将一步一步地描述这一点。

参数初始化

神经网络的参数是从输入层,经过隐层,到输出层的每一层的权重和偏差。由于优化取决于启动或初始化,因此在这方面已经有了很多研究。偏差通常设置为 0。权重初始化取决于激活函数,因为有些函数(如 tanh,值 0)无法使用。通常,初始化每层权重的方法是使用具有用户定义边界的对称函数进行随机初始化。

损失函数

损失函数的主要作用是最大化预测输出标签与输入数据向量类别的匹配程度。

因此,最大化Loss function相当于最小化对数似然或交叉熵的负值:

Loss function

渐变

我们将描述输出层和隐藏层的渐变,但不涉及推导,因为这超出了本书的范围。感兴趣的读者可以看看鲁梅尔哈特、辛顿和威廉姆斯在文中的推导(参考文献 [6])。

输出层的渐变

输出层的梯度可计算如下:

Gradient at the output layerGradient at the output layerGradient at the output layer

其中 e(y) 被称为“一个热向量”,其中向量中只有一个值是 1,对应于正确的类别 y ,其余的值是 0。

输出层预激活处的梯度可以类似地计算:

Gradient at the output layer

=–(e(y)–f(x))

隐藏层的渐变

使用偏导数的链式法则计算隐藏层梯度。

隐藏层的渐变Gradient at the Hidden Layer

Gradient at the Hidden Layer

隐藏层预激活的梯度可以表示为:

Gradient at the Hidden LayerGradient at the Hidden Layer

由于隐藏层预激活需要如前所示的激活函数的偏导数(g’(a^kx[j])),所以之前描述的一些众所周知的激活函数在方程本身方面具有偏导数,这使得计算非常容易。

例如,sigmoid 函数的偏导数是g '(a)= g(a)(1–g(a)),对于 tanh 函数,它是 1-g(a)²。

参数梯度

必须使用权重和偏差的梯度来计算参数的损失梯度。权重的梯度可以表示为:

Parameter gradientParameter gradient

偏差的梯度可以表示为:

Parameter gradientParameter gradient

前馈和反向传播

神经网络训练的目的是调整每一层的权重和偏差,以便根据来自输出层的反馈和估计预测输出和实际输出之间差异的损失函数,使差异最小化。

基于初始权重和偏差的神经网络算法可以被视为逐层转发计算,如具有一个隐藏层的非循环流程图所示,以演示流程:

Feed forward and backpropagation

图 3:前馈中的神经网络流程图。

根据输入向量以及权重和偏差的预初始化值,计算每个后续元素:预激活、隐藏层输出、最终层预激活、最终层输出以及相对于实际标签的损失函数。在反向传播中,流量正好相反,从输出端的损耗下降到第一层的权重和偏差,如下图所示:

Feed forward and backpropagation

图 4:反向传播中的神经网络流程图。

它是如何工作的?

反向传播算法(引用【6 和 7】)的整体可以总结如下:

激活前计算输出梯度:

How does it work?

对于隐藏层 k=l+1 到 1 :

计算隐藏层参数的梯度:

How does it work?How does it work?

计算当前下方隐藏层的梯度:

How does it work?

激活前计算层的梯度:

How does it work?

正规化

在之前定义的经验风险最小化目标中,正则化用于解决机器学习中的过拟合问题,如第二章、现实世界监督学习的实用方法中所介绍。众所周知的正则化函数给出如下。

L2 正规化

这仅适用于权重,而不适用于偏差,并适用于连接( i,j )组件的层,如下所示:

L2 regularizationL2 regularization

同样,正则化子的梯度可以计算为L2 regularization。它们通常被解释为权重分布的“高斯先验”。

L1 正则化

这再次应用于仅应用于权重而非偏差,并且对于连接 (i,j) 组件的层给出为:

L1 regularization

并且这个正则化子的梯度可以计算为L1 regularization。它通常被解释为权重分布的“拉普拉斯先验”。

神经网络的局限性

在本节中,我们将详细讨论神经网络所面临的问题,这些问题将成为构建深度学习网络的垫脚石。

消失梯度、局部最优和慢速训练

神经网络的一个主要问题是“消失梯度”的问题。我们将试图对这个问题给出一个简单的解释,而不是深入探究数学推导。如下图所示,我们将选择 sigmoid 激活函数和两层神经网络来演示该问题:

Vanishing gradients, local optimum, and slow training

图 5:渐变消失问题。

正如我们在激活函数描述中看到的,sigmoid 函数压缩范围 0 和 1 之间的输出。sigmoid 函数*g’(a)= g(a)(1–g(a))*的导数的范围在 0 到 0.25 之间。学习的目标是最小化输出损失,即Vanishing gradients, local optimum, and slow training。一般来说,输出误差不会到 0,所以最大迭代次数;用户指定的参数决定了学习的质量和误差的反向传播。

简化以说明输出误差对输入权重图层的影响:

Vanishing gradients, local optimum, and slow training

例如,从输出到隐藏的每一个变换都涉及两个项的乘法,这两个项都小于 1:

Vanishing gradients, local optimum, and slow training

因此,当到达输入层时,该值变得非常小,梯度的传播几乎消失。这就是所谓的消失梯度问题。

当您需要添加更多的层以使隐藏层中的特征更有趣时,一种矛盾的情况出现了。但是增加更多的层也会增加误差。随着您添加更多图层,输入图层变得“训练缓慢”,这导致输出图层更加不准确,因为它们依赖于输入图层;此外,对于相同的迭代次数,误差随着层数的增加而增加。

在最大迭代次数固定的情况下,更多的层和缓慢的误差传播会导致“局部最优”

基本神经网络的另一个问题是参数的数量。随着层数的增加,找到每个隐藏层和偏差的有效大小和权重变得更加困难。如果我们增加层数,参数以多项式形式增加。拟合数据的参数需要大量的数据样本。这可能导致之前讨论的问题,即过度拟合。

在接下来的几节中,我们将开始学习有助于克服这些问题的深度学习的构建模块。

深度学习

深度学习包括用于监督和非监督学习的架构和技术,能够使用由构建模块组成的网络来内部化高维数据的抽象结构,以创建判别或生成模型。近年来,这些技术被证明是非常成功的,任何有兴趣掌握它们的读者都必须首先熟悉深度学习的基本构建模块,并了解从业者使用的各种类型的网络。如果你想对这个主题有更深的理解,建立和调整深度神经网络的实践经验是非常宝贵的。在诸如图像分类和文本学习的各种领域中,深度学习在其结构中结合了特征生成,从而使得挖掘特征的任务在许多应用中是多余的。以下部分提供了概念、构建模块、构建架构的技术以及训练深度网络的指南。

深度学习的构建模块

在接下来的章节中,我们将介绍深度学习中使用的最重要的组件,包括受限玻尔兹曼机器、自动编码器和去噪自动编码器,以及它们的工作方式、优势和局限性。

校正线性激活函数

Reclin 函数由下式给出:

g(a)= reclin(a)= max(0*,* a )

可以看做有下界为 0 无上界,严格递增,正变换函数只是做正的线性变换。

更容易看出,整流线性单位或 ReLu 具有 1 的导数,或者对于大于 0 的值具有恒等式。这是一个很大的好处,因为衍生品不会被挤压,并且在链接时不会有递减的价值。ReLu 的一个问题是负输入的值为 0,相应的神经元表现为“死亡”,特别是当偏差项学习到大的负值时。因为输入和导数都是 0,所以 ReLu 不能从此恢复。这通常通过具有“泄漏的 ReLu”来解决。这些函数对于负输入值很小,由Rectified linear activation function给出,其中?= 0.01,典型值。

受限玻尔兹曼机器

受限波尔兹曼机器(RBM)是一种无监督学习的神经网络(参考文献 [11])。RBM 的想法是从有标签或无标签的数据中提取“更多有意义的特征”。它还意味着当访问已标记数据成本高昂或困难时,从许多领域中可用的大量未标记数据中“学习”。

定义和数学符号

在其基本形式中,RBM 假设输入在每个维度上都是二进制值 0 或 1。RBM 是具有两层的无向图形模型,可见层表示为 x ,隐藏层表示为 *h、*和连接 W

RBM 定义了可见层上的分布,它包含了隐藏层的潜在变量。首先,定义一个能量函数,以矢量形式捕捉可见层和隐藏层之间的关系,如下所示:

Definition and mathematical notation

在标量形式中,能量函数可以定义为:

Definition and mathematical notation

分布的概率由Definition and mathematical notation给出,其中 Z 被称为“配分函数”,它是对所有二进制的 x 和 h 的值的枚举,导致指数项,从而使其难以处理!

Definition and mathematical notation

图 6:可见层和隐藏层之间的连接。

可以使用所有成对因子以标量形式表示相同的马尔可夫网络视图,如下图所示。这也清楚地说明了为什么它被称为“受限”玻尔兹曼机,因为在给定的隐藏层或可见层中的单元之间没有联系:

Definition and mathematical notationDefinition and mathematical notation

图 7:作为标量的输入和隐藏层

我们已经看到,整个概率分布函数Definition and mathematical notation是难以处理的。我们现在将推导出 x,h 的基本条件概率分布。

条件分布

虽然计算整个 p(x,h) 是困难的,但是 p(x|h)p(h|x) 的条件分布可以很容易地被定义和显示为伯努利分布并且是易处理的:

Conditional distributionConditional distributionConditional distribution

类似地,由于对称且无向:

Conditional distributionConditional distributionConditional distribution

RBM 的自由能源

输入或观察变量的分布为:

Free energy in RBMFree energy in RBMFree energy in RBMFree energy in RBM

函数 F(x) 叫做自由能。

训练 RBM

使用最小化整个训练数据的平均负对数似然的优化目标来训练 RBM。这可以表示为:

Training the RBM

通过使用随机梯度下降进行优化:

Training the RBM

术语Training the RBM被称为“正阶段”,术语Training the RBM被称为“负阶段”,因为它们如何影响概率分布——正阶段,因为它通过减少自由能来增加训练数据的概率,负阶段,因为它减少模型生成样本的概率。

已经表明,由于“负相位”的存在,整体梯度很难解析计算,因为它是在模型形成的分布下计算输入数据的所有可能配置的期望值,并使其难以处理!

为了使计算易于处理,使用固定数量的模型样本进行估计,它们被称为“负粒子”,用 N 表示。

梯度现在可以写成近似值:

Training the RBM

其中粒子Training the RBM使用一些采样技术进行采样,例如蒙特卡罗方法。

在 RBM 取样

吉布斯采样(Gibbs sampling)是常用于生成样本并根据 p(x|h)p (h|x) 学习 p(x,h) 的概率的技术,相对容易计算,如前所示。

用于 N 个随机变量Sampling in RBM的联合采样的吉布斯采样使用形式为Sampling in RBM的 N 个采样子步骤来完成,其中S**-I包含直到并且不包括步骤 S [ i ] 的样本。从图形上看,这可以显示如下:

Sampling in RBM

图 8:隐藏层和输入层之间采样的图形表示。

Sampling in RBM所示,可以看出采样代表实际分布 p(x,h)

对比分歧

对比发散(CD)是一种用于加速前面描述的吉布斯采样过程的技巧,因此它在过程的步骤 k 处停止,而不是持续很长时间来保证收敛。已经看到,甚至 k=1 也是合理的,并且给出了良好的性能(引用【10】)。

输入和输出

这些是算法的输入:

  • 训练数据集
  • 吉布斯采样的步骤数, k
  • 学习率 a
  • 输出是一组更新的参数
它是如何工作的?

使用具有自由能函数和偏导数的 CD 的完整训练伪码可以给出如下:

  1. 对于训练中的每个实例 x ^t :

    1. 使用吉布斯采样的 k 步骤生成一个负粒子How does it work?

    How does it work?How does it work?How does it work?

持续的对比分歧

持续的对比背离是用于计算联合概率 p(x,h) 的另一个技巧。在这种方法中,有一个单链不会在每次观察样本后重新初始化,以找到负粒子Persistent contrastive divergence。它保持其状态,并通过使用上一步中的粒子运行这 k 个状态来更新参数。

Autoencoders

自动编码器是神经网络中另一种形式的无监督学习技术。它与开头描述的前馈神经网络非常相似,唯一的区别是它不在输出端生成类,而是试图在输出层复制输入(参考【12 和 23】)。目标是让隐藏层捕获输入的潜在或隐藏信息,作为在无监督或有监督学习中有用的特征。

定义和数学符号

下图显示了自动编码器的单个隐藏层示例:

Definition and mathematical notations

图 9:层间的自动编码器流程

输入层和输出层具有与前馈类似的相同数量的神经元,对应于输入向量, x 。每个隐藏层可以具有比输入或输出层更多、相等或更少的神经元,以及对信号进行非线性变换的激活函数。它可以被视为使用无监督的或潜在的隐藏结构来有效地“压缩”数据。

隐藏层对数据的编码器或输入变换由下式给出:

Definition and mathematical notations

输出层对数据的解码器或输出转换由下式给出:

Definition and mathematical notations

一般而言,在神经网络部分中描述的具有信号线性变换的 sigmoid 函数普遍用于各层:

Definition and mathematical notationsDefinition and mathematical notations

损失函数

损失函数的工作是像以前一样减少训练误差,以便可以使用诸如随机梯度函数的优化过程。

在二进制值输入的情况下,损失函数通常是由下式给出的平均交叉熵:

Loss function

很容易验证,当输入信号和输出信号匹配 0 或 1 时,误差为 0。同样,对于实值输入,使用平方误差:

Loss function

随机梯度过程所需的损失函数的梯度类似于前馈神经网络,并且可以通过对实值和二进制的求导如下所示:

Loss function

正如在神经网络中一样,通过反向传播Loss function获得参数梯度。

自动编码器的局限性

自动编码器有一些已知的缺点,这些缺点已经被专门的架构解决了,我们将在接下来的章节中讨论。这些限制是:

当自动编码器的大小等于输入中神经元的数量时,有可能自动编码器学习到的权重正好是单位向量,并且整个表示简单地将输入作为零损失的输出传递。因此,他们没有任何概括地模仿“死记硬背”或“死记硬背”。

当自动编码器的大小大于输入中神经元的数量时,这种配置称为“过完备”隐藏层,可能会出现与前面提到的问题类似的问题。一些单位可以关闭,其他的可以成为身份,使它只是复制单位。

当 Autoencoder 的大小小于输入中神经元的数量时,称为“欠完成”,可以发现数据中的潜在结构或重要的隐藏成分。

去噪自动编码器

如前所述,当自动编码器的隐藏层大小大于或等于输入的隐藏层大小时,它不能保证学习到权重,并且可以变成简单的将输入复制到输出的单元开关。去噪自动编码器解决了这个问题。这里,在输入和隐藏层之间添加了另一层。这一层使用众所周知的分布Denoising Autoencoder或使用随机噪声(如将二进制输入中的一位变为 0)向输入添加一些噪声。这个“噪声”输入然后从隐藏层学习到输出层,就像自动编码器一样。去噪自动编码器的损失函数将输出与实际输入进行比较。因此,添加的噪声和更大的隐藏层使得能够学习潜在结构或者添加/去除冗余以在输出端产生精确的信号。这种架构——噪声层的非零特征在隐藏层生成特征,这些特征随着信号的前进而由激活层进行转换——为学习出版社带来了鲁棒性和隐式结构(参考文献【15】)。

Denoising Autoencoder

图 10:降噪自动编码器

无监督预训练和有监督微调

正如我们在关于神经网络的问题部分中所讨论的,过度训练的问题尤其出现在深度学习中,因为层数以及参数的数量很大。解决过度拟合的一种方法是进行特定于数据的正则化。在本节中,我们将描述在隐藏层中完成的“无监督预训练”方法,以克服过拟合问题。注意,这一般是很多深度学习算法使用的“初始化过程”。

无监督预训练的算法以逐层贪婪的方式工作。如下图所示,在给定时间,考虑一个可见和隐藏结构层。该层的权重通过使用无监督技术(如之前描述的 RBM)进行几次迭代来学习。然后,隐藏层的输出被用作“可见”或“输入”层,训练进行到下一层,依此类推。

每一层的学习都可以被认为是一个“特征提取或特征生成”的过程。转换后的实际数据输入在给定层形成更高级别的特征,然后进一步组合以形成更高级别的特征,等等。

Unsupervised pre-training and supervised fine-tuning

图 11:通过无监督学习的逐层增量学习。

如前所述,一旦使用无监督技术在预训练中学习了所有隐藏层参数,接下来就是监督微调过程。在监督微调过程中,会添加最终输出层,就像在神经网络中一样,训练是通过向前和向后传播来完成的。其思想是大多数权重或参数几乎被完全调整,并且只需要很小的改变来在输出端产生有区别的类别映射。

Unsupervised pre-training and supervised fine-tuning

图 12:最终调优或监督学习。

深度前馈神经网络

深度前馈神经网络包括使用阶段预训练和微调。

根据所使用的无监督学习技术——RBM、自动编码器或去噪自动编码器——形成了不同的算法:分别是堆叠 RBM、堆叠自动编码器和堆叠去噪自动编码器。

输入和输出

给定深度前馈神经网络的架构,这些是训练网络的输入:

  • 层数 L
  • 没有标签的数据集 D
  • 带有标签 D 的数据集
  • 训练迭代次数n

它是如何工作的?

所有三种情况的通用学习/训练算法如下所示:

  1. 对于层 l=1 到 L (预训练):

    1. 没有标签的数据集How does it work?
    2. 执行逐层无监督学习(RBM、自动编码器或去噪自动编码器)
    3. 最终确定参数 W ^l , b ^l 来自上一步骤
  2. 对输出层 (L+1) 随机初始化参数W*L*(+1),b*L*(+1)。

  3. 对于层 l=1 到 L+1 (微调):

    1. 带标签的数据集How does it work?
    2. 使用来自 1 的预初始化权重。(Wl,bl)。
    3. 执行前向-反向传播,进行 n 次迭代。

深度自动编码器

深度自动编码器有许多层隐藏单元,这些隐藏单元收缩到非常小的尺寸,然后对称地增长到输入尺寸。

Deep Autoencoders

图 13:深度自动编码器

深度自动编码器背后的想法是创建使用深度网络捕捉潜在复杂输入结构的功能,同时克服由于深度结构而导致的梯度和欠拟合问题。结果表明,这种方法产生了更好的特征,并且在许多数据集上的表现优于 PCA参考文献【13】】。

深度自动编码器使用预训练、编码器/解码器和微调的概念来执行无监督学习:

在预训练阶段,RBM 方法用于学习编码器的贪婪逐步参数,如下图所示,用于初始化:

Deep Autoencoders

图 14:RBM 的阶梯式学习

在展开阶段,相同的参数被对称地应用于解码器网络进行初始化。

最后,微调反向传播用于调整整个网络的参数。

深度信念网络

深度信念网络(DBNs)是无监督预训练概念的起源(参考文献 [9])。无监督预训练起源于 DBNs,然后被发现在前馈有监督深度网络中同样有用和有效。

深度信念网络不是有监督的前馈网络,而是生成数据样本的生成模型。

输入和输出

输入层是数据的实例,由表示,每个输入特征对应一个神经元。DBN 的输出是对输入的重构,输入来自于一个不断提高的抽象层次的习得特征。

它是如何工作的?

这里以三层 DBN 架构为例解释 DBN 如何学习输入数据的联合分布。

How does it work?

图 15:深度信念网络

如图所示的三隐藏层 DBN 具有连接到两层贝叶斯网络的第一层无向 RBM。具有 sigmoid 激活函数的贝叶斯网络被称为 sigmoid 贝叶斯网络(SBN)。

生成模型的目标是学习由 p ( xh ^((1)) , h ^((2)) , h ^((3)) )给出的联合分布

p ( xhh(、 h、 ) = p ( h 、 ² )、 h 、^、 ) p)

如前所述,RBM 计算给我们提供了:

How does it work?

下两层的贝叶斯网络是:

How does it work?How does it work?

对于二进制数据:

How does it work?How does it work?

辍学者的深度学习

另一种用于克服深度神经网络中提到的“过拟合”问题的技术是使用 dropout 技术来学习参数。在接下来的部分中,我们将定义、说明和解释辍学者的深度学习是如何工作的。

定义和数学符号

辍学背后的想法是在学习参数后,通过随机删除一些隐藏单元来“削弱”深层神经网络结构,如下图所示。单位设置为 0,丢失概率通常设置为 p=0.5

这个想法类似于在输入中添加噪声,但是是在所有隐藏层中完成的。当某些特征(或特征的组合)被随机移除时,神经网络必须以更健壮的方式学习潜在特征,而不需要一些特征的相互依赖。

Definition and mathematical notation

图 16:通过用深色阴影丢弃某些单元来指示丢弃的深度学习。

每个隐藏层由 h ^k (x) 表示,其中 k 是层。层 0 < k < l 的预激活由下式给出:

Definition and mathematical notation

隐藏层激活为 1 < k < l 。二进制掩码在每个隐藏层用mk 表示:

Definition and mathematical notation

最终的输出层激活是:

Definition and mathematical notation

输入和输出

对于辍学者的培训,输入为:

  • 网络体系结构
  • 训练数据集
  • 脱落概率 p (通常为 0.5)

输出是经过训练的深度神经网络,可用于预测用途。

它是如何工作的?

我们现在将描述辍学者深度学习如何工作的不同部分。

辍学者的学习培训和测试

使用梯度对来自输出损失函数的权重和偏差进行反向传播学习与传统的神经网络学习非常相似。唯一的区别是掩码的应用是适当的,如下所示:

激活前计算输出梯度:

Learning Training and testing with dropouts

对于隐藏层 k=l+1 到 1 :

计算隐藏层参数的梯度:

Learning Training and testing with dropoutsLearning Training and testing with dropouts

h ^(k-1) 计算已经考虑到应用的二进制掩码 m ^(k-1) 。

计算当前下方隐藏层的梯度:

Learning Training and testing with dropouts

激活前计算下面层的梯度:

Learning Training and testing with dropouts

在测试模型时,我们不能使用二进制掩码,因为它是随机的;使用掩码的“预期”值。如果退出概率为 p=0.5 ,则相同的值 0.5 被用作测试或模型应用时单元的期望值。

稀疏编码

稀疏编码是另一种用于无监督学习和特征生成的神经网络(参考文献【22】)。它的工作原理是在捕捉模式的高维空间中寻找潜在结构,从而在无监督学习之外执行特征提取。

形式上,对于每个输入 x ^((t)) 学习一个潜在表示 h ^((t)) ,它具有稀疏表示(向量中大多数值为 0)。这是通过使用以下目标函数进行优化来实现的:

Sparse coding

其中第一项Sparse coding用于控制重建误差,第二项使用正则化器。,是为了稀疏性控制。矩阵 D 也被称为字典,因为它等价于字典中的单词,并且h(t)类似于词频;当执行文本挖掘时,它们一起捕捉单词在提取模式中的影响。

卷积神经网络

卷积神经网络或 CNN 已经变得突出,并广泛用于计算机视觉领域。计算机视觉涉及处理图像/视频以获取知识和模式。注释图像、分类图像/视频、纠正它们、讲故事或描述图像等等,是计算机视觉中的一些广泛应用[16]。

计算机视觉问题通常必须处理非结构化数据,这些数据可以描述为:

输入是具有单个或多个颜色通道的 2D 图像,或者是高维向量的 3D 视频。

这些 2D 或 3D 表示中的要素具有众所周知的空间拓扑、等级结构和一些可利用的重复元素。

基于诸如照明、噪声等因素,图像/视频具有大量的变换或变体。基于几个因素,同一个人或同一辆车可能看起来不同。

接下来,我们将描述 CNN 中使用的一些构建块。我们将使用简单的图像,例如字母表中的字母 X,来解释相关的概念和数学。例如,即使由于平移、缩放或扭曲,相同的字符 X 在下面的图中以不同的方式表示,人眼也可以很容易地将其读取为 X,但对于计算机来说,要看到该模式就变得很棘手。这些图片是在作者允许的情况下展示的(参考文献【19】):

Convolutional Neural Network

图 17:以不同方式表现的角色 X 的图像。

下图说明了 X 的简单灰度图像如何具有共同的特征,例如从左上角开始的对角线、从右上角开始的对角线以及左右交叉的对角线,这些特征被重复和组合以形成更大的 X:

Convolutional Neural Network

图 18:人物 x 形象中表现的共同特征。

本地连接

这是一个简单的概念,将整个图像分成“补丁”或“接收域”,并将每个补丁分配给隐藏层。如图所示,不是完整样本图像的 9 X 9 像素,而是从左上方开始的 3 X 3 像素片到达第一个隐藏单元,重叠的第二个像素片到达第二个,依此类推。

由于完全连接的隐藏层将具有大量的参数,因此具有较小的面片完全减少了参数或高维空间问题!

Local connectivity

图 19:整个图像上补丁的概念。

参数共享

参数共享的概念是构建一个权重矩阵,该矩阵可在不同的补丁或接收字段上重复使用,如前图中的局部共享所示。如下图所示,具有相同参数W1,1 和W1,4 的特征映射创建了两个不同的特征映射,特征映射 1 和 4,两者捕捉相同的特征,即两边的对角边。因此,特征映射捕获图像中的“相似区域”,并进一步降低输入空间的维度。

Parameter sharing

离散卷积

我们将解释离散卷积的步骤,用一个简单的人为例子和简化的数学来说明操作。

假设代表对角线特征的核作为 3×3 的小块在整个图像上被扫描。如果该核落在输入图像中的自同特征上,并且我们必须通过我们称之为卷积运算符的方法来计算中心值,则由于如下所示的匹配,我们得到精确值 1:

Discrete convolution

图 21:离散卷积步长。

整个图像在运行该内核和卷积运算符时会给出一个值矩阵,如下所示:

Discrete convolution

图 22:内核和卷积操作后字符图像的转换。

通过运行该扫描,我们可以看到左对角线特征是如何被突出显示的。同样,通过运行其他内核,如下图所示,我们可以得到一个“过滤图像堆栈”:

Discrete convolution

图 23:不同的特性贯穿内核,给出一堆图像。

中的每一个单元格的滤波图像可以给定为:

Discrete convolutionDiscrete convolutionDiscrete convolution

合并或二次抽样

池化或二次采样对过滤后的图像堆栈进行处理,以进一步缩小或压缩图像,同时保持模式不变。在汇集中执行的主要步骤是:

  1. 选择一个窗口大小(例如,2 X 2)和一个步幅大小(例如,2)。
  2. 在所有已过滤的图像上快速移动窗口。
  3. 在每个窗口,选择“最大”值。

Pooling or subsampling

图 24:最大池,使用 2 X 2 的窗口大小和 2 的步幅,计算第一个最大值为 1.0 的单元格值,第二个为 0.33,依此类推。

池化也起着重要的作用,因为使用了最大值,如果移动或缩放,仍然可以检测到相同的特征。相同的堆叠过滤图像集被转换成汇集图像,如下所示:

Pooling or subsampling

图 25:显示一堆过滤后的图像如何被转换为合并图像的转换。

使用 ReLU 进行标准化

正如我们在深度学习的构建模块中讨论的, ReLUs 通过将消极因素压缩为 0 来消除消极因素,并保持积极因素不变。它们在反向传播中的梯度计算中也起着重要作用,消除了消失梯度的消失梯度问题。

Normalization using ReLU

图 26:使用 ReLu 的转换。

CNN 图层

在这一节中,我们将把前面讨论的构件放在一起,形成 CNN 的完整画面。将卷积层、ReLU 层和池化层组合起来,形成一个连接的网络,生成具有最终输出中捕获的图案的缩小图像,我们就获得了下一个复合构造块,如下图所示:

CNN Layers

图 27:CNN 的基本单元,显示了卷积、ReLu 和池的组合。

因此,这些层可以组合或“深度堆叠”,如下图所示,形成一个复杂网络,输出一小部分图像:

CNN Layers

图 28:重复深层堆叠基本单元以形成 CNN 层。

如图所示,输出层是一个完全连接的网络,它使用投票技术并学习所需输出的权重。完全连接的输出层也可以堆叠。

CNN Layers

图 29:作为 CNN 输出的全连接层。

因此,最终的 CNN 可以完整地说明如下:

CNN Layers

图 30:所有层都显示输入和输出的 CNN。

如前所述,选择梯度下降作为学习技术,使用损失函数计算差值并向后传播误差。

如果数据到“图像”的映射可以成功完成并且“局部空间”模式存在,CNN 可以用于其他领域,例如声音模式识别、文本挖掘等等。下图显示了 CNN 使用的将声音和文本映射到图像的方法之一:

CNN Layers

图 31:时间数据(如声音到空间数据)到图像的映射示意图。

递归神经网络

正常的深度网络用于当你有有限的输入,并且在输入例子或实例之间没有相互依赖。当存在可变长度的输入并且它们之间存在时间依赖性时,即序列相关数据,神经网络必须被修改以处理这样的数据。递归神经网络(RNN)是广泛用于解决这类问题的神经网络的例子,我们将在以下部分讨论它们。rnn 用于许多序列相关的问题,如文本挖掘、语言建模、生物信息学数据建模等,仅举几个适合这种元级描述的领域(参考文献【18 和 21】)。

递归神经网络的结构

我们将首先描述 RNN 的最简单的单元,然后展示它是如何被组合的,以从功能和数学上理解它,并说明不同的组件是如何交互和工作的。

Structure of Recurrent Neural Networks

图 32:人工神经元和带反馈的神经元之间的区别。

让我们考虑基本输入,一个激活的神经元,以及它在给定时间 t 的输出:

Structure of Recurrent Neural NetworksStructure of Recurrent Neural Networks

具有反馈的神经元保持矩阵 W [R] 以合并在时间 t-1 的先前输出,并且等式是:

Structure of Recurrent Neural NetworksStructure of Recurrent Neural NetworksStructure of Recurrent Neural Networks

图 33:反馈连接在一起的神经元链。

基本的 RNN 堆叠了隐藏单元的结构,如图所示,反馈来自前一层。在时间 t 激活时,不仅依赖于x??(t)作为输入,还依赖于W[R]h^((t-1))给出的前一个单位。RNN 反馈连接中的权重在所有单元中通常是相同的,WR。此外,不是在前馈神经网络的最末端发出输出,而是每个单元连续发出可用于损失函数计算的输出。

RNNs 中的学习和相关问题

使用 RNNs 会带来一些挑战,这些挑战是 RNNs 特有的,但也有一些其他类型的神经网络也会遇到的常见问题。

  1. The gradient used from the output loss function at any time t of the unit has dependency going back to the first unit or t=0, as shown in the following figure. This is because the partial derivative at the unit is dependent on the previous unit, since:Learning and associated problems in RNNs

    通过时间反向传播(BPTT)是用来说明这一过程的术语。

    Learning and associated problems in RNNs

    图 34:随时间反向传播。

  2. 类似于我们在前馈神经网络一节中看到的,由于前面讨论过的单元的连接性,爆炸和消失梯度的情况在 RNNs 中变得更加明显。

  3. 爆炸渐变的一些解有:

    1. 截断 BPTT 是对 BPTT 过程的一个小改动。不是将学习传播回到时间 t=0 ,而是将其截断到向后到 t=k 的固定时间。
    2. 渐变裁剪当渐变向上射出时,剪切阈值以上的渐变。
    3. 自适应学习率。学习率根据反馈和值进行自我调整。
  4. 消失渐变的解决方案有:

    1. 使用 ReLU 作为激活函数;因此,梯度将是 1。
    2. 适应学习速度。学习率根据反馈和值进行自我调整。
    3. 使用扩展,比如长短期记忆(LSTM)和门控循环单元(GRUs),我们接下来会介绍。

RNNs 有许多应用,例如,在下一个字母预测、下一个单词预测、语言翻译等方面。

Learning and associated problems in RNNs

图 35:显示了使用 RNN 结构在下一个字母/单词预测中的一些应用。

长短期记忆

解决消失梯度问题的一种神经网络架构或对 RNNs 的修改被称为长短期记忆或 LSTM。我们将解释 LSTM 的一些组成部分,然后为我们的读者把它们放在一起。

对 RNN 的第一个修改是将反馈学习矩阵改为 1,即 W [R] = 1,如下图所示:

Long Short Term Memory

图 36:反馈矩阵设为 1 的 LSTM 积木。

这将确保来自旧单元或存储单元的输入按原样传递到下一个单元。因此,需要进行一些修改。

如下图所示,输出门结合了两种计算。第一个是通过激活函数传递的单个单元的输出,第二个是使用缩放通过 sigmoid 传递的旧单元的输出。

Long Short Term Memory

图 37:LSTM 的构建模块输出门。

从数学上讲,该单元的输出门由下式给出:

Long Short Term MemoryLong Short Term Memory

遗忘门位于两个存储单元之间。它根据学习到的权重和变换生成 0 或 1。遗忘门如下图所示:

Long Short Term Memory

图 38:LSTM 的积木式遗忘之门。

数学上,Long Short Term Memory可以看作是遗忘门的表示。接下来,组合输入门和新门,如下图所示:

Long Short Term Memory

图 39:添加新门和输入门以完成 LSTM 的构建模块。

新内存生成单元通过激活函数使用当前输入 x [t] 和旧状态 h [t-1] ,生成新内存 C [t] 。输入门将输入和旧状态相结合,并确定是应该保留新的存储器还是输入。

因此,更新等式如下所示:

Long Short Term Memory

门控循环单元

门控循环单元(gru)是经过修改的简化 LSTMs。通过使用一个“更新”单元简化了许多门,如下所示:

Gated Recurrent Units

图 40:带更新单元的 GRUs。

对等式所做的更改如下:

Gated Recurrent UnitsGated Recurrent UnitsGated Recurrent UnitsGated Recurrent Units

案例研究

图像分类有几个基准。在这个案例研究中,我们将使用 MNIST 图像数据库。当我们在第三章的中使用 MNIST 时,无监督的机器学习技术与聚类和离群点检测技术,每个像素都被视为一个特征。除了像在以前的实验中一样从像素值中学习之外,通过深度学习技术,我们还将从训练数据集的结构中学习新的特征。深度学习算法将在 60,000 张图像上进行训练,并在 10,000 张图像的测试数据集上进行测试。

工具和软件

在这一章,我们介绍名为 DeepLearning4J (DL4J)的深度学习开源 Java 框架。DL4J 有实现大量深度学习技术的库,它们可以在分布式 CPU 和 GPU 上使用。

深度学习 4j:deeplearning4j.org/index.html

我们将说明一些 DL4J 库在从 MNIST 训练图像学习中的使用,并应用所学习的模型来分类测试集中的图像。

商业问题

图片分类是评估深度学习网络的一个特别有吸引力的试验台。我们以前遇到过 MNIST 数据库,它由手写数字的灰度图像组成。这一次,我们将展示如何使用无监督和有监督的深度学习技术从同一个数据集进行学习。MNIST 数据集在单个通道中包含 28 x 28 像素的图像。这些图像被分为 10 个标签,代表数字 0 到 9。目标是在 60,000 个数据点上进行训练,并在剩余的 10,000 张图像上测试我们的深度学习分类算法。

机器学习映射

这包括应用于分类问题的监督和非监督方法,其中有 10 个可能的输出类。正如我们在前面章节中看到的,一些技术使用初始预训练阶段,这在本质上是无人监督的。

数据采样和传输

该数据集位于:

yann . lecun . com/exdb/mnst

在本案例研究的实验中,MNIST 数据集已被标准化,0 至 255 范围内的像素值已被标准化为 0.0 至 1.0 的值。例外是在使用堆叠 RBM 的实验中,其中训练和测试数据已经被二进制化,也就是说,如果标准化值大于或等于 0.3,则设置为 1,否则设置为 0。这 10 个类中的每一个在训练集和测试集中被同等地表示。此外,使用用户提供的随机数发生器种子对示例进行混洗。

特征分析

输入数据特征是每个图像中像素的灰度值。这是原始数据,我们将使用深度学习算法从原始像素值中学习更高级别的特征。数据集已经准备好,使得在训练集和测试集中每个类都有相同数量的示例。

模型、结果和评估

我们将从简单的 MLP、卷积网络、变分自动编码器、堆叠 RBMS 和 DBNs 开始进行不同的实验。我们将遍历代码中突出网络结构或专门调整的重要部分,给出帮助读者的参数,重现实验,并给出每种类型网络的结果。

基础数据处理

下面的代码片段显示:

如何从具有由分隔符强制的结构的 CSV 中读取数据。

如何迭代数据并获取记录。

如何在内存中混排数据并创建训练/测试或验证集:

RecordReader recordReader = new  ] CSVRecordReader(numLinesToSkip,delimiter);
recordReader.initialize(new FileSplit(new ClassPathResource(fileName).getFile()));
DataSetIterator iterator = new RecordReaderDataSetIterator(recordReader,batchSize,labelIndex,numClasses);
DataSet allData = iterator.next();
allData.shuffle();
SplitTestAndTrain testAndTrain = allData.splitTestAndTrain(trainPercent); 
DataSet trainingData = testAndTrain.getTrain();
DataSet testData = testAndTrain.getTest();

DL4J 有一个特定的 MNIST 包装器来处理我们使用的数据,如下面的代码片段所示:

DataSetIterator mnistTrain = new MnistDataSetIterator(batchSize, true, randomSeed);
DataSetIterator mnistTest = new MnistDataSetIterator(batchSize, false, randomSeed);

多层感知器

在第一个实验中,我们将使用一个基本的多层感知器,它有一个输入层、一个隐藏层和一个输出层。代码中使用的参数的详细列表如下:

用于 MLP 的参数

|

参数

|

可变的

|

价值

迭代次数 m one
学习率 速度 0.0015
动量 动力 Zero point nine eight
L2 正规化 正规化 Zero point zero zero five
输入中的行数 numRows 的 Twenty-eight
输入中的列数 数字列 Twenty-eight
第 0 层输出尺寸,第 1 层输入尺寸 输出层 0,输入层 1 Five hundred
第一层输出尺寸,第二层输入尺寸 输出层 1,输入层 2 Three hundred
第二层输出尺寸,第三层输入尺寸 输出层 2,输入层 3 One hundred
第三层输出尺寸, 输出数量 Ten

MLP 代码

在下面的清单中,我们可以看到我们如何通过使用构建器模式传入超参数来配置 MLP。

MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder() .seed(randomSeed) .optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT) // use SGD
.iterations(m)//iterations
.activation(Activation.RELU)//activation function
.weightInit(WeightInit.XAVIER)//weight initialization
.learningRate(rate) //specify the learning rate
.updater(Updater.NESTEROVS).momentum(momentum)//momentum
.regularization(true).l2(rate * regularization) // 
.list()
.layer(0, 
new DenseLayer.Builder() //create the first input layer.
.nIn(numRows * numColumns)
.nOut(firstOutput)
.build())
.layer(1, new DenseLayer.Builder() //create the second input layer
.nIn(secondInput)
.nOut(secondOutput)
.build())
.layer(2, new OutputLayer.Builder(LossFunction.NEGATIVELOGLIKELIHOOD) //create hidden layer
.activation(Activation.SOFTMAX)
.nIn(thirdInput)
.nOut(numberOfOutputClasses)
.build())
.pretrain(false).backprop(true) //use backpropagation to adjust weights
.build();

MLP 的培训、评估和测试如下面的代码片段所示。请注意初始化可视化后端的代码,使您能够在浏览器中监控模型训练,特别是模型得分(每次迭代后的训练误差)和参数更新:

MultiLayerNetwork model = new MultiLayerNetwork(conf);
model.init();
model.setListeners(new ScoreIterationListener(5));  //print the score with every iteration
//Initialize the user interface backend
UIServer uiServer = UIServer.getInstance();
//Configure where the network information (gradients, activations, score vs. time etc) is to be stored
//Then add the StatsListener to collect this information from the network, as it trains
StatsStorage statsStorage = new InMemoryStatsStorage();             //Alternative: new FileStatsStorage(File) - see UIStorageExample
int listenerFrequency = 1;
net.setListeners(new StatsListener(statsStorage, listenerFrequency));
//Attach the StatsStorage instance to the UI: this allows the contents of the StatsStorage to be visualized
uiServer.attach(statsStorage);
log.info(""Train model...."");
for( int i=0; i<numEpochs; i++ ){
log.info(""Epoch "" + i);
model.fit(mnistTrain);
        }
log.info(""Evaluate model...."");
Evaluation eval = new Evaluation(numberOfOutputClasses); 
while(mnistTest.hasNext()){
DataSet next = mnistTest.next();
INDArray output = model.output(next.getFeatureMatrix()); //get the networks prediction
eval.eval(next.getLabels(), output); //check the prediction against the true class
        }
log.info(eval.stats());

以下图显示了 MLP 模型的训练误差与训练迭代的关系。这条曲线应该随着迭代而减少:

Code for MLP

图 41:用 MLP 模型的训练迭代次数测量的训练误差。

在下图中,我们看到了 MLP 第 0 层中的参数分布以及参数更新的分布。这些直方图应该具有近似高斯(正态)形状,这表示良好的收敛性。有关如何使用图表调整模型的更多信息,请参见 DL4J 可视化页面(deeplearning4j.org/visualization):

Code for MLP

图 42:显示层参数和更新分布的直方图。

卷积网络

在第二个实验中,我们使用内置多层配置配置了一个卷积网络(ConvNet)。网络的架构总共由五层组成,这可以从下面的代码片段中看出。在输入图层之后,两个具有 5 乘 5 过滤器的卷积图层与最大池化图层交替出现,然后是使用 ReLu 激活图层的完全连接的密集图层,以最终输出图层中的 Softmax 激活结束。使用的优化算法是随机梯度下降,损失函数是负对数似然。

表中给出了 ConvNet 的各种配置参数(或超参数)。

用于 ConvNet 的参数

|

参数

|

可变的

|

价值

种子 种子 One hundred and twenty-three
输入尺寸 numRows,numcolumns 28, 28
历元数 numEpochs Ten
迭代次数 迭代次数 one
L2 正规化 正规化 Zero point zero zero five
学习率 学习率 Zero point one
动量 动力 Zero point nine
卷积滤波器尺寸 xsize,ysize 5, 5
卷积层步幅大小 x,y 1, 1
输入通道数量 数字频道 one
子采样层步幅大小 sx, sy 2, 2
第 0 层输出尺寸 nOut0 Twenty
第二层输出尺寸 nOut1 Fifty
第 4 层输出尺寸 nOut2 Five hundred
第五层输出尺寸 输出数量 Ten

CNN 的代码

正如您所看到的,无论您是构建 MLP 还是 CNN,用 DL4J API 配置多层神经网络都是相似的。特定于算法的配置简单地在每一层的定义中完成。

MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder()
.seed(seed)
.iterations(iterations) .regularization(true).l2(regularization)
.learningRate(learningRate)
.weightInit(WeightInit.XAVIER) .optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT) .updater(Updater.NESTEROVS).momentum(momentum)
.list()
.layer(0, new ConvolutionLayer.Builder(xsize, ysize)
.nIn(nChannels)
.stride(x,y)
.nOut(nOut0)
.activation(Activation.IDENTITY)
.build())
.layer(1, new SubsamplingLayer
.Builder(SubsamplingLayer.PoolingType.MAX)
.kernelSize(width, height)
.stride(sx,sy)
.build())
.layer(2, new ConvolutionLayer.Builder(xsize, ysize)
.stride(x,y)
.nOut(nOut2)
.activation(Activation.IDENTITY)
.build())
.layer(3, new SubsamplingLayer
.Builder(SubsamplingLayer.PoolingType.MAX)
.kernelSize(width, height)
.stride(sx,sy)
.build())
.layer(4, new DenseLayer.Builder()
.activation(Activation.RELU)
.nOut(nOut4).build())
.layer(5, new OutputLayer. Builder(LossFunctions.LossFunction.NEGATIVELOGLIKELIHOOD)
.nOut(outputNum)
.activation(Activation.SOFTMAX)
.build())
.setInputType(InputType.convolutionalFlat(numRows,numColumns,1)) 
.backprop(true).pretrain(false).build();

变分自动编码器

在第三个实验中,我们配置了一个变分自动编码器作为分类器。

用于变型自动编码器的参数

下表显示了用于配置 VAE 的参数。

|

参数

|

可变的

|

价值观念

RNG 的种子 rngSeed one two three four five
迭代次数 迭代次数 one
学习率 学习率 Zero point zero zero one
均方根衰减 rmsDecay Zero point nine five
L2 正规化 正规化 0.0001
输出图层大小 输出数量 Ten
VAE 编码器层数尺寸 vaeEncoder1,vaeEncoder2 256, 256
VAE 解码器层数大小 vaeDecoder1,vaeDecoder2 256, 256
潜在变量空间的大小 latentVarSpaceSize One hundred and twenty-eight

变型代码自动编码器

我们已经配置了两层编码器和解码器,并且正在使用伯努利分布来重构输入。

MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder()
.seed(rngSeed)
.iterations(iterations)
.optimizationAlgo(
OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)
.learningRate(learningRate)
.updater(Updater.RMSPROP).rmsDecay(rmmsDecay)
.weightInit(WeightInit.XAVIER)
.regularization(true).l2(regulaization)
.list()
.layer(0, new VariationalAutoencoder.Builder()
.activation(Activation.LEAKYRELU)
                .encoderLayerSizes(vaeEncoder1, vaeEncoder2)        //2 encoder layers
                .decoderLayerSizes(vaeDecoder1, vaeDecoder2)        //2 decoder layers
.pzxActivationFunction(""identity"")  //p(z|data) activation function
.reconstructionDistribution(new BernoulliReconstructionDistribution(Activation.SIGMOID.getActivationFunction()))     //Bernoulli distribution for p(data|z) (binary or 0 to 1 data only)
.nIn(numRows * numColumns) //Input size                      
.nOut(latentVarSpaceSize) //Size of the latent variable space: p(z|x).
.build())
.layer(1, new OutputLayer.Builder(LossFunction.NEGATIVELOGLIKELIHOOD).activation(Activation.SOFTMAX)
.nIn(latentVarSpaceSize).nOut(outputNum).build())
.pretrain(true).backprop(true).build();

DBN

DBN 中使用的参数如下表所示:

|

参数

|

可变的

|

价值

输入数据大小 numRows,numcolumns 28, 28
RNG 的种子 种子 One hundred and twenty-three
训练迭代次数 迭代次数 one
动量 动力 Zero point five
**第 0 层(输入)****第 0 层(输出)****第一层(输入,输出)****第二层(输入,输出)**第三层(输入,输出) numRows * numColumnsnOut0nIn1,nOut1nIn2,nOut2nIn3, outputNum 28 * 28Five hundred500, 250250, 200200, 10

本案例研究中使用的示例展示了如何使用 DL4J API 配置 DBN。此处显示了网络的配置代码。

MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder()
.seed(seed)
.gradientNormalization(GradientNormalization.ClipElementWiseAbsoluteValue)
.gradientNormalizationThreshold(1.0)
.iterations(iterations)
.updater(Updater.NESTEROVS)
.momentum(momentum)
.optimizationAlgo(OptimizationAlgorithm.CONJUGATE_GRADIENT)
.list()
.layer(0, new RBM.Builder().nIn(numRows*numColumns).nOut(nOut0)
.weightInit(WeightInit.XAVIER).lossFunction(LossFunction.KL_DIVERGENCE)
.visibleUnit(RBM.VisibleUnit.BINARY)
.hiddenUnit(RBM.HiddenUnit.BINARY)
.build())
.layer(1, new RBM.Builder().nIn(nIn1).nOut(nOut1)
.weightInit(WeightInit.XAVIER).lossFunction(LossFunction.KL_DIVERGENCE)
.visibleUnit(RBM.VisibleUnit.BINARY)
.hiddenUnit(RBM.HiddenUnit.BINARY)
.build())
.layer(2, new RBM.Builder().nIn(nIn2).nOut(nOut2)
.weightInit(WeightInit.XAVIER).lossFunction(LossFunction.KL_DIVERGENCE)
.visibleUnit(RBM.VisibleUnit.BINARY)
.hiddenUnit(RBM.HiddenUnit.BINARY)
.build())
.layer(3, new OutputLayer.Builder().nIn(nIn3).nOut(outputNum)
.weightInit(WeightInit.XAVIER).activation(Activation.SOFTMAX)
.build())
.pretrain(true).backprop(true)
.build();
MultiLayerNetwork model = new MultiLayerNetwork(conf);
model.init();
model.setListeners(new ScoreIterationListener(listenerFreq));

使用仲裁器进行参数搜索

DeepLearning4J 通过将手动调整的负担从建模者身上拿走,提供了一个微调超参数的框架;相反,它允许参数空间的规范进行搜索。在以下示例代码片段中,使用 MultiLayerSpace 而不是 MutiLayerConfiguration 对象来指定配置,其中超级参数的范围是通过仲裁器 DL4J 包中的 ParameterSpace 对象为要调整的参数指定的:

ParameterSpace<Double> learningRateHyperparam = new ContinuousParameterSpace(0.0001, 0.1);  //Values will be generated uniformly at random between 0.0001 and 0.1 (inclusive)
ParameterSpace<Integer> layerSizeHyperparam = new IntegerParameterSpace(16,256);            //Integer values will be generated uniformly at random between 16 and 256 (inclusive)
MultiLayerSpace hyperparameterSpace = new MultiLayerSpace.Builder()
//These next few options: fixed values for all models
.optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)
.iterations(1)
.regularization(true)
.l2(0.0001)
//Learning rate: this is something we want to test different values for
.learningRate(learningRateHyperparam)
.addLayer( new DenseLayerSpace.Builder()
//Fixed values for this layer:
.nIn(784)  //Fixed input: 28x28=784 pixels for MNIST
.activation(""relu"")
//One hyperparameter to infer: layer size
.nOut(layerSizeHyperparam)
.build())
.addLayer( new OutputLayerSpace.Builder()
//nIn: set the same hyperparemeter as the nOut for the last layer.
.nIn(layerSizeHyperparam)
//The remaining hyperparameters: fixed for the output layer
.nOut(10)
.activation(""softmax"")
.lossFunction(LossFunctions.LossFunction.MCXENT)
.build())
.pretrain(false).backprop(true).build();

结果和分析

根据测试数据评估四个网络性能的结果如下表所示:

|   |

MLP

|

ConvNet

|

VAE

|

DBN

精度 0.9807 0.9893 0.9743 0.7506
精度 0.9806 0.9893 0.9742 0.7498
回忆 0.9805 0.9891 0.9741 0.7454
F1 得分 0.9806 0.9892 0.9741 0.7476

实验的目标不是在每个神经网络结构中匹配基准结果,而是在代码中给出一个全面的架构实现,并提供详细的参数供读者探索。

在深度学习网络中调整超参数是一个相当大的挑战,尽管仲裁器和 gitter(gitter.im/deeplearning4j/deeplearning4j)等在线资源有助于 DL4J,但与包括 SVM 在内的其他分类技术相比,运行超参数搜索的时间和成本相当高。

MNIST 数据集上的基准测试结果和相应的论文可在此处获得:

  • yann . lecun . com/exdb/mnst/
  • rodrigob . github . io/are _ we _ there _ yet/build/classification _ datasets _ results . html # 4d4e 495354

从基准测试结果可以看出,线性 1 层神经网络的错误率为 12%,增加更多的层可以将错误率降低到大约 2。这表明了数据的非线性本质,以及需要复杂的算法来拟合模式。

与神经网络上从 2.5%到 1.6%误差率的基准最佳结果相比,我们的结果与 2%误差率非常接近。

大多数基准测试结果显示,卷积网络架构的错误率在 1.1%至 0.5%的范围内,我们的超参数搜索匹配了这些模型中的最佳模型,错误率略低于 1.1%。

我们在 DBN 的结果远远低于基准,仅略高于 25%。毫无疑问,进一步的调优可以将性能提高 3-5%。

总结

深度学习的历史与早期尝试在机器学习和人工智能中使用神经网络的限制密切相关,以及这些限制如何通过更新的技术、技术改进和大量数据的可用性来克服。

感知器是基本的神经网络。多层网络用于监督学习,通过连接几个隐藏的神经元层来向前传播激活,并使用反向传播来减少训练误差。使用了几种激活函数,最常用的是 sigmoid 和 tanh 函数。

神经网络的问题是梯度消失或爆炸、训练缓慢和陷入局部极小值。

深度学习在几种有效技术的帮助下成功解决了这些问题,这些技术可以用于无监督和有监督的学习。

深度学习网络的构建模块包括受限玻尔兹曼机器(RBM)、自动编码器和去噪自动编码器。RBM 是两层无向网络,能够从输入中提取高级特征。对比发散用于加速训练。自动编码器也是用于无监督学习的深度学习网络——它们试图通过首先在编码层对学习到的特征进行编码,然后通过一组解码层重建输入来复制输入。去噪自动编码器解决了自动编码器的一些限制,这些限制有时会导致它们琐碎地学习标识函数。

深度学习网络通常以无监督的方式进行预训练,然后通过监督微调来微调它们的参数。在预训练阶段使用堆叠 RBM 或自动编码器,在分类的情况下,微调通常通过在输出层激活 softmax 来完成。

深度自动编码器擅长学习数据中复杂的潜在结构,并通过使用自动编码器构建块进行预训练和微调,用于无监督学习。深度信念网络(DBN)是可以用来创建更多样本的生成模型。它是使用有向贝叶斯网络构建的,在其上有一个无向 RBM 层。深度学习网络中的过度拟合可以通过辍学学习来解决,其中网络中的一些节点被随机“关闭”。

卷积神经网络(CNN)在计算机视觉中有许多应用。CNN 可以学习数据平移不变的模式,并对数据中的线性缩放具有鲁棒性。它们使用卷积过滤器和合并层来降低数据的维度,并且可以在分类任务中获得非常有效的结果。提出了涉及数字图像分类的用例。

当数据作为序列到达并且数据之间存在时间关系时,递归神经网络(RNN)用于建模。rnn 使用来自前几层的反馈,并不断发出输出。消失和爆炸梯度的问题在 RNNs 中反复出现,并且通过对体系结构的几种修改来解决,例如长短期记忆(LSTM)和门控循环网络(GRU)。

在本章的案例研究中,我们介绍了用各种深度学习网络从 MNIST 手写数字图像数据集进行学习的实验。结果使用 MLP,康文网,变分自动编码器,和堆叠 RBM 介绍。

我们认为,深度神经网络能够逼近基础数据所基于的关键结构的重要且有代表性的子集。此外,借助不同的隐藏层,可以轻松捕捉数据的层次结构。最后,例如,对图像的旋转、平移和缩放的不变性是深度神经网络性能的最后一个关键要素。不变性允许我们减少神经网络捕获的可能状态的数量(参考文献 [19])。

参考文献

  1. Behnke,S. (2001 年)。在神经抽象金字塔中学习迭代图像重建。国际计算智能与应用杂志,1(4),427–438。
  2. Behnke,S. (2002 年)。利用分层递归网络学习人脸定位。第 12 届国际人工神经网络会议论文集(第 1319-1324 页)。
  3. Behnke,S. (2003 年)。使用卷积非负矩阵分解发现分层语音特征。国际神经网络联合会议论文集,第 4 卷(第 2758-2763 页)。
  4. Behnke,S. (2003 年)。LNCS,计算机科学讲义:第 2766 卷。用于图像解释的分层神经网络。斯普林格。Behnke,S. (2005 年)。神经抽象金字塔中的人脸定位和跟踪。神经计算与应用,14(2),97–103。
  5. 凯西议员(1996 年)。离散时间计算的动力学,应用于循环神经网络和有限状态机提取。神经计算,8(6),1135–1178。
  6. 鲁梅尔哈特、辛顿和威廉姆斯(1986)。通过误差传播学习内部表征。在鲁梅尔哈特,D. E .和麦克莱兰,J. L .编辑的《并行分布式处理》,第 1 卷,第 318-362 页。麻省理工出版社。
  7. 高勒角;屈希勒尔(1996 年)。""通过结构反向传播来学习任务相关的分布式表示" "。神经网络,IEEE。doi:10.1109/ICNN
  8. 霍克雷特,赛普。递归神经网络学习中的消失梯度问题及解决方案。《不确定性、模糊性和基于知识的系统国际期刊》,6(02):107–116,1998。
  9. G.E. Hinton、S. Osindero 和 Y. The (2006 年)。“深度信念网络的快速学习算法,”神经计算。,第 18 卷,第 1527-1554 页。
  10. G.e .辛顿(2002 年)。“通过最小化对比差异来训练专家的产品”。,第 14 卷,第 1771-1800 页。
  11. G.E. Hinton 和 R. R. Salakhutdinov (2006 年)。“用神经网络减少数据的维数”,《科学》,第 313 卷,第 5786 期,第 504-507 页。
  12. 辛顿和泽梅尔(1994 年)。自动编码器、最小描述长度和亥姆霍兹自由能。神经信息处理系统进展,6,3–10。
  13. Y.本吉奥、p .兰布林、d .波博维奇和 h .拉罗歇尔。(2007).“深度网络的贪婪分层训练”,《神经信息处理系统进展》19(NIPS’06)第 153–160 页。
  14. H.拉罗歇尔、d .埃汉、a .库维尔、j .伯格斯特拉和 y .本吉奥(2007 年)。“对具有许多变化因素的问题的深度架构的经验评估”,正在进行中。24 ^(th) Int。糖膏剂机器学习(ICML 07)第 473-480 页。
  15. 页(page 的缩写)Vincent、H. Larochelle、Y. Bengio 和 P.-A. Manzagol (2008 年),“用去噪自动编码器提取和合成鲁棒特征”,在 Proc。第 25 个国际。糖膏剂机器学习(ICML 08),第 1096–1103 页。
  16. F.-黄俊杰和李乐存(2006 年)。“用 SVM 和卷积网络进行大规模学习,用于一般对象分类”,正在进行中。计算机视觉与模式识别会议。(CVPR 06 年)。
  17. F.A. Gers、N. N. Schraudolph 和 J. Schmidhuber (2003 年)。用 LSTM 递归网络学习精确定时。机器学习研究杂志。
  18. Kyunghyun Cho 等人。阿尔(2014)。使用统计机器翻译的 RNN 编码器-解码器学习短语表示。arxiv.org/pdf/1406.1078.pdf
  19. br hrer . github . io/how _ convolatile _ neural _ networks _ work . html
  20. 亨利·w·林,马克斯·泰格马克,大卫·罗尔尼克(2016)。为什么深度廉价学习效果这么好?arxiv.org/abs/1608.08225
  21. 迈克·舒斯特和库尔迪普·k·帕利瓦尔(1997 年)。双向递归神经网络。关于信号处理。
  22. 李,一场战斗,R .刘冰,吴宇森(2007)。有效的稀疏编码算法,神经信息处理系统进展
  23. Bengio Y. (2009 年)。学习人工智能的深度架构,机器学习的基础和趋势 1(2)第 1-127 页。

八、文本挖掘和自然语言处理

自然语言处理 ( NLP )如今在各种应用中无处不在,比如移动应用、电子商务网站、电子邮件、新闻网站等等。检测电子邮件中的垃圾邮件,描述电子邮件的特征,语音合成,对新闻进行分类,搜索和推荐产品,对社交媒体品牌进行情感分析——这些都是 NLP 和挖掘文本信息的不同方面。

文本内容的数字信息呈指数级增长,其形式包括网页、电子书、短信、各种格式的文档、电子邮件、社交媒体消息(如推文和脸书帖子),现在的数量级为艾字节(1 艾字节为 1,018 字节)。从历史上看,依赖于自动机和概率建模的最早基础工作始于 20 世纪 50 年代。20 世纪 70 年代见证了诸如随机建模、马尔可夫建模和句法分析之类的变化,但是它们的进展在“人工智能冬天”期间受到了限制。20 世纪 90 年代出现了文本挖掘和一场统计革命,其中包括语料库统计、监督机器学习和文本数据的人工注释。从 2000 年开始,随着计算和大数据的巨大进步,以及在监督和非监督学习中引入复杂的机器学习算法,该领域重新引起了人们的兴趣,现在是学术界和商业企业 R&D 部门最热门的研究主题之一。在这一章中,我们将讨论自然语言处理和文本挖掘在机器学习中的一些重要方面。

本章首先介绍了自然语言处理中的关键领域,然后解释了重要的处理和转换步骤,这些步骤使文档更适合机器学习,无论是有监督的还是无监督的。接下来是主题建模、集群和命名实体识别的概念,并简要描述了两个提供强大文本处理功能的 Java 工具包。本章的案例研究使用另一个广为人知的数据集,通过使用工具 KNIME 和 Mallet 的实验来演示这里描述的几种技术。

本章组织如下:

  • NLP、子字段和任务:

    • 文本分类
    • 词性标注
    • 文本聚类
    • 信息提取和命名实体识别
    • 情感分析
    • 指代消解
    • 词义消歧
    • 机器翻译
    • 语义推理和推断
    • 总结
    • 问答
    • 与挖掘和非结构化数据相关的问题
  • 文本处理组件和转换:

    • 文档收集和标准化
    • 分词
    • 停用词去除
    • 词干化/词汇化
    • 局部/全局词典
    • 特征提取/生成
    • 特征表示和相似度
    • 特征选择和降维
  • 文本挖掘中的主题:

    • 主题建模
    • 文本聚类
    • 命名实体识别
    • 深度学习和 NLP
  • 工具及用法:

    • 木槌
    • KNIME
  • 个案研究

自然语言处理、子字段和任务

关于真实世界的信息以结构化数据的形式存在,通常由自动化流程生成,或者以非结构化数据的形式存在,对于文本,由人类直接以书面或口头形式创建。无论是结构化数据还是非结构化数据,观察真实世界情况并使用自动化流程或让人类感知信息并将其转换为可理解数据的过程都非常相似。将观察到的世界转换成非结构化数据涉及到诸如文本语言、文本存在的格式、不同观察者在解释相同数据时的差异等复杂性。此外,由所选语言的语法和语义、表达中的微妙性、数据中的上下文等引起的歧义使得挖掘文本数据的任务非常困难。

接下来,我们将讨论一些涉及 NLP 和文本挖掘的高级子领域和任务。自然语言处理的主题相当广泛,下面的主题并不全面。

文本分类

这个字段是最完善的字段之一,其基本的形式将带有非结构化文本数据的文档分类到预定义的类别中。这可以被视为监督机器学习在非结构化文本世界中的直接扩展,从历史文档中学习,以预测未来看不见的文档的类别。电子邮件或新闻分类中的垃圾邮件检测的基本方法是该任务的一些最突出的应用。

Text categorization

图 1:显示不同类别的文本分类

词性标注(词性标注)

NLP 中的另一个子任务已经取得了很大的成功,它基于上下文和与相邻单词的关系将语言的词类(如名词、形容词、动词)与文本中的单词相关联。如今,自动化和复杂的 POS 标签员代替了人工 POS 标签。

Part-of-speech tagging (POS tagging)

图 2:与文本片段相关联的位置标签

文本聚类

聚类基于相似性对非结构化数据进行组织、检索和分组是文本聚类的子领域。这个领域也随着适合学习的不同聚类和文本表示的进步而得到了很好的发展。

Text clustering

图 3:将操作系统新闻文档聚集到各种特定于操作系统的集群

信息抽取和命名实体识别

提取特定元素的任务,如时间、地点、组织、实体等,属于信息提取主题下的。命名实体识别是一个子领域,在不同领域有着广泛的应用,从历史文献的评论到具有基因和药物信息的生物信息学。

Information extraction and named entity recognition

图 4:句子中的命名实体识别

情感分析和观点挖掘

NLP 领域中的另一个子领域涉及推断观察者的情绪,以便用一种可理解的度量标准对他们进行分类,或者给出对他们观点的洞察。这个领域不像前面提到的一些领域那样先进,但是在这个方向上已经做了很多研究。

Sentiment analysis and opinion mining

图 5:情感分析显示句子的正面和负面情感

共指消解

理解对存在于文本中的多个实体的引用并消除该引用的歧义是 NLP 的另一个热门领域。这被认为是做更复杂任务的垫脚石,如问题回答和总结,这将在后面讨论。

Coreference resolution

图 6:指代消解展示了代词是如何消除歧义的

词义消歧

在像英语这样的语言中,由于同一个单词可以基于上下文具有多个含义,因此自动破译这一点是自然语言处理的重要部分,也是词义消歧 ( WSD )的重点。

Word sense disambiguation

图 7:使用上下文显示单词“鼠标”如何与正确的单词相关联

机器翻译

将文本从一种语言翻译成另一种语言,或者从演讲翻译成不同语言的文本,大体上涵盖了机器翻译 ( MT )的领域。随着机器学习算法在监督、非监督和半监督学习中的使用,该领域在过去几年中取得了重大进展。使用 LSTM 等技术的深度学习已被证明是该领域最有效的技术,并被谷歌广泛用于其翻译。

Machine translation

图 8:显示英汉转换的机器翻译

语义推理和推断

从非结构化的文本中推理、推导逻辑和推理是 NLP 的下一个发展层次。

Semantic reasoning and inferencing

图 9:回答复杂问题的语义推理

文本摘要

在自然语言处理中,越来越受欢迎的一个子领域是将大型文档或文本段落自动摘要为易于理解的小型代表性文本。这是自然语言处理中新兴的研究领域之一。搜索引擎对摘要的使用、专家的多文档摘要等等,是受益于该领域的一些应用。

自动化问答

回答人类用自然语言提出的问题是自然语言处理领域的另一个新兴领域,从特定领域的问题到通用的开放式问题。

挖掘非结构化数据的问题

人类比基于计算机的程序更容易阅读、解析和理解非结构化文本/文档。下面给出了文本挖掘比一般的监督或非监督学习更复杂的一些原因:

  • 术语和短语的模糊性。单词 bank 有多种含义,人类读者可以根据上下文正确联想,但这需要预处理步骤,如词性标注和词义消歧,如我们所见。根据牛津英语词典,单词 run 仅在动词形式上就有不下 645 种不同的用法,我们可以看到这样的单词确实会在解决意图的含义方面存在问题(在它们之间,单词 run、put、set 和 take 有一千多种含义)。
  • 与文本相关的上下文和背景知识。考虑一个句子,它使用一个带后缀 gate 的新词来表示一个政治丑闻,比如在中,随着弹劾呼声和支持率的急剧下降,俄罗斯门最终对他的总统任期造成了致命的打击。人类读者可以猜测这个新词 Russiagate 指的是什么,它让人想起高调的阴谋,通过词缀联想到美国政治历史上的另一个重大丑闻水门。这对一台机器来说尤其难以理解。
  • 推理,即从文档中进行推理是非常困难的,因为将非结构化信息映射到知识库本身就是一个很大的障碍。
  • 执行监督学习的能力需要标记的训练文档,并且基于领域,在文档上执行标记可能是耗时且昂贵的。

文本处理组件和转换

在本节的中,我们将讨论一些常见的预处理和大多数文本挖掘过程中完成的转换步骤。一般概念是将文档转换成结构化数据集,这些数据集具有大多数机器学习算法可以用来执行不同种类的学习的特征或属性。

我们将在下一节简要描述一些最常用的技术。不同的文本挖掘应用程序可能会使用不同的组件或组件变体,如下图所示:

Text processing components and transformations

图 10:文本处理组件和流程

文件收集和标准化

大多数文本挖掘应用程序的第一步是以文档体的形式收集数据(??)——在文本挖掘领域通常被称为语料库(??)。这些文档可以具有与它们相关联的预定义分类,或者它可以仅仅是未标记的语料库。文档可以是异构格式,也可以标准化为一种格式,用于下一个标记化过程。拥有多种格式,比如文本、HTML、DOCs、PDGs 等等,会导致许多复杂性,因此在大多数应用程序中,通常首选一种格式,比如 XML 或 JavaScript 对象符号 ( JSON )。

输入和输出

输入是同类或异类源的巨大集合,输出是标准化为一种格式的文档集合,比如 XML。

它是如何工作的?

标准化包括确保工具和格式根据应用程序的需求达成一致:

  1. 同意一种标准格式,比如 XML,带有预定义的标签,这些标签提供了关于文档(<author>、`
  2. 大多数文档处理器要么可以转换成 XML,要么可以编写转换代码来执行转换。

标记化

标记化的任务是从包含单词流的文本中提取单词或有意义的字符。例如,正文男孩站了起来。然后他追狗可以令牌化成令牌如 {tHe,boy,stood,up,he,ran,after,the,dog}

输入和输出

输入是众所周知的格式的文档集合,如上一节所述,输出是带有应用程序所需的单词或字符标记的文档。

它是如何工作的?

任何用于标记化的自动化系统都必须解决预期要处理的语言所带来的特殊挑战:

  • 在英语等语言中,由于存在空格、制表符和换行来分隔单词,所以标记化相对简单。
  • 每种语言都有不同的挑战——即使在英语中,缩写词,如 Dr. ,字母数字字符( B12 ,不同的命名方案(奥赖利)等等,都必须进行适当的标记化。
  • 编写 if-then 指令形式的特定于语言的规则来从文档中提取标记。

停止文字删除

这个包括去除没有鉴别或预测价值的高频单词。如果每个单词都可以被视为一个特征,这个过程将显著降低特征向量的维数。介词、冠词和代词是构成停用词的一些例子,在许多应用中,停用词被移除而不影响文本挖掘的性能。

输入和输出

输入是提取了标记的文档集合,而输出是通过移除停用词减少了标记的文档集合。

它是如何工作的?

在过去的几年中,从手工预编译列表到使用基于术语或交互信息的统计排除,已经发展出了各种各样的技术。

  • 许多语言最常用的技术是手动预编译停用词列表,包括介词(in、for、on)、冠词(a、an、The)、代词(his、her、thes、thes)等等。

  • 许多工具使用 Zipf 定律(引用 [3]),其中高频词、单态词和唯一术语被删除。卢恩的早期工作(参考文献 [4]),如下图 11 所示,显示了词频的上限和下限的阈值,这给了我们可以用于建模的有意义的词:How does it work?

    图 11:词频分布,显示了语料库中频繁使用、重要和罕见的词的数量

词干化或词汇化

将相似单词的标记规范化为一个的想法被称为词干化或词汇化。因此,将文档中所有出现的“talking”、“talks”、“talked”等减少到文档中的一个词根“talk”就是词干化的一个例子。

输入和输出

输入是具有记号的文档,输出是具有标准化到其词干或词根的简化记号的文档。

它是如何工作的?

  1. 基本上有两种类型的词干:屈折词干和词根词干。
  2. 屈折词干通常包括去除词缀、规范动词时态和去除复数。因此,在英语中,“ships”为“ship”,“is”,“are”和“am”为“be”。
  3. 词根词干通常是比词尾变化词干更激进的形式,词根变化词干将单词规范化为词根。这方面的一个例子是“应用”、“已应用”、“重新应用”等等,都简化为词根“应用”。
  4. Lovin 的词干分析器是最早的词干算法之一(参考文献 [1])。波特的词干法在 20 世纪 80 年代发展起来,有 6 个步骤,大约 60 条规则,仍然是最广泛使用的词干法(参考文献 [2])。
  5. 当今的应用程序推动了基于词干的各种统计技术,包括使用 n 元语法(n 个项目的连续序列,来自给定文本序列的字母或单词)、隐马尔可夫模型 ( HMM )和上下文敏感词干的技术。

本地/全球字典或词汇?

一旦执行了将文档转换成标记的预处理任务,下一步就是使用来自所有文档的所有标记创建一个语料库或词汇表作为一个字典。或者,使用较少文档中的特定标记,基于类别创建几个字典。

当按主题/类别创建字典时,主题建模和文本分类中的许多应用程序表现良好,这被称为本地字典。另一方面,当从所有文档标记创建单个全局字典时,文档聚类和信息提取中的许多应用表现良好。创建一个或多个特定词典的选择取决于核心的 NLP 任务,以及计算和存储需求。

特征提取/生成

转换带有非结构化文本的文档的一个关键步骤是将它们转换成带有结构化特征的数据集,类似于我们目前在机器学习数据集中看到的。从文本中提取特征以使其可用于机器学习任务,如监督、非监督和半监督学习,取决于许多因素,如应用的目标、特定领域的要求和可行性。可以从任何文档中提取各种各样的特征,比如单词、短语、句子、词性标记的单词、印刷元素等等。我们将给出在不同的机器学习应用中常用的广泛的特征。

词汇特征

词汇特征是文本挖掘应用中最常用的特征。词汇特征构成了下一级特征的基础。它们是简单的字符级或单词级特征,无需试图捕捉关于意图或与文本相关的各种含义的信息。例如,词汇特征可以进一步细分为基于字符的特征、基于单词的特征、词性特征和分类法。在下一节中,我们将更详细地描述其中的一些。

基于字符的特征

单个字符(unigram)或一系列字符(n-gram)是可以从文本文档构建的最简单的特征形式。字符包或单字字符没有位置信息,而更高阶的 n 元语法捕获一些上下文和位置信息。这些特征可以以不同的方式编码或赋予数值,例如二进制 0/1 值或计数,这将在下一节中讨论。

让我们考虑一下令人难忘的苏斯博士押韵作为文本内容——“戴帽子的猫踩在垫子上”。字袋(一个字或一个字的特征)将生成唯一的字符{"t "、" h "、" e "、" c "、" a "、" I "、" n "、" s "、" p "、" o "、" n "、" m"}作为特征,三个字的特征是{ "\sCa "、" sHa "、" sin "、" sma "、" son "、" sst "、" sth "、" Cat "、" Hat "、" at\s "、" e\sC "、" e\sH "、" e\sm "、" eps "、" he\s "、" in\s "、" mat "可以看出,随着“n”的增加,特征的数量呈指数增长,并且很快变得难以处理。n-grams 的优势在于,以增加特征总数为代价,组装的特征似乎常常捕捉到比单个字符本身更有趣的字符组合。

基于单词的特性

代替从字符生成特征,特征可以类似地从单词以一元语法和 n 元语法的方式构建。这些是最流行的特征生成技术。单字记号也称为单词袋模型。因此,当把“戴帽子的猫踩在垫子上”的例子看作是单字特征时,它就是{“the”、“Cat”、“in”、“Hat”、“steps”、“onto”、“mat”}。类似地,相同文本上的二元模型特征将导致{ "猫"、"猫在"、"在"、"帽子中"、"帽步"、"踏上"、"踏上"、"垫子上" }。在基于字符的特征的情况下,通过到达 n 元语法中更高的“n ”,特征的数量增加了,但是通过上下文捕获词义的能力也增加了。

词性标注功能

输入是包含单词的文本,输出是每个单词都与语法标签相关联的文本。在许多应用中,词性给出了上下文,并且在识别命名实体、短语、实体消歧等方面是有用的。在示例“戴帽子的猫踩在垫子上”中,输出是{"the\Det "," Cat\Noun "," in\Prep "," the\Det "," Hat\Noun "," steps\Verb "," onto\Prep "," the\Det "," mat\Noun"}。在这个过程中,经常使用特定语言的基于规则的标记或基于马尔可夫链的概率标记。

分类特征

从文本数据中创建分类并使用它来理解单词之间的关系在不同的上下文中也是有用的。各种分类特征,例如上义词、下义词、is-member、member-of、is-part、part-of、反义词、同义词、首字母缩写词等等,给出了在许多文本挖掘场景中证明在搜索、检索和匹配中有用的词汇上下文。

句法特征

比文本文档中的字符或单词更高的下一级特征是基于语法的特征。文本中句子的句法表示通常是句法树的形式。语法树将节点捕获为句子中使用的术语,并将节点之间的关系捕获为链接。句法特征还可以捕捉关于句子和用法的更复杂的特征,例如聚合,这些特征可以用于机器学习。它还可以捕捉关于语法树的统计数据,例如句子是左倾、右倾还是平衡,这些数据可以用来理解不同内容或作者的签名。

在词法分析中,两个句子可以有相同的字符和单词,但它们的语法树或意图可能完全不同。将文本中的句子分解成不同的短语——名词短语 ( NP )、介词短语 ( PP )、动词(或动名词)短语 ( VP )等等——并捕获句子的短语结构树是这个处理任务的一部分。下面是我们的例句的语法分析树:

(S (NP (NP the cat)
       (PP in
           (NP the hat)))
   (VP steps
       (PP onto
           (NP the mat))))

句法语言模型 ( SLM )是关于确定一系列术语的概率。语言模型特征用于机器翻译、拼写校正、语音翻译、摘要等等,仅举几个例子。语言模型还可以在计算中使用解析树和语法树。

应用链规则来计算句子中术语的联合概率:

Syntactic features

在“戴帽子的猫踩在垫子上”的例子中:

Syntactic features

通常,基于使用任何语料库的计数来估计长句的概率是困难的,因为需要这种句子的许多例子。大多数语言模型在实际实现中使用独立性和 n-grams (2-5 个单词)的马尔可夫假设(引用 [8])。

语义特征

语义特征试图捕捉文本的“含义”,然后用于文本挖掘的不同应用。语义特征的最简单形式之一是向文档添加注释的过程。这些注释或元数据可以包含描述或捕捉文本或文档意图的附加信息。使用协作标记来添加标记以捕获标记作为描述文本的关键词是常见的语义特征生成过程。

语义特征生成的另一种形式是文本的本体表示过程。捕获对象之间不同关系的通用和领域特定本体在知识库中可用,并且具有众所周知的规范,例如语义 Web 2.0。这些本体特征有助于在文本挖掘中完成复杂的推理、概括、分类和聚类任务。文本或文档中的术语可以映射到本体中的“概念”并存储在知识库中。本体中的这些概念具有语义属性,并以多种方式与其他概念相关,例如泛化/特殊化、成员/成员、关联等等。概念和关系的这些属性或特性可以进一步用于搜索、检索,甚至用于预测建模。例如,许多语义特征使用词汇和句法过程作为语义过程的前驱,并使用输出(如名词)来映射到本体中的概念。将概念添加到现有的本体中,或者用更多的概念对其进行注释,使得该结构更适合学习。例如,在“猫在..”句子,“猫”有{年龄,吃,...}并具有不同的关系,如{“isA 哺乳动物”、“hasChild”、“hasParent”等}。

特征表示和相似性

上一节描述的词汇、句法和语义特征,通常有彼此完全不同的表现。相同特征类型的表示,即词汇、句法或语义的表示,可以根据它们所用于的计算或挖掘任务而有所不同。在本节中,我们将描述最常见的基于词汇特征的表示,称为向量空间模型。

向量空间模型

向量空间模型 ( VSM )是非结构化文档到数字向量表示的转换,其中语料库中的术语形成向量的维度,我们使用一些数字方式将值与这些维度相关联。

如在词典一节中所讨论的,语料库由来自一个领域或一个领域的局部子类别中的整个文档集合的独特单词和短语形成。这种字典的每个元素都是向量的维数。术语可以是单个单词或短语,如 n-grams 中的术语,它们构成维度,并且在给定的文本/文档中可以有不同的值与之相关联。目标是以反映整个语料库中术语的相关性的方式捕获维度中的值(引用 [11])。因此,每个文档或文件都被表示为一个高维数值向量。由于项的稀疏性,数值向量表示在数值空间中具有稀疏表示。接下来,我们将给出一些将值与这些术语相关联的众所周知的方法。

双星

这个是将值与术语或维度相关联的最简单的形式。在二进制形式中,语料库中的每个术语基于该术语在文档中的存在或不存在而被赋予 0 或 1 值。例如,考虑以下三个文档:

  • 文档 1:“戴帽子的猫踩在垫子上”
  • 文件 2:“猫坐在帽子上”
  • 文件三:“猫爱踩垫子”

在通过移除停用词{on,the,in,onto}和使用单字或单词包词干化{love/loves,steps/step}进行预处理之后,{cat,hat,step,mat,sat,love}是语料库的特征。现在,每个文档都用二进制向量空间模型表示,如下所示:

|

条款

|

|

帽子

|

步骤

|

垫子

|

|

文档 one one one one Zero Zero
文档 one one Zero Zero one Zero
文档 one Zero one one Zero one

词频(TF)

词频 ( TF )中,顾名思义,整个文档中的词频构成了特征的数值。基本假设是,术语出现的频率越高,该术语与文档的相关性就越大。术语的计数或术语的归一化计数用作每列术语中的值:

tf(t) = count(D,t)

下表给出了我们示例中三个文档的词频:

|

TF /术语

|

|

帽子

|

步骤

|

垫子

|

|

文档 one one one one Zero Zero
文档 one one Zero Zero one Zero
文档 one Zero one one Zero one

逆文档频率(IDF)

逆文档频率 ( IDF )有各种风格,但最常见的计算方式是使用以下方式:

Inverse document frequency (IDF)

这里,Inverse document frequency (IDF) Inverse document frequency (IDF) IDF 最青睐那些在文档中出现频率相对较低的术语。研究中还提出了一些基于经验的 IDF 改进方案(参考文献【7】)。

我们的示例语料库的 TF:

|

条款

|

|

帽子

|

步骤

|

垫子

|

|

不包括新泽西州 3/3 3/2 3/2 3/2 3/1 3/1
综合资料的文件(intergrated Data File) Zero Zero point four Zero point four Zero point four One point one One point one

词频-逆文档频率(TF-IDF)

将项频率和逆文档频率组合在一个度量中,我们得到项频率-逆文档频率值。其思想是重视那些在语料库中相对不常见的术语(高 IDF),但是与文档合理相关的术语(高 TF)。TF-IDF 是许多文本挖掘过程中最常见的值关联形式:

Term frequency-inverse document frequency (TF-IDF)

这为我们提供了每个文档中所有术语的 TF-IDF:

|

TF-IDF/条款

|

|

帽子

|

步骤

|

垫子

|

|

文档 Zero Zero point four Zero point four Zero point four One point one One point one
文档 Zero Zero point four Zero Zero One point one Zero
文档 Zero Zero Zero point four Zero point four Zero One point one

相似性度量

监督、非监督和半监督学习中的许多技术在它们的基础算法中使用“相似性”度量来寻找相似的模式或分离不同的模式。相似性度量与数据的表示密切相关。在文档的 VSM 表示中,向量是非常高维和稀疏的。这给大多数传统的分类、聚类或信息检索的相似性度量带来了严重的问题。基于角度的相似性度量,如余弦距离或 Jaccard 系数,在实践中更常用。考虑对应于两个文本文档的由t1 和t2 表示的两个向量。

欧几里德距离

这个是文档的特征空间中的 L2 范数;

Euclidean distance

余弦距离

这个基于角度的相似性度量只考虑矢量之间的方向,而不考虑它们的长度。它等于矢量间夹角的余弦值。由于向量空间模型是正空间,余弦距离从 0(正交,没有公共项)变化到 1(所有项对两者都是公共的,但不一定具有相同的项频率):

Cosine distance

成对自适应相似度

该通过仅考虑两个文档中最重要的特征,在缩减的特征空间中测量距离:

Pairwise-adaptive similarity

这里, t [i,k] 是由 t [i] ( i = 1,2)包含出现在 t [1] 和 t [2] 中的 K 最大特征的并集的特征子集形成的向量。

扩展的雅克卡系数

这个度量被计算为共享术语与文档间术语的并集的比率:

Extended Jaccard coefficient

骰子系数

骰子系数由下式给出:

Dice coefficient

特征选择和降维

目标与第二章、现实世界监督学习的实用方法和第三章、无监督机器学习技术中的目标相同。随着文本挖掘和高维特征的出现,维数灾难的问题变得更加明显。

功能选择

大多数特征选择技术是监督技术,依赖于标签或特征评分的结果。在大多数情况下,由于较低的性能成本,我们执行基于过滤器而不是基于包装器的特征选择。即使在基于过滤器的方法中,一些方法,如那些涉及多元技术的方法,如基于相关性的特征选择 ( CFS ),如第二章、现实世界监督学习的实用方法中所述,可能会相当昂贵,或者由于高维度而导致次优性能(参考文献【9】)。

信息论技术

如第二章、现实世界监督学习的实用方法所示,基于滤波器的单变量特征选择方法,如信息增益 ( IG )和增益比 ( GR ),是预处理和特征提取完成后最常用的。

在他们的研究中,Yang 和 Pederson ( 参考文献 [10])清楚地展示了使用 IG 进行特征选择和缩减的好处,可以删除近 98%的术语,同时提高分类器的预测能力。

许多信息论或基于熵的方法由于记号的边际概率而具有更强的影响。当术语具有相等的条件概率 P(t|class)时,这可能是一个问题,较罕见的术语可能具有比常见术语更好的分数。

基于统计的技术

?特征选择是文本挖掘中最常用的基于统计的特征选择技术之一。? ² 统计,如第二章、现实世界监督学习的实用方法所示,给出文本中的记号和类之间的独立关系。

事实证明。 ² 当存在低频术语时,用于特征选择的统计可能无效(参考文献 19】)。

基于频率的技术

使用特征表示章节中描述的术语频率或文档频率,可以手动设置阈值,只有高于或低于特定阈值的术语才允许用于分类或聚类任务中的建模。注意,词频 ( TF )和文档频率 ( DF )方法偏向于常用词,而一些信息论或基于统计的方法偏向于不常用词。特征的选择取决于领域、预测学习的特定应用,更重要的是,取决于如何评估使用这些特征的模型,尤其是在看不见的数据集上。

降维

我们在[第三章、无监督机器学习技术中看到的另一种方法是使用无监督技术来减少特征,使用某种形式的转换来决定它们的有用性。

主成分分析 ( PCA )根据文档-术语矩阵计算协方差或相关矩阵。它将数据转换为输入项的线性组合,转换后的特征或项的组合比输入项具有更高的鉴别能力。如第三章、无监督机器学习技术中所示,对转换后的特征进行截断或阈值处理的 PCA 可以显著降低维数,甚至提高或给出与高维输入空间相当的性能。使用 PCA 的唯一问题是变换后的特征是不可解释的,对于理解哪些术语或组合产生更好的预测模型的领域,这种技术有一些限制。

潜在语义分析 ( LSA )是使用从术语和文档构建的输入矩阵并将其转换到更低的维度的另一种方式,通过文档中使用的术语的组合(引用【5】)发现潜在概念。下图显示了使用奇异值分解 ( SVD )方法分解输入文档术语矩阵的过程:

Dimensionality reduction

图 12:将输入文档术语 SVD 分解成 LSA 文档向量和 LSA 术语向量

LSA 已被证明是一种非常有效的降维方法,也是一种提高模型预测性能的方法。LSA 的缺点是执行检索或查询需要存储向量 U 和 V。确定较低的维度 k 是很难的,需要一些类似于第三章、中讨论的 k-means 的试探法

文本挖掘的主题

正如我们在第一部分看到的,文本挖掘和对文本进行机器学习的领域跨越了广泛的主题。讨论的每个主题都有一些对主流算法的定制,或者有一些特定的算法被开发来执行该领域中要求的任务。我们选择了四个广泛的主题,即文本分类、主题建模、文本聚类和命名实体识别,并将详细讨论每个主题。

文本分类/归类

文本分类问题体现在不同的应用中,例如文档过滤和组织、信息检索、观点和情感挖掘、电子邮件垃圾邮件过滤等等。类似于第二章、现实世界监督学习的实用方法中讨论的分类问题,一般思想是在带有标签的训练数据上进行训练,并预测看不见的文档的标签。

如前一节所讨论的,预处理步骤有助于将非结构化文档集合转换成众所周知的按照文档术语矩阵排列的数字或分类/二进制结构化数据。选择执行一些预处理步骤,如词干提取或自定义停用词,取决于数据和应用。特征选择一般是基本的词汇特征,n 个单词组成的词项,只有在某些情况下,我们才把整个文本作为一个字符串使用,而不把它分成词项或记号。对于文档术语结构化数据,通常使用二进制特征表示或基于频率的表示。一旦这种转换完成,我们使用单变量分析进行特征选择,例如信息增益或卡方,以选择高于特定分数阈值的区别特征。在许多应用中,还可以执行特征变换和维数减少,例如 PCA 或 LSA。

一旦我们从前面的过程中获得结构化数据,分类器的选择范围就很广。在研究和商业应用中,我们看到了大多数常见建模技术的使用,包括线性(线性回归、逻辑回归等)、非线性(SVM、神经网络、KNN)、生成(朴素贝叶斯、贝叶斯网络)、可解释(决策树、规则)和基于集成(bagging、boosting、随机森林)的分类器。许多算法使用相似性或距离度量,其中余弦距离是最受欢迎的选择。在某些分类器中,如 SVM,文档的字符串表示可以按原样使用,通过正确选择字符串核和基于字符串相似性的度量来计算点积。

验证和评估方法类似于监督分类方法——将数据分为训练/验证/测试、训练数据训练、调整验证数据算法的参数,以及估计模型在保留或测试数据上的性能。

由于大多数文本分类涉及大量的文档,并且目标类别很少,因此在大多数情况下,用于评估、调整或选择算法的度量是精度、召回率和 F 值度量,如下所示:

Text categorization/classificationText categorization/classificationText categorization/classification

话题建模

一个主题是一个固定词汇的分布。主题建模可以定义为在各种文档中捕捉不同核心思想或主题的能力。这有广泛的应用,如文件摘要,理解情绪,趋势,新闻和许多其他原因。下图显示了主题建模如何从语料库中识别用户指定数量 k 的主题,然后为每个文档分配代表每个主题在文档中出现的比例:

Topic modeling

图 13:文档的概率主题权重分配

文献中有不少使用监督和非监督学习进行主题建模的技术(参考文献 [13])。我们将讨论最常见的技术,称为概率潜在语义索引 ( PLSI )。

概率潜在语义分析(PLSA)

PLSA 的想法,就像 LSA 中的特征约简一样,是通过发现共现术语之间的关联,并将文档视为这些概念的混合物,来找到隐藏在语料库中的潜在概念。这是一种无监督的技术,类似于降维,但其思想是使用它来建模文档中主题或潜在概念的混合(参考文献 12】)。

如下图所示,该模型可以将语料库中经常一起出现的术语与潜在概念相关联,然后可以说每个文档都或多或少地展示了该主题:

![Probabilistic latent semantic analysis (PLSA)图 14:棒球的潜在概念捕捉文档和相关术语之间的关联#### 输入和输出这些输入是:* 遵循特定格式和结构的文档的集合。我们将给出符号:Input and output

  • 需要建模或发现的主题数量为 k

输出是:

  • k 题目确定 T = {T [1] ,T [2] ,…T [k] }。
  • 对于每个文档,文档 d [i] 给出的主题覆盖范围可以写成= { p [i1] , p [i2] ,… p [ik] },其中 p [ij] 是文档 d i 覆盖主题 T [j 的概率]

它是如何工作的?

PLSA 的实施一般遵循这里描述的步骤:

  1. 如果需要,执行前面讨论的基本预处理步骤,例如标记化、停用词去除、词干化、单词字典形成、特征提取(单字或 n 字等等)和特征选择(无监督技术)。

  2. 这个问题可以简化为估计文档中术语的分布,并且在给定分布的情况下,基于对应于主题的最大术语来选择主题。

  3. 引入“潜在变量” z 有助于我们选择术语是否属于某个主题。注意 z 不是“观察到的”,但是我们假设它与从题目中挑选术语有关。因此,给定文档 t 的条件 t 的概率可以用这个潜在变量表示为:How does it work?

  4. By using two sets of variables (?, p) the equation can be written as:How does it work?

    这里,p(t | z;?)是项和 p(z|d)中潜在概念的概率;p)是特定文档混合中潜在概念的概率。

  5. 利用对数似然估计参数最大化:How does it work?

  6. 由于该方程涉及非凸优化,EM 算法经常用于迭代地寻找参数,直到达到收敛或完成总迭代次数(参考文献【6】):

    1. EM 算法的 E 步用于确定潜在概念的后验概率。术语 t 在文档 d 中出现的概率可以由潜在概念 z 解释为:How does it work?
    2. EM 算法的 M 步骤使用从 E 步骤获得的值,即 p(z|d,t),并且进行参数估计为:How does it work?
    3. How does it work? =术语 t 与概念 z :How does it work?

优点和局限性

其优点和局限性如下:

  • 尽管被广泛使用,PLSA 也有一些缺点,这些缺点已经被最近的技术克服了。
  • 该算法的无监督性质及其普遍适用性使其可以用于各种类似的文本挖掘应用,如聚类文档、关联与作者/时间相关的主题等。
  • 如前几章所述,EM 算法的 PLSA 面临着“陷入局部最优”的问题,这与其他全局算法(如进化算法)不同。
  • PLSA 算法只能在已知文档中进行主题识别,而不能进行任何预测建模。PLSA 已被推广并被称为潜狄利克雷分配 ( LDA )来克服这一点(参考文献【14】)。

文本聚类

聚类的目标,正如在第三章、无监督机器学习技术中看到的,是在组内找到彼此相似的数据、文本或文档组。非结构化数据的粒度各不相同,从小短语或句子、段落和文本段落到一组文档。文本聚类在许多领域都有应用,例如信息检索、摘要、主题建模和无监督情况下的文档分类等。一旦通过预处理将非结构化文本数据转换成结构化数据,就可以使用传统的聚类技术。传统聚类技术的难点在于使用转换后的文档术语矩阵表示获得的数据集的高维度和稀疏性。许多传统的聚类算法只对特征的数值起作用。由于这种限制,不能使用术语的分类或二进制表示,通常使用 TF 或 TF-IDF 来表示文档-术语矩阵。

在这一节中,我们将讨论集群的一些基本过程和技术。我们将从预处理和转换开始,然后讨论一些广泛使用的技术和对它们的修改。

特征变换、选择和归约

本节中讨论的大多数预处理步骤通常用于获取文档中术语的单字母或 n 字母表示。降维技术,如 LSA,经常被用来将特征转换成更小的潜在空间。

聚类技术

用于文本聚类的技术包括概率模型,以及那些使用基于距离的方法的技术,这是我们在学习结构化数据时所熟悉的。我们还将讨论非负矩阵分解 ( NNMF )作为一种有效的技术,具有良好的性能和可解释性。

生成概率模型

在生成方法中,主题建模和文本聚类之间存在共性。如下图所示,与主题建模相比,聚类将一个文档与一个单独的聚类相关联,主题建模中每个文档都有可能覆盖多个主题。主题建模中的每个词都可以由多个主题以独立的方式生成,而在聚类中,所有的词都是从同一个聚类中生成的:

Generative probabilistic models

图 15:文档到 K-Clusters 的排他映射

数学上,这个可以用两个话题 T = {T [1] ,T [2] }和两个集群 c = {c [1] ,c [2] }来解释。

在聚类中,文档的可能性可以被给定为:

Generative probabilistic models

如果文档有 L 个术语,这可以进一步扩展为:

Generative probabilistic models

因此,一旦你“假定”了一个簇,所有的单词都来自这个簇。计算所有项的乘积,然后对所有分类求和。

在主题建模中,文档的可能性可以被给定为:

Generative probabilistic models

因此,每个项 ti 都可以从主题中独立选取,因此求和在内部完成,乘积在外部完成。

输入和输出

这些输入是:

  • A collection of documents following a certain format and structure expressed with the following notation:

    D = { d 1, d 2,… d n}

  • 需要建模或发现的集群数量为 k

输出是:

  • k 簇确定 c = {c [1] ,c [2] ,… c [k] }。
  • 对于每个文档, p(d [i] ) 被映射到一个簇 k
它是如何工作的?

以下是步骤:

  1. 基本的预处理步骤如前所述,如标记化、停用词移除、词干化、单词字典形成、术语的特征提取(单字母或 n 字母等)、特征转换(LSA),甚至特征选择。让 t 成为最终特征集中的术语;它们对应于字典或词汇How does it work?

  2. 类似于 PLSA,我们引入一个“潜在变量”, z ,帮助我们选择属于该簇的文档是否落在该簇对应的 z ={1,2,… k }的范围内。让*?*参数是我们为每个潜在变量估计的参数,使得 p(? [i] ) 对应聚类的概率 z = i

  3. The probability of a document belonging to a cluster is given by p(?[i]), and every term in the document generated from that cluster is given by p(t|?[i]). The likelihood equation can be written as:How does it work?

    注意,它不是遍历文档,而是用词汇表How does it work?中的术语 t 重写,该术语在文档中出现的次数。

  4. 执行 EM 算法的方式与我们之前使用的估计参数的方法类似,如下所示:

    1. EM 算法的 E 步用于推断生成文档的聚类:How does it work?
    2. EM 算法的 M 步用于使用 E 步的结果重新估计参数,如下所示:

    How does it work?How does it work?

  5. 可以使用最大可能性或者使用具有先验概率的贝叶斯算法来完成每个文档的最终概率估计,如下所示:How does it work?How does it work?

优点和局限性
  • 基于生成的模型与 LSA 和 PLSA 的模型有相似的优势,在这两个模型中,我们在聚类中获得文档的概率分数。通过应用领域知识或使用集群大小的先验知识,可以进一步微调分配。
  • EM 算法的缺点与陷入局部最优和对起始点敏感有关,在这里仍然是正确的。

基于距离的文本聚类

大多数基于距离的聚类算法依靠相似性或距离度量来确定实例在特征空间中彼此相距多远。通常,在具有数值的数据集中,欧几里德距离或其变体非常有效。在文本挖掘中,甚至在将非结构化文本转换成具有数值的术语的结构化特征之后,已经发现余弦和 Jaccard 相似度函数表现得更好。

通常,使用在第三章、中讨论的凝聚或分层聚类,无监督机器学习技术,它可以根据相似性合并文档,如前所述。合并文档或组通常使用单链接、组平均链接和完全链接技术来完成。凝聚聚类还产生一种可用于信息检索和文档搜索的结构。

还采用了基于划分的聚类技术 k-means 和 k-medoids,以及合适的相似性或距离方法。如在关于聚类技术的讨论中所指出的,k-means 的问题是对起始条件以及计算空间和时间的敏感性。k-medoids 对稀疏数据结构敏感,并且还具有计算空间和时间约束。

非负矩阵分解(NMF)

非负矩阵分解是另一种用于将大型数据特征矩阵分解为两个非负矩阵的技术,这两个非负矩阵不仅可以执行降维,而且更易于检查。NMF 因文档聚类而广受欢迎,许多具有不同优化功能的 NMF 变体现已被证明在文本聚类中非常有效(参考文献【15】)。

输入和输出

这些输入是:

  • A collection of documents following a certain format and structure given by the notation:

    D = {d [1] ,d [2] ,… d [n] }

  • 需要建模或发现的集群数量为 k

输出是:

  • k 个集群用分配给集群的文档来标识 c = {c [1] ,c [2] ,… c [k] }。
它是如何工作的?

下面给出了 NMF 的数学细节和解释:

  1. NMF 背后的基本思想是使用低秩近似对输入矩阵进行因式分解,如下:How does it work?

  2. A non-linear optimization function is used as:How does it work?

    这在 W 或 H 中是凸的,但不是在两者中都是凸的,因此不能保证全局最小值。使用约束最小二乘的各种算法,例如均方误差和梯度下降,被用于求解优化函数。

  3. NMF 的解释,尤其是在理解基于术语的潜在主题方面,非常有用。术语和文档的输入 A [m x n] 可以在低秩近似中表示为 W [m x k] H [k x n] 矩阵,其中 W [m x k] 是术语-主题表示,其列是 NMF 基向量。由 W [1] 给出的 W 的第 1 列的非零元素对应于特定项。因此,w [ij] 可以解释为关于术语 j 的基向量 W [i] ,H [i1] 可以解释为 doc 1 给出的文档对主题向量 W [i] 的方向有多大的亲和力。

  4. 从论文(参考文献【18】)中可以清楚地看出,为医学摘要(称为 Medlars 数据集)获得的基本向量如何创建高度可解释的基本向量。这些基向量中权重最高的项直接对应概念,比如 W [1] 对应与“心脏”相关的话题,W [5] 与“发育障碍”相关。How does it work?

    图 16:来自朗维尔等人(2006),显示了用于可解释性的医学数据集的一些基本向量

优点和局限性

在信息检索和查询方面,NMF 已经被证明在性能上几乎与顶级算法相当,例如 LSI:

  • NMF 的可伸缩性、计算和存储比 LSA 或使用 SVD 的 LSI 要好。
  • NMF 有一个问题,优化不是全局的,陷入局部最小值。
  • 因子的 NMF 生成依赖于优化算法和选择的参数,并且不是唯一的。

文本聚类的评价

在标记数据集的情况下,第三章、*无监督机器学习技术、*中讨论的所有外部度量,如 F-measure 和 Rand Index,在评估聚类技术时都是有用的。当数据集没有标注时,可以使用一些被称为内部测量的技术,如戴维斯–波尔丁指数、R 平方和剪影指数。

一般的良好实践是调整并确保文档之间的相似性,如本节所讨论的,当应用于文本挖掘数据时,用于测量聚类的接近度、遥远度和扩散度。类似地,用法也取决于算法和问题的相关性。在基于距离的分割算法中,文档的相似性可以通过平均向量或质心来计算。在分层算法中,可以用组中最相似或最不相似的文档来计算相似性。

命名实体识别

命名实体识别()是文本挖掘信息检索中最重要的课题之一。许多复杂的挖掘任务,如关系的识别、事件的注释和实体间的关联,都使用 NER 作为初始组件或基本预处理步骤。

历史上,基于规则和基于正则表达式的人工技术被用于实体识别。这些人工规则依赖于基本的预处理,使用 POS 标签作为特征,以及手工设计的特征,例如大写单词的存在、单词前标点符号的使用等等。

基于统计学习的技术现在更多地用于 NER 及其变体。NER 可以映射到机器学习中的序列标记和预测问题。生物符号,其中每个实体类型 T 有两个标签 B-T 和 I-T 分别对应于开始和中间,被标记,学习包括找到模式并在看不见的数据中预测它。O 代表文本序列中的外部或无关实体。实体类型 T 以最基本的形式被进一步分类为个人、组织、数据和位置。

在本节中,我们将讨论两种最常用的算法:基于生成的隐马尔可夫模型和基于判别的最大熵模型。

虽然我们在命名实体识别的上下文中讨论这些算法,但是相同的算法和过程可以用于其他 NLP 任务,例如词性标注,其中标签与序列相关联,而不是与 NER 类相关联。

NER 的隐马尔可夫模型

隐藏的马尔可夫模型,正如在第六章、概率图建模中所解释的,是基于序列的生成模型,它假设生成序列的底层分布。通过用正确的 NER 类标记序列而获得的训练数据可以用于学习分布和参数,从而对于未知的未来序列,可以进行有效的预测。

输入和输出

训练数据由文本序列 x ={x [1] ,x [2] ,...x [n] }其中每个 xi 是文本序列中的一个单词,并且每个单词的标签可作为 y ={y [1] ,y [2] ,...y [n] }。该算法生成一个模型,以便在对看不见的数据进行测试时,可以生成新序列的标签。

它是如何工作的?

  1. **在最简单的形式中,做了一个马尔可夫假设,即序列的隐藏状态和标签只依赖于前一个状态。对带标签的单词序列的一种适应如下图所示:How does it work?

    图 17:隐藏马尔可夫链中对应于 NER 的文本序列和标签**

  2. 序列分类的 HMM 公式有助于估计在训练数据上最大化的联合概率:How does it work?

  3. 假设每个 y [i] 都是基于y[I–1]和 x i 生成的,实体中的第一个字是根据当前和以前的标签生成的,即 y [i] 和y[I–1]。如果该实例已经是一个命名实体,那么只对以前的实例进行调节,即xI–1。“到访过”、“在”等外界词被认为“不是名类”。

  4. 具有前向-后向算法的 HMM 公式可用于确定具有从训练数据中学习的参数的观察序列的可能性。

优点和局限性

优点和局限性如下:

  • hmm 适用于短序列,如图所示,带有一个单词或术语以及独立性假设。对于实体跨度较长的序列,结果将违反这些假设。
  • HMM 需要大量的训练数据来估计参数。

NER 的最大熵马尔可夫模型

最大熵马尔可夫模型 ( MEMM )是一种流行的 NER 技术,它使用马尔可夫链的概念和最大熵模型来学习和预测命名实体(引用【16】【17】)。

输入和输出

训练数据由文本序列 x ={x1,x2,...其中每个 xi 是文本序列中的一个单词,并且每个单词的标签可作为 y ={y1,y2,...yn}。该算法生成模型,以便在对看不见的数据进行测试时,可以生成新序列的标签。

它是如何工作的?

下面的说明了如何使用 MEMM 方法来学习命名实体。

  1. MEMM 中的特征可以是单词特征或其他类型的特征,如“isWordCapitalized”等,这使它比 HMM 具有更多的上下文并提高了性能,HMM 仅基于单词。

  2. 接下来,让我们看看最大熵模型,称为最大熵模型,这是一个指数概率模型,但也可以被视为多项式逻辑回归模型。在基本的 MaxEnt 模型中,给定特征{f [1] ,f [2] … f [N] }和类 c [1] ,c [2] … c [C] ,这些特征的权重是使用优化方法从训练数据和特定的概率中学习到的

  3. **The feature fi is formally written as fi, which means the feature f[i] for class c and observation x. The fi is generally binary with values 1/0 in most NER models. Thus, it can be written as:How does it work?

    基于跨类预测概率的最大似然法可用于选择单个类:

    How does it work?**

  4. **For every word, we use the current word, the features from "nearby" words, and the predictions on the nearby words to create a joint probability model. This is also called local learning as the chunks of test and distribution are learned around local features corresponding to the word.

    在数学上,我们看到如何从当前单词和最后预测创建判别模型,如下所示:

    How does it work?How does it work?

    k 要素的概化:

    How does it work?**

  5. **因此,在 MEMM,我们计算状态的概率,这是 NER 的类,即使我们以 y[I–1]给出的邻近单词的预测为条件,一般来说,我们可以使用更多的特征,这是优于之前讨论的 HMM 模型的优势:How does it work?How does it work?

    图 18:带标签的文本序列和观察概率**

  6. 维特比算法用于执行对单词的类别估计或 HMM 中的解码/推理,即获得对 p(y[I]| y[I–1],X [i] 的估计

  7. 最后,使用 MaxEnt 模型来估计权重,如之前使用优化方法对于状态变化一般:How does it work?

优点和局限性

  • MEMM 在使用不仅仅是基于单词甚至是人类工程的功能方面有更大的灵活性,这给了它更多的丰富性,并使其模型更具预测性。
  • 与 HMM 相比,MEMM 可以具有不仅仅是相近单词的范围,这使其在更大范围内具有检测优势。

深度学习和自然语言处理

在过去的几年里,深度学习及其在自然语言处理各个领域的应用取得了巨大的成功,并被 ?? 认为是当今科技的前沿。使用深度学习的主要优势在于工具和方法的小子集,这些工具和方法在各种各样的 NLP 问题中是有用的。它解决了特征工程的基本问题,并通过自动学习来仔细创建手动表示,从而解决了让大量语言专家处理各种问题的问题,例如文本分类、情感分析、词性标注和机器翻译等等。在这一部分,我们将尝试涵盖深度学习和 NLP 领域的重要概念和研究。

在他的开创性论文中,Bengio 介绍了深度学习最重要的构建模块之一,称为单词嵌入或单词向量(参考文献 [20])。单词嵌入可以被定义为将单词映射到高维向量(基于应用通常是 25 到 500 维)的参数化函数。

形式上,这可以写成Deep learning and NLP

比如Deep learning and NLPDeep learning and NLP,等等。

**一个神经网络( R ),其输入是来自句子的单词或具有二元分类的句子的 n-grams,例如 n-grams 中的单词序列是否有效,用于训练和学习 WR 😗*

**Deep learning and NLP

图 19:一个模块化神经网络学习 5 个单词的有效-无效分类**

例如:

  • R(W(cat),W(sat),W(on),W(the),W(mat)) = 1(有效)
  • R(W(cat),W(sat),W(on),W(the),W(mat)) = 0(无效)

训练这些句子或 n-grams 的想法不仅是学习短语的正确结构,也是学习 WR 的正确参数。使用第三章、无监督机器学习技术中介绍的各种线性和非线性特征简化/可视化技术,单词嵌入也可以被投射到较低维度的空间,例如 2D 空间,人类可以很容易地将其可视化。这种使用 t-SNE 等技术的二维单词嵌入可视化发现了关于基于语义的单词接近度的重要信息,甚至发现了该区域中单词的聚类,如下图所示:

**Deep learning and NLP

图 20:整个单词映射的一小部分的 t-SNE 表示。罗马数字和单词中的数字在左边聚集在一起,而语义相近的单词在右边聚集在一起。**

进一步扩展概念,科洛伯特和米科洛夫都表明,学习单词嵌入的副作用在各种 NLP 任务中非常有用,例如相似短语学习(例如, W("the color is red")) W("颜色是黄色"),找同义词(例如 W("钉钉") W("被砸"),类比映射(例如 W("人")?W(“女”)然后 W(“王”)?W(" queen "),甚至复杂的关系映射(例如, W("Paris ")?W(“法国”)然后 W(“东京”)?w("日本") ( 参考文献【21 和 22】)。

将单词嵌入概念扩展到通用表示,这有助于我们在各种 NLP 问题中重用该表示(通过较小的扩展),这是 NLP 中深度学习最近取得许多成功的主要原因。Socher 在他的研究中扩展了单词嵌入的概念产生了双语单词嵌入,即把来自两种不同语言的单词,如汉语(普通话)和英语,嵌入到一个共享的空间(引用【23】)。通过相互独立地学习两种语言的单词嵌入,然后将它们投射到同一空间,他的工作让我们对跨语言的单词相似性有了有趣的见解,这可以扩展到机器翻译。Socher 还做了有趣的工作,将从 CNN 学习到的嵌入单词的图像投影到相同的空间,以将单词与图像关联起来,作为一个基本的分类问题(参考文献 24】)。大约在同一时间,谷歌也在研究类似的概念,但规模更大,用于词-图匹配和学习。

递归神经网络的想法是将单词嵌入概念扩展到组合器或关联模块,这些模块可以帮助组合所有组合中的单词、单词-短语、短语-短语,以学习复杂的句子。下图显示了如何使用递归神经网络学习复杂关联((猫)(sat(on (the mat)))) 。它还消除了神经网络中输入“固定”数量的限制,因为它能够递归组合:**

![Deep learning and NLP 图 21:递归神经网络显示如何学习复杂短语。 **递归神经网络在 NLP 任务(如情感分析)中显示出巨大的潜力,在情感分析中,一个负面单词与许多正面单词的开头关联会对句子产生整体负面影响,如下图所示:****Deep learning and NLP

图 22:一个复合句,显示了通过 RNN 连接的带有负面情绪(红色圆圈)、正面情绪(绿色圆圈)和中性情绪(空 0)的单词。**

递归神经网络的概念现在被扩展,使用编码器和解码器的构建块来学习可逆的句子表示——也就是说,从输入句子中重建意思大致相同的原始句子(引用【27】)。这已经成为神经机器翻译背后的中心核心主题。使用 RNNs 的编码器-解码器框架对对话建模也取得了巨大的突破(参考文献 [28])。

**

工具和用法

我们现在将讨论在各种 NLP 和文本挖掘应用中使用的一些最著名的 Java 工具和库。

木槌

Mallet 是一个用 Java 编写的文本的机器学习工具包,它附带了几个自然语言处理库,包括那些用于文档分类、序列标记和主题建模的库,以及各种机器学习算法。它是开源的,在 CPL 下发布。Mallet 公开了一个广泛的 API(见下面的截图),用于创建和配置预处理、矢量化、特征选择等“管道”序列,以及扩展分类和聚类算法的实现,加上许多其他文本分析和机器学习功能。

MalletMallet

KNIME

KNIME 是一个开放的分析平台,拥有开放的 GL 许可,拥有许多强大的工具,可以处理数据科学的所有方面。文本处理模块可以从 KNIME 实验室单独下载。KNIME 有一个直观的拖放 UI,可以从他们的工作流服务器下载示例。

注意

https://www.knime.org/

克尼梅实验室:tech.knime.org/knime-text-processing

该平台包括一个节点存储库,其中包含所有必要的工具,通过方便的节点嵌套来构建您的工作流,可以通过复制和粘贴来轻松重用这些节点。工作流的执行很简单。调试错误可能需要一些时间来适应,因此我们的建议是以文本挖掘为例,使用不同的数据集作为输入,并使工作流执行时没有错误。这是熟悉平台最快的方法。

用木槌做主题造型

我们现在将说明如何使用 API 和 Java 代码来实现主题建模,以向用户展示如何用 Java 为一个问题构建文本学习管道:

//create pipeline
ArrayList<Pipe> pipeList = new ArrayList<Pipe>();
  // Pipes: lowercase, tokenize, remove stopwords, map to features
pipeList.add( new CharSequenceLowercase() );
pipeList.add( new CharSequence2TokenSequence(Pattern.compile("\\p{L}[\\p{L}\\p{P}]+\\p{L}")) );
pipeList.add( new TokenSequenceRemoveStopwords(new File("stopReuters/en.txt"), "UTF-8", false, false, false) );
//add all 
pipeList.add( new TokenSequence2FeatureSequence() );
InstanceList instances = new InstanceList (new SerialPipes(pipeList));
//read the file
Reader fileReader = new InputStreamReader(new FileInputStream(new File(reutersFile)), "UTF-8");
instances.addThruPipe(new CsvIterator (fileReader, Pattern.compile("^(\\S*)[\\s,]*(\\S*)[\\s,]*(.*)$"),
3, 2, 1)); // name fields, data, label

Mallet 中的 ParallelTopicModel 有一个 API,其中包含主题数量、alpha 和 beta 等参数,这些参数控制使用 Dirichlet 分布调整 LDA 的底层参数。并行化得到了很好的支持,这从系统中可用线程数量的增加可以看出:

ParallelTopicModel model = new ParallelTopicModel(10, 1.0, 0.01);//10 topics using LDA method
model.addInstances(instances);//add instances
model.setNumThreads(3);//parallelize with threading
model.setNumIterations(1000);//gibbs sampling iterations
model.estimate();//perform estimation of probability

下面的截图显示了在 Mallet 中运行 ParallelTopicModel 的结果。很明显,在许多情况下都可以很好地发现主题的顶级术语和关联,例如 exec、acq、wheat、crude、corn 和 earning 类:

Topic modeling with mallet

商业问题

路透社语料库给每份文件标上 10 个类别中的一个。本案例研究中实验的目的是使用本章中学习的文本处理技术,通过向量空间建模为这些文档提供结构。这是通过三种不同的方式完成的,在这三种情况下,都使用四种分类算法来训练并使用转换后的数据集进行预测。开源 Java 分析平台 KNIME 用于文本处理和学习。

机器学习映射

在文本或图像等非结构化数据的学习技术中,给定带有标签的训练集,将数据分类为不同类别是一个监督学习问题。然而,由于数据是非结构化的,一些统计或信息理论的手段是必要的,以提取可学习的特征从数据中。在本研究的设计中,在使用线性、非线性和集成方法进行分类之前,我们对文档进行了特征表示和选择。

数据收集

实验中使用的数据集是可从 UCI 机器学习知识库获得的 Reuters-21578 Distribution 1.0 文本分类数据集的一个版本:

注意

Reuters-21578 数据集:archive . ics . UCI . edu/ml/datasets/Reuters-21578+文本+分类+集合

这个数据集是一个包含 9981 个文档的修改过的 Apte 分割,每个文档都有一个表示文档类别的类标签。数据集中有 10 个不同的类别。

数据采样和转换

在导入数据文件后,我们执行了一系列预处理步骤,以便在对文档训练任何模型之前丰富和转换数据。这些步骤可以在 KNIME 中创建的工作流截图中看到。它们包括:

  • 标点符号擦除
  • n 字符过滤(删除长度小于四个字符的标记)
  • 数字过滤
  • 大小写转换–全部转换为小写
  • 停止单词过滤
  • 堵塞物

在学习步骤之前,我们将数据随机分成 70-30 份,分别用于训练和测试。我们在每个实验中使用了五重交叉验证。

Data sampling and transformation

前面的截图显示了第一个实验集的工作流程,它使用了一个二元特征向量。数据导入之后是一系列预处理节点,之后数据集被转换为文档向量。在添加回目标向量后,工作流分为四个分类任务,每个任务使用五重交叉验证设置。结果收集在计分器节点中。

特征分析和降维

我们总共进行了三组实验。在第一组中,在预处理之后,我们使用了术语的二进制矢量化,这增加了一个表示,指示术语是否出现在文档中:

Feature analysis and dimensionality reduction

在第二个实验中,我们使用了每个术语的相对术语频率 ( TF )的值,结果得到一个介于 0 和 1 之间的值。

Feature analysis and dimensionality reduction

在第三个中,我们通过过滤掉相对 TF 分数小于 0.01 的项来执行特征选择。

模型、结果和评估

对于三组实验中的每一组,我们使用了两个线性分类器(使用线性核的朴素贝叶斯和 SVM)和两个非线性分类器(以朴素贝叶斯为基础学习器的决策树和 AdaBoost)。在文本挖掘分类中,通常选择精度/召回率作为优于准确度的评价指标,这在传统的平衡分类问题中更为常见。

表中给出了三组实验的结果。分数是所有班级的平均值:

二元术语向量:

|

分类者

|

回忆

|

精确

|

灵敏度

|

特征

|

f-测度

|

准确(性)

|

科恩的卡帕

朴素贝叶斯 0.5079 0.5281 0.5079 0.9634 0.5087 0.7063 0.6122
决策图表 0.4989 0.5042 0.4989 0.9518 0.5013 0.7427(2) 0.6637(2)
AdaBoost(NB) 0.5118(2) 0.5444(2) 0.5118(2) 0.9665(2) 0.5219(2) 0.7285 0.6425
LibSVM 0.6032(1) 0.5633(1) 0.6032(1) 0.9808(1) 0.5768(1) 0.8290(1) 0.7766(1)

相对 TF 向量:

|

分类者

|

回忆

|

精确

|

灵敏度

|

特征

|

f-测度

|

准确(性)

|

科恩的卡帕

朴素贝叶斯 0.4853 0.5480(2) 0.4853 0.9641 0.5113(2) 0.7248 0.6292
决策图表 0.4947(2) 0.4954 0.4947(2) 0.9703(2) 0.4950 0.7403(2) 0.6612(2)
AdaBoost(NB) 0.4668 0.5326 0.4668 0.9669 0.4842 0.6963 0.6125
LibSVM 0.6559(1) 0.6651(1) 0.6559(1) 0.9824(1) 0.6224(1) 0.8433(1) 0.7962(1)

使用阈值滤波的相对 TF 向量(相对 TF > 0.01):

|

分类者

|

回忆

|

精确

|

灵敏度

|

特征

|

f-测度

|

准确(性)

|

科恩的卡帕

朴素贝叶斯 0.4689 0.5456(2) 0.4689 0.9622 0.4988 0.7133 0.6117
决策图表 0.5008(2) 0.5042 0.5008(2) 0.9706(2) 0.5022(2) 0.7439(2) 0.6657(2)
AdaBoost(NB) 0.4435 0.4992 0.4435 0.9617 0.4598 0.6870 0.5874
LibSVM 0.6438(1) 0.6326(1) 0.6438(1) 0.9810(1) 0.6118(1) 0.8313(1) 0.7806(1)

文本处理结果分析

我们在路透社数据集上的实验结果的分析如下,其中包含一些关键观察结果:

  • 如第一个表所示,使用术语的二进制表示,朴素贝叶斯得分约为 0.7,这表明生成的特征具有良好的区分能力。在相同配置的朴素贝叶斯上的 AdaBoost 进一步提高了所有指标,如精度、召回率、F1-measure 和准确度,提高了约 2%,表明了 boosting 和元学习的优势。
  • 如第一个表所示,非线性分类器,如决策树,在大多数指标上仅略好于线性朴素贝叶斯。具有线性分类器的 SVM 比线性朴素贝叶斯提高了 17%的准确度,并且在几乎所有测量中具有类似的更好的度量。SVM 和核,没有高维数据的问题,文本分类的诅咒,因此是建模的较好算法之一,结果证实了这一点。
  • 将二进制表示更改为 TF 可提高许多测量值,例如线性朴素贝叶斯(从 0.70 更改为 0.72)和 SVM(从 0.82 更改为 0.84)的精确度。这确实证实了基于 TF 的表示在许多基于数值的算法中,如 SVM。如许多理论和经验结果所示,当基础分类器贝叶斯的性能变得更强时,使用朴素贝叶斯的 AdaBoost 性能在大多数度量中下降。
  • 最后,通过使用阈值 TF > 0.01 来减少特征,如这里所使用的,我们在大多数分类器中获得几乎相似或稍微降低的性能,这表明尽管某些术语看起来很少,但它们具有辨别能力,并且减少它们具有负面影响。

总结

数字世界中的大部分信息都是文本信息。文本挖掘和自然语言处理都是与从这种非结构化形式的数据中提取信息有关的领域。该领域的几个重要子领域是当今研究的活跃主题,对这些领域的理解对于数据科学家来说至关重要。

文本分类涉及将文档分类到预先确定的类别中。可以通过注释单词来丰富文本,就像词性标注一样,以便为后续处理任务提供更多的结构。诸如聚类之类的非监督技术也可以应用于文档。信息提取和命名实体识别有助于识别信息丰富的细节,如位置、个人或组织名称等。摘要是为大型文档或文档集生成简明摘要的另一个重要应用。各种语言和语义的歧义,如上下文、词义和推理,使得自然语言处理的任务具有挑战性。

文本内容的转换包括标记化、停用词移除和词干化,所有这些都通过标准化内容来准备语料库,以便可以有效地应用机器学习技术。接下来,提取词汇、语义和句法特征,因此数值可以用向量空间模型更常规地表示文档结构。然后可以应用相似性和距离度量来有效地比较文档的相似性。由于通常存在大量特征,因此降维是关键。本章将详细介绍主题建模、PLSA 和文本聚类以及命名实体识别技术。最后,向读者介绍了在 NLP 的各个领域中采用深度学习的最新技术。

Mallet 和 KNIME 是两个开源的基于 Java 的工具,提供了强大的 NLP 和机器学习能力。案例研究使用 KNIME 检验了不同分类器在路透社语料库上的性能。

参考文献

  1. J.b .洛文斯(1968 年)。词干算法的开发,《机械翻译与计算机语言学》,第 11 卷,第 1/2 期,第 22-31 页。
  2. 波特 M . F .(1980 年)。后缀剥离的一种算法,程序;14, 130-137.
  3. 齐普夫,惠普,(1949 年)。人类行为和最小努力原则,Addison-Wesley,剑桥,马萨诸塞州。
  4. H.P .卢恩(1958 年)。文献摘要的自动生成’,IBM 研发杂志,2,159-165。
  5. Deerwester,s .,Dumais,s .,Furnas,g .,& Landauer,T. (1990),潜在语义分析索引,美国信息科学学会杂志,41,391–407。
  6. Dempster,A. P .,Laird,N. M .,& Rubin,D. B. (1977),通过 EM 算法不完全数据的最大似然。皇家统计学会杂志,B 辑,39(1),1–38。
  7. 格雷夫,W. R. (1998 年)。基于探索性数据分析的术语加权理论。在第 21 届国际 ACM SIGIR 信息检索研究与发展会议上。ACM。
  8. 页(page 的缩写)F. Brown,P. V. deSouza,R. L. Mercer,V. J. Della Pietra 和 J/ C. Lai (1992),自然语言的基于类的 n-gram 模型,计算语言学,18,4,467-479。
  9. T.刘绍林,陈志军,马文友(2003),文本聚类中特征选择的评价,会议。
  10. Y.杨(1995)。文本分类中特征选择的比较研究,ACM SIGIR 会议。
  11. 索尔顿和巴克利(1998 年)。自动文本检索中的术语加权方法。信息处理&管理,24(5),513–523。
  12. t .霍夫曼(2001 年)。通过概率潜在语义分析的无监督学习。机器学习杂志,41(1),177–196 页。
  13. D.布雷,j .拉弗蒂(2006 年)。动态话题模型。ICML 会议。
  14. D.布莱,A. Ng,m .乔丹(2003)。潜在狄利克雷分配,《机器学习研究杂志》,第 3 期:第 993–1022 页。
  15. W.徐,刘小玲,龚永元(2003)。基于非负矩阵分解的文档聚类。2003 年 SIGIR 会议录,第 267-273 页。
  16. Dud ik M .和 Schapire (2006 年)。广义正则化的最大熵分布估计。在卢戈西和西蒙。),柯尔特,柏林,第 123-138 页,施普林格出版社,。
  17. McCallum,a .,Freitag,d .,和 Pereira,F. C. N. (2000 年)。用于信息提取和分割的最大熵马尔可夫模型。在 ICML,第 591–598 页..
  18. 兰维尔,A. N .,迈耶,C. D .,奥尔布赖特,R. (2006 年)。非负因式分解的初始化。美国费城 KDD
  19. 邓宁,T. (1993 年)。统计惊奇和巧合的精确方法。计算语言学,19,1,第 61-74 页。
  20. Y.Bengio、R. Ducharme、P. Vincent 和 C. Jauvin (2003 年)。一个神经概率语言模型。机器学习研究杂志。
  21. R.Collobert、J. Weston、L. Bottou、M. Karlen、K. Kavukcuoglu 和 P. Kuksa。(2011).自然语言处理(几乎)从无到有。机器学习研究杂志,12:2493–2537。
  22. T.Mikolov、K. Chen、G. Corrado 和 J. Dean (2013 年)。向量空间中单词表示的有效估计。arXiv:1301.3781v1。
  23. R.索契,克里斯多佛·曼宁和吴恩达。(2010).用递归神经网络学习连续短语表示和句法分析。NIPS 2010 年深度学习和无监督特征学习研讨会。
  24. R.Socher,J. Pennington,E. H. Huang,A. Y. Ng 和 C. D. Manning .(2011).用于预测情感分布的半监督递归自动编码器。在 EMNLP。
  25. 米(meter 的缩写))Luong、R. Socher 和 C. Manning (2013 年)。用递归神经网络对形态学进行更好的单词表示。康。
  26. A.Frome、G. S. Corrado、J. Shlens、S. Bengio、J. Dean、T. Mikolov 等人(2013 年)。设计:深度视觉语义嵌入模型。在 NIPS 诉讼中。
  27. 莱昂·博图(2011 年)。从机器学习到机器推理。arxiv.org/pdf/1102.1808v3.pdf
  28. Cho,Kyunghyun 等人(2014 年)。使用用于统计机器翻译的 rnn 编码器-解码器学习短语表示。arXiv 预印本 arXiv:1406.1078。**

九、大数据机器学习——最后的前沿

近年来,我们看到人类和机器生成的数据呈指数级增长。各种来源,包括家用传感器、医疗保健相关的监控设备、新闻源、社交媒体上的对话、图像和全球商业交易——不胜枚举——每天都会产生大量数据。

2017 年 3 月,脸书拥有 12.8 亿日活跃用户,分享近 400 万条非结构化信息,如文本、图像、网址、新闻和视频(来源:脸书)。13 亿 Twitter 用户每天分享大约 5 亿条推文(来源:Twitter)。物联网 ( 物联网)到 2020 年,灯中的传感器、恒温器、汽车中的传感器、手表、智能设备等等将从 500 亿增长到 2000 亿(来源:IDC 估计)。YouTube 用户每五分钟上传 300 小时的新视频内容。网飞有 3000 万观众,每天观看 77000 小时的视频。亚马逊已经销售了大约 4.8 亿件产品,拥有大约 2.44 亿客户。在金融领域,即使是一家大型机构产生的交易数据量也是巨大的,美国大约有 2500 万家庭将大型金融机构美国银行作为他们的主要银行,每年产生数 Pb 的数据。总体而言,预计 2017 年全球大数据产业价值 430 亿美元(来源:www.statista.com)。

上述每家公司以及许多类似的公司都面临着存储所有这些数据(结构化和非结构化)、处理数据以及从数据中学习隐藏模式以增加收入和提高客户满意度的实际问题。我们将探讨当前的方法、工具和技术如何帮助我们从大数据规模环境中的数据中学习,以及作为该领域的从业者,我们必须如何认识到这一问题领域特有的挑战。

本章的结构如下:

  • 大数据有什么特点?

  • 大数据机器学习

    • 通用大数据框架:

      • 大数据集群部署框架
      • HortonWorks 数据平台(HDP)
      • cloud era CDH
      • 亚马逊弹性 MapReduce (EMR)
      • 微软 HD insight
    • 数据采集:

      • 发布-订阅框架
      • 源-宿框架
      • SQL 框架
      • 消息排队框架
      • 自定义框架
    • 数据存储:

      • Hadoop 分布式文件系统(HDFS)】
  • 批量大数据机器学习

    • 【H2O:

    • H2O 架构

      • H2O 机器学习
      • 工具及用法
      • 案例分析
      • 业务问题
      • 机器学习映射
      • 数据采集
      • 数据采样与转换
      • 实验、结果、分析
    • Spark MLlib:

  • 实时大数据机器学习

    • 可扩展高级海量在线分析(萨摩亚):

      • 萨摩亚架构
      • 机器学习算法
      • 工具和用法
      • 实验、结果和分析
      • 机器学习的未来

大数据有什么特点?

大数据有许多不同于正常数据的特征。在此,我们将它们突出显示为四个表征大数据的 V 。每一个都需要使用专门的工具、框架和算法来进行数据采集、存储、处理和分析:

  • 容量:大数据的特征之一是内容的大小,无论是结构化的还是非结构化的,都不符合单台机器上可用的存储容量或处理能力,因此需要多台机器。
  • 速度:大数据的另一个特征是内容生成的速度,这有助于数据量,但需要以时间敏感的方式处理。社交媒体内容和物联网传感器信息是高速大数据的最佳示例。
  • 多样性:这个一般的是指数据存在的多种格式,即结构化、半结构化、非结构化,而且每种格式都有不同的形式。包含图像、视频、音频、文本以及有关活动、背景、网络等结构化信息的社交媒体内容是必须分析各种来源数据的最佳示例。
  • 准确性:这是指各种各样的因素,如噪音、不确定性、偏差和必须解决的数据异常,特别是在给定数据量、速度和多样性的情况下。正如我们将在大数据机器学习的背景下讨论的那样,其中一个关键步骤是处理和清理这些“不干净”的数据。

许多人在前面的列表中添加了其他特征,如价值、有效性和波动性,但我们认为它们很大程度上源自前面的四个特征。

大数据机器学习

在本节中,我们将讨论大数据机器学习所需的一般流程和组件。尽管许多组件,如数据获取或存储,与机器学习方法没有直接关系,但它们不可避免地会对框架和过程产生影响。给出可用组件和工具的完整目录超出了本书的范围,但是我们将讨论所涉及任务的一般职责,并给出一些关于完成这些任务的可用技术和工具的信息。

通用大数据框架

下图说明了通用大数据框架:

General Big Data framework

图 1:大数据框架

如何在集群中设置和部署大数据框架的选择是影响工具、技术和成本选择的决策之一。数据获取或收集组件是第一步,它由几种同步和异步技术组成,用于将数据吸收到系统中。组件中提供了各种技术,包括发布-订阅、源-接收器、关系数据库查询和自定义数据连接器。

从分布式文件系统(如 HDFS)到非关系数据库(NoSQL ),数据存储的选择基于各种其他功能需求。NoSQL 数据库在数据存储部分有所描述。

数据准备,或转换大量存储的数据,使其可供机器学习分析使用,是一个重要的处理步骤。这依赖于存储中使用的框架、技术和工具。它还依赖于下一步:选择将使用的机器学习分析/框架。处理框架有很多种选择,这将在下面的小节中讨论。

回想一下,在批量学习中,模型是根据先前收集的大量示例同时训练的。与批量学习相比,在实时学习模型中,训练是连续的,每个新的实例都成为动态训练集的一部分。详见第五章、实时流机器学习。一旦基于领域需求收集、存储和转换了数据,就可以采用不同的机器学习方法,包括批量学习、实时学习和批量-实时混合学习。选择监督学习、非监督学习还是两者的结合还取决于数据、标签的可用性和标签质量。这些将在本章后面详细讨论。

开发阶段的分析结果以及生产或运行阶段的结果也需要为人工和自动化任务存储和可视化。

大数据集群部署框架

有许多框架建立在核心的 Hadoop ( 参考文献 [3])开源平台上。它们中的每一个都为前面描述的大数据组件提供了许多工具。

Hortonworks 数据平台

Hortonworks 数据平台 ( HDP )提供了一个开源发行版,包括在其堆栈中的各种组件,从数据采集到可视化。Apache Ambari 通常是用于管理服务、供应和监控集群的用户界面。以下屏幕截图描述了用于配置各种服务和运行状况检查仪表板的 Ambari:

Hortonworks Data Platform

图 2: Ambari 仪表板用户界面

云时代 CDH

像 HDP 一样,Cloudera CDH ( 参考文献 [4])提供类似的服务,Cloudera 服务管理器可以以类似于 Ambari 的方式用于集群管理和健康检查,如下面的屏幕截图所示:

Cloudera CDH

图 3: Cloudera 服务管理器用户界面

亚马逊弹性 MapReduce

亚马逊 Elastic MapReduce (EMR) ( 参考文献【5】)是另一个大数据集群,平台类似于 HDP 和 Cloudera,支持各种各样的框架。EMR 有两种模式——集群模式步进执行模式。在集群模式下,您可以选择大数据堆栈供应商 EMR 或 MapR,而在分步执行模式下,您可以将从 jar 到 SQL 查询的各种作业交付执行。在下面的屏幕截图中,我们看到了用于配置新集群以及定义新作业流的界面:

Amazon Elastic MapReduce

图 4:亚马逊弹性 MapReduce 集群管理用户界面

微软 Azure HDInsight

微软 Azure HDInsight ( 参考 [6])是另一个平台,它允许对所需的大多数服务进行集群管理,包括存储、处理和机器学习。如下图所示,Azure 门户用于创建、管理和帮助了解集群各种组件的状态:

Microsoft Azure HDInsight

图 5:微软 Azure HDInsight 集群管理用户界面

数据采集

在大数据框架中,采集组件在从不同的源系统收集数据并将其存储在大数据存储中发挥着重要作用。基于源和量的类型、速度、功能和基于性能的要求,有各种各样的采集框架和工具。我们将描述几个最著名的框架和工具,给读者一些启示。

发布-订阅框架

在基于发布-订阅的框架中,发布源将不同格式的数据推送给代理,代理让不同的订阅者等待使用这些数据。发布者和订阅者彼此都不知道对方,由代理在中间进行调解。

阿帕奇卡夫卡 ( 参考文献【9】)和亚马逊 Kinesis 就是基于这个模型的两个知名实现。Apache Kafka 定义了出版商、消费者和主题的概念——在这些概念上,东西被出版和消费——以及管理主题的代理人。亚马逊 Kinesis 建立在类似的概念上,生产者和消费者通过 Kinesis 流连接在一起,这类似于卡夫卡中的主题。

源汇框架

在源-接收器模型中,源将数据推入框架,框架将系统推入接收器。Apache Flume ( 参考文献【7】)是这种框架的一个众所周知的实现,它有各种各样的源、缓冲数据的通道和许多在大数据世界中存储数据的接收器。

SQL 框架

由于许多传统数据存储都是基于 SQL 的 RDBMS 形式,基于 SQL 的框架提供了从 RDBMS 导入数据并将其存储在大数据中的通用方法,主要以 HDFS 格式存储。Apache Sqoop ( 参考文献 [10])是一个众所周知的实现,它可以从任何基于 JDBC 的 RDBMS 导入数据,并将其存储在基于 HDFS 的系统中。

消息排队框架

消息排队框架是基于推拉的框架,类似于发布者-订阅者系统。消息队列将生产者和消费者分开,并可以以异步通信模式将数据存储在队列中。许多协议已经在此基础上开发出来,比如高级消息排队协议(AMQP)和 ZeroMQ 消息传输协议(ZMTP)。RabbitMQ、ZeroMQ、亚马逊 SQS 等等,都是这个框架的一些著名实现。

定制框架

针对物联网、HTTP、WebSockets 等不同来源的专门的连接器,已经产生了许多特定的连接器,如 Amazon IoT Hub、REST-connectors、WebSocket 等。

数据存储

数据存储组件在将采集和其余组件连接在一起方面起着关键作用。在决定数据存储时,应该考虑性能、对数据处理的影响、成本、高可用性、易管理性等等。对于纯实时或接近实时的系统,有基于内存的存储框架,但对于基于批处理的系统,主要有分布式文件系统,如 HDFS 或 NoSQL。

HDFS

HDFS 可以在大型节点集群上运行,并提供所有重要功能,例如高吞吐量、复制、故障转移等等。

HDFS

HDFS 的基本架构包括以下组件:

  • NameNode:HDFS 客户端总是向 NameNode 发送请求,NameNode 保存文件的元数据,而实际数据以块的形式分布在 DataNodes 上。NameNodes 只负责处理文件的打开和关闭,而其余的读、写和附加交互发生在客户机和数据节点之间。NameNode 将元数据存储在两个文件中:fsimageedit文件。fsimage包含作为快照的文件系统元数据,而编辑文件包含元数据的增量更改。
  • 辅助 NameNode :辅助 NameNode 通过在每个预定义的检查点保存fsimageedit文件的副本,为 NameNode 中的元数据提供冗余。
  • DataNode:DataNode 管理实际的数据块,方便对这些数据块的读写操作。DataNodes 使用心跳信号与 NameNodes 保持通信,表明它们是活动的。存储在数据节点中的数据块也被复制用于冗余。数据节点中数据块的复制由机架感知放置策略控制。

NoSQL

非关系型数据库,也称为 NoSQL 数据库,在大数据世界里越来越受欢迎。高吞吐量、更好的水平伸缩性、改进的检索性能以及以较弱的一致性模型为代价的存储是大多数 NoSQL 数据库的显著特征。在这一节中,我们将讨论 NoSQL 数据库的一些重要形式及其实现。

键值数据库

键值数据库是最突出的 NoSQL 数据库,主要用于半结构化或非结构化数据。顾名思义,存储的结构非常基本,唯一键关联任何类型的数据值,包括字符串、整数、双精度等等,甚至包括 BLOBS。散列键以快速查找和检索值,以及跨多个节点划分数据,提供了高吞吐量和可伸缩性。查询功能非常有限。Amazon DynamoDB、Oracle NoSQL、MemcacheDB 等等都是键值数据库的例子。

文档数据库

文档数据库以 XML、JSON 或 YAML 文档的形式存储半结构化数据,这是一些最流行的格式。文档有唯一的映射键。虽然可以将文档存储在键值存储中,但是文档存储提供的查询功能更强大,因为组成文档结构的原语(可能包括名称或属性)也可以用于检索。当数据不断变化并且具有可变数量或长度的字段时,文档数据库通常是一个不错的选择。文档数据库不提供连接功能和,因此所有信息都需要在文档值中捕获。MongoDB、ElasticSearch、Apache Solr 等等,都是一些众所周知的文档数据库实现。

柱状数据库

使用列作为名称、值和时间戳的基本存储单元,这将列数据库与传统的关系数据库区分开来。柱被进一步组合以形成柱族。行由行键进行索引,并且有多个列族与该行相关联。某些行只能使用填充的列族,这为稀疏数据提供了良好的存储表示。列数据库没有固定的类似模式的关系数据库;可以随时添加新的柱和族,这给了它们显著的优势。 HBaseCassandraParquet 是列数据库的一些众所周知的实现。

图形数据库

在许多应用中,数据有一个固有的图形结构,带有节点和链接。将这样的数据存储在图形数据库中可以提高存储、检索和查询的效率。节点有一组属性,通常表示实体,而链接表示节点之间的关系,可以是有向的,也可以是无向的。 Neo4JOrientDBArangoDB 是一些众所周知的图形数据库实现。

数据处理和准备

在数据准备好供分析和机器学习算法使用之前,数据准备步骤涉及各种预处理步骤。涉及的一些关键任务是:

  • 数据清洗:涉及原始数据上的一切,从纠错、类型匹配、元素规范化等等。
  • 数据采集和管理:转换数据元素,将数据从一种结构规范化为另一种结构。
  • 数据转换:许多分析算法需要建立在原始数据或历史数据上的聚合特性。转换和计算这些额外的特征在这一步完成。

蜂房和 HQL

Apache Hive ( 参考文献 [11])是在 HDFS 系统中执行各种数据准备活动的强大工具。Hive 组织底层 HDFS 数据 a,其结构类似于关系型数据库。HQL 就像 SQL,帮助执行各种聚合、转换、清理和规范化,然后数据被序列化回 HDFS。为了加速,Hive 中的逻辑表被分割并细分为桶。Hive 中的复杂连接和聚合查询会自动转换为 MapReduce 作业,以提高吞吐量和速度。

Spark SQL

Spark SQL 是 Apache Spark 的主要组件(引用 [1]和[2]),它提供了类似 SQL 的功能,类似于 HQL 提供的功能,用于对大数据执行更改。Spark SQL 可以与 Hive 等底层数据存储系统或 Parquet 等 NoSQL 数据库一起工作。在后面关于 Spark 的部分,我们将涉及 Spark SQL 的一些方面。

亚马逊红移

亚马逊 Redshift 提供了几个仓储功能,尤其是在亚马逊 EMR 设置上。它可以使用其大规模并行处理 ( MPP )数据仓库架构处理数 Pb 的数据。

实时流处理

在许多大数据部署中,处理和执行之前指定的转换必须在数据流上实时完成,而不是从存储的批量数据中完成。有各种各样的流处理引擎 ( SPE ),比如 Apache Storm(References【12】)和 Apache Samza,还有内存中的处理引擎,比如用于流处理的 Spark-Streaming。

机器学习

机器学习有助于对大数据进行描述性、预测性和规范性分析。本章将讨论两种极端情况:

  • 可以对批量历史数据进行机器学习,然后可以将学习/模型应用于新的批量/实时数据
  • 机器学习可以在实时数据上进行,并同时应用于实时数据

这两个主题都将在本章的剩余部分详细讨论。

可视化和分析

由于批处理学习在建模时完成,而实时学习在运行时完成,预测——将模型应用于新数据的输出——必须存储在某种数据结构中,然后由用户进行分析。可视化工具和其他报告工具经常用于提取信息并将其呈现给用户。基于领域和用户的需求,分析和可视化可以是静态的、动态的或交互式的。

Lightning 是一个框架,使用 REST for Python、R、Scala 和 JavaScript 语言,通过不同的绑定 API 在 Web 上执行交互式可视化。

Pygal 和 Seaborn 是基于 Python 的库,帮助绘制 Python 中所有可能的图表和图形,用于分析、报告和可视化。

批量大数据机器学习

批量大数据机器学习涉及两个基本步骤,如第二章、现实世界监督学习的实用方法、第三章、无监督机器学习技术和第四章、半监督和主动学习中所述:从历史数据集学习或训练数据,并将学习到的模型应用于未知的未来数据。下图展示了这两种环境以及组件任务和完成这些任务的一些技术/框架:

Batch Big Data Machine Learning

图 6:大数据和提供者的模型时间和运行时间组件

我们将讨论在批量数据的环境中进行机器学习的两个最著名的框架,并将使用案例研究来强调执行建模的代码或工具。

H2O 作为大数据机器学习平台

H2O ( 参考文献 [13])是大数据规模机器学习的领先开源平台,专注于将 AI 引入企业。该公司成立于 2011 年,在其科学顾问中有几位统计学习理论和优化方面的领军人物。它支持多种语言的编程环境。虽然 H2O 软件是免费的,但可以购买产品的客户服务和定制扩展。

H2O 建筑

下图给出了包含重要组件的 H2O 高层架构。H2O 可以从各种数据存储中访问数据,比如 HDFS、SQL、NoSQL 和亚马逊 S3 等等。最流行的 H2O 部署是使用前面讨论过的 Spark 部署栈之一,或者在 H2O 集群中运行它。

H2O 的核心是一种在内存中处理大数据的优化方式,这样可以高效地处理经过相同数据的迭代算法,并获得良好的性能。监督和非监督学习中的重要机器学习算法是专门为处理跨多个节点和 JVM 的水平可伸缩性而实现的。H2O 不仅提供了自己的用户界面(称为 flow)来管理和运行建模任务,还提供了 Java、R、Python 和 Scala 的不同语言绑定和连接器 API。

H2O architecture

图 7: H2O 高层架构

大多数机器学习算法、优化算法和实用程序都使用 fork-join 或 MapReduce 的概念。如图 8 所示,整个数据集被认为是 H2O 的一个数据框,由矢量组成,矢量是数据集中的特征或列。行或实例由并排排列的每个向量中的一个元素组成。这些行被组合在一起形成一个处理单元,称为。几个块被组合在一个 JVM 中。任何算法或优化工作都是从将信息从最顶层的 JVM 发送到下一个 JVM 开始,然后到下一个 JVM,依此类推,类似于 MapReduce 中的 map 操作。每个 JVM 处理块中的行来建立任务,最后结果在 reduce 操作中返回:

H2O architecture

图 8:使用分块的 H2O 分布式数据处理

H2O 的机器学习

下图显示了 H2O v3 支持的监督和非监督学习的所有机器学习算法:

Machine learning in H2O

图 9: H2O v3 机器学习算法

工具和用法

H2O 流是一款交互式网络应用,帮助数据科学家执行各种任务,从导入数据到使用点击和基于向导的概念运行复杂模型。

H2O 以本地模式运行,如下所示:

java –Xmx6g –jar h2o.jar

启动 Flow 的默认方式是将浏览器指向下面的 URL: http://192.168.1.7:54321/。流程的右侧捕获了在标签轮廓下执行的每个用户操作。所采取的行动可以被编辑并保存为命名的流程,以供重用和协作,如图图 10 所示:

Tools and usage

图 10:浏览器中的 H2O 流

图 11 显示了从本地文件系统或 HDFS 导入文件的界面,并显示了详细的摘要统计信息以及可以对数据集执行的后续操作。导入数据后,它会在 H2O 框架中获得一个数据框参考,扩展名为.hex。汇总统计有助于理解数据的特征,如缺失表示最大最小等。它也有一个简单的方法将特征从一种类型转换为另一种类型,例如,将具有几个唯一值的数字特征转换为分类/名义类型,在 H2O 称为enum

可以对数据集执行的操作包括:

  1. 将数据可视化。

  2. 将数据分成不同的集合,如培训、验证和测试。

  3. 构建监督和非监督模型。

  4. 使用模型来预测。

  5. Download and export the files in varied formats.Tools and usage

    Figure 11: Import data as frames, summaries and executable operations

在 H2O,建立有人监督或无人监督的模型是通过一个交互式屏幕完成的。每个建模算法都将其参数分为三个部分:基本、高级和专家。任何支持超参数搜索来调整模型的参数旁边都有一个复选框,可以使用多个参数值。

一些基本参数如训练 _ 帧验证 _ 帧响应 _ 列是每个监督算法共有的;还有一些是特定于模型类型的,比如 GLM 的求解器选择,深度学习的激活函数等等。所有这些通用参数都可以在基本部分中找到。如果必须覆盖默认行为,高级参数是为建模者提供更大灵活性和控制的设置。这些参数中有几个在一些算法中也是通用的——两个例子是选择分配折叠指数的方法(如果在基本部分选择了交叉验证),以及选择包含权重的列(如果每个例子都单独加权),等等。

专家参数定义了更复杂的元素,例如如何处理缺失的值、需要对算法有基本了解的特定模型参数,以及其他深奥的变量。在图 12 中,监督学习算法 GLM 配置了 10 重交叉验证、二项式(两类)分类、高效 LBFGS 优化算法和交叉验证分割的分层采样:

Tools and usage

图 12:建模算法参数和验证

“模型结果”屏幕包含使用重要评估图表对结果进行的详细分析,具体取决于所使用的验证方法。在屏幕的顶部是可以采取的可能操作,例如对未知数据运行模型进行预测,以 POJO 格式下载模型,导出结果,等等。

有些图表是特定于算法的,如显示训练损失或目标函数在 GLM 迭代中如何变化的得分历史,这使用户能够洞察收敛速度以及迭代参数的调整。除了增益和提升图之外,我们还可以在验证数据上看到 ROC 曲线和曲线下面积指标,它们分别给出了验证样本的累积捕获率和累积提升。

图 13 显示了在CoverType数据集上对 GLM 进行 10 倍交叉验证的得分历史ROC 曲线收益/提升图表;

Tools and usage

图 13:建模和验证 ROC 曲线、目标函数和提升/增益图

验证的输出给出了详细的评估方法,如交叉验证情况下每个验证折叠的准确度、AUC、err、误差、f1 测量、MCC (Mathews 相关系数)、精确度、和召回,以及所有验证的平均值和标准偏差。

Tools and usage

图 14:验证结果和总结

预测操作使用未公开的数据运行模型,以估计样本外性能。误差、准确度、曲线下面积、ROC 图等重要测量值作为可保存或导出的预测输出给出。

Tools and usage

图 15:运行测试数据、预测和 ROC 曲线

案例研究

在这个案例研究中,我们使用CoverType数据集用 Java 展示了来自 H2O、Apache Spark MLlib 和萨摩亚机器学习库的分类和聚类算法。

商业问题

可从 UCI 机器学习知识库(archive.ics.uci.edu/ml/datasets/Covertype)获得的CoverType数据集包含尺寸为 30 x 30 m2 的林地的 581,012 个单元的未缩放制图数据,并附有实际森林覆盖类型标签。在这里进行的实验中,我们使用数据的标准化版本。包括两个分类类型的一次性编码,每行总共有 54 个属性。

机器学习映射

首先,我们将问题视为使用数据集中包含的标签进行分类的问题,并执行几个监督学习实验。有了生成的模型,我们可以预测一个看不见的测试数据集的森林覆盖类型。对于接下来的聚类实验,我们忽略数据标签,确定要使用的聚类数,然后使用 H2O 和 Spark MLLib 中实现的各种算法报告相应的成本。

数据收集

这个数据集是仅使用制图测量而非遥感收集的。它来源于最初由美国林务局 ( USFS )和美国地质调查局**(美国地质调查局)收集的数据。**

数据采样和转换

训练和测试数据——数据集被分成两组,20%用于测试,80%用于训练。

分类土壤类型名称由 40 个二元变量属性表示。值为 1 表示观测中存在一种土壤类型;0 表示不存在。

荒野区域名称同样是一个具有四个二元列的分类属性,1 表示存在,0 表示不存在。

所有连续值属性在使用前都已规范化。

实验、结果和分析

在本案例研究的第一组实验中,我们使用了 H2O 框架。

特征关联与分析

虽然 H2O 没有明确的特征选择算法,但许多学习者,如 GLM、随机森林、GBT 等,基于模型的训练/验证给出特征重要性度量。在我们的分析中,我们使用 GLM 进行特征选择,如图图 16 所示。有趣的是,特征高程作为最具辨别能力的特征出现,同时还有一些分类特征被转换为数值/二进制,如土壤 _ 类型 2** 、土壤 _ 类型 4 等等等等。土壤类型分类的许多特征没有相关性,可以从建模的角度删除。**

这组实验包含的学习算法有:广义线性模型(GLM)梯度推进机(GBM)随机森林(RF)朴素贝叶斯(NB)深度学习 ( DL )。H2O 支持的深度学习模型是多层感知器** ( MLP )。**

**Feature relevance and analysis

图 16:使用 GLM 的特征选择**

测试数据的评估

使用所有功能的结果如下表所示:

|

算法

|

因素

|

罗马纪元

|

最大精确度

|

最大 F1

|

最高精度

|

最大召回

|

最大特异性

GLM 默认 Zero point eight four Zero point seven nine Zero point eight four Zero point nine eight 1.0(1) Zero point nine nine
GBM 默认 Zero point eight six Zero point eight two Zero point eight six 1.0(1) 1.0(1) 1.0(1)
随机森林 ( RF ) 默认 0.88(1) 0.83(1) 0.87(1) Zero point nine seven 1.0(1) Zero point nine nine
朴素贝叶斯 ( NB ) 拉普拉斯=50 Zero point six six Zero point seven two Zero point eight one Zero point six eight 1.0(1) Zero point three three
深度学习 ( DL ) Rect,300, 300,Dropout 0. Zero point seven eight Zero point eight three Zero point eight eight 1.0(1) Zero point nine nine
深度学习 ( DL ) 300,300,最大辍学 Zero point eight two Zero point eight Zero point eight four 1.0(1) 1.0(1) 1.0(1)

去除特征相关性得分不高的特征后的结果为:

|

算法

|

因素

|

罗马纪元

|

最大精确度

|

最大 F1

|

最大

精确

|

最大召回

|

最大特异性

GLM 默认 Zero point eight four Zero point eight Zero point eight five One One One
GBM 默认 Zero point eight five Zero point eight two Zero point eight six One One One
随机森林 ( RF ) 默认 Zero point eight eight Zero point eight three Zero point eight seven One One One
朴素贝叶斯 ( NB ) 拉普拉斯=50 Zero point seven six Zero point seven four Zero point eight one Zero point eight nine One Zero point nine five
深度学习 ( DL ) 300,300,直肠辍学 Zero point eight one Zero point seven nine Zero point eight four One One One
深度学习 ( DL ) 300,300,最大辍学 Zero point eight five Zero point eight Zero point eight four Zero point eight nine Zero point nine One

表 1:包含所有特性的模型评估结果

结果分析

从对所得结果的分析中得出的主要观察结果很有启发性,在此列出。

  1. 要素相关性分析显示了高程要素是一个高区分度的要素,而许多转换为二元要素的分类属性,如土壤类型 _10** 等,几乎没有相关性。**
  2. 如表 1 中的所示,包括所有特征的实验结果清楚地表明,非线性集成技术随机森林是最佳算法,如包括准确度、F1、AUC 和召回率在内的大多数评估指标所示。
  3. 表 1 还强调了这样一个事实,尽管更快的线性朴素贝叶斯算法可能不是最适合的,但同样属于线性算法类别的 GLM 表现出了更好的性能——这表明了特性之间的某种相互依赖性!
  4. **正如我们在第七章、深度学习中看到的,深度学习中使用的算法通常需要大量调优;然而,即使有一些小的调整变化,来自 DL 的结果也可以与随机森林相媲美,尤其是使用 MaxDropout 时。
  5. **表 2 显示了从训练集中移除低相关性特征后所有算法的结果。可以看出,朴素贝叶斯-由于基于特征之间的独立性假设的概率倍增而具有最大的影响-获得了最大的好处和最高的性能提升。正如我们在第二章、现实世界监督学习的实用方法、中所讨论的那样,大多数其他算法(如随机森林)都有内置的特征选择,因此删除不重要的特征对它们的性能几乎没有影响。

Spark MLlib 作为大数据机器学习平台

Apache Spark 于 2009 年在加州大学伯克利分校的 AMPLab 启动,于 2013 年根据 Apache 许可证 2.0 捐赠给 Apache 软件基金会。Spark 的核心思想是构建一个集群计算框架,克服 Hadoop 的问题,特别是对于迭代和内存计算。

星火架构

图 17 所示的 Spark 栈可以使用任何类型的数据存储,比如 HDFS、SQL、NoSQL 或本地文件系统。它可以部署在 Hadoop、Mesos 上,甚至可以独立部署。

Spark 最重要的组件是 Spark 核心,它提供了一个以高吞吐量、容错和可伸缩的方式处理和操作数据的框架。

Spark core 之上构建了各种库,每个库都是为了在大数据世界中处理数据和进行分析所需的各种功能。Spark SQL 为我们提供了一种在大数据存储中执行数据操作的语言,它使用的查询语言非常像 SQL,即数据库的通用语言。Spark GraphX 提供 API 来对大数据执行与图形相关的操作和基于图形的算法。Spark Streaming 提供 API 来处理流处理中所需的实时操作,从数据操作到流上的查询。

Spark-MLlib 是一个机器学习库,它有一套广泛的机器学习算法来执行从特征选择到建模的监督和非监督任务。Spark 有 Java、R、Scala、Python 等各种语言绑定。MLlib 在 Spark 引擎上运行具有明显的优势,特别是因为在内存中跨多个节点缓存数据并运行 MapReduce 作业,因此与 Mahout 和其他大规模机器学习引擎相比,性能提高了一个重要因素。MLlib 还具有其他优势,如容错和可伸缩性,而无需在机器学习算法中显式管理它。

**Spark architecture

图 17: Apache Spark 高层架构**

火花芯具有以下部件:

  • 弹性分布式数据集(RDD):rdd 是基本的不可变对象集合,Spark Core 知道如何在集群中进行分区和分布以执行任务。rdd 由“分区”组成,依赖于父 rdd 和关于数据放置的元数据。

  • **在 RDD 上执行两个不同的操作:

    • 转换:延迟求值并将一个 RDD 转换为另一个的操作。惰性求值尽可能地推迟求值,这使得一些资源优化成为可能。
    • 动作:触发转换并返回输出值

    的实际操作**

  • 谱系图:描述特定任务的计算的数据管道或数据流,包括在转换和动作中创建的不同 rdd,被称为任务的谱系图。谱系图在容错中起着关键作用。Spark architecture图 18:阿帕奇火花谱系图

Spark 与集群管理无关,可以与几种实现(包括 YARN 和 Mesos)一起工作,用于管理节点、分配工作和通信。跨集群的转换和动作中的任务分配由调度器完成,从创建 Spark 上下文的驱动节点开始,到许多工作节点,如图图 19 所示。当使用 YARN 运行时,Spark 允许用户在节点级别选择每个 JVM 的执行器、堆和内核分配的数量。

**Spark architecture

图 19:Apache Spark 集群部署和任务分配**

ml lib 中的机器学习

**Spark MLlib 有一个全面的机器学习工具包,在撰写本文时提供了比 H2O 更多的算法,如图图 20 😗*

**Machine Learning in MLlib

图 20: Apache Spark MLlib 机器学习算法**

已经为 Spark 编写了许多扩展,包括 Spark MLlib,用户社区继续贡献更多的包。你可以下载第三方软件或者在 https://spark-packages.org/注册自己的软件。

工具和用法

Spark MLlib 为除 Java 之外的其他语言提供了 API,包括 Scala、Python 和 r。当一个SparkContext被创建时,它会在端口4040启动一个监控和工具 web 控制台,这让我们可以看到关于运行时的关键信息,包括调度的任务及其进度、RDD 大小和内存使用等。还有一些外部分析工具可供使用。

实验、结果和分析

我们在这里解决的业务问题与之前描述的使用 H2O 进行实验的业务问题相同。我们总共使用了五种使用 MLlib 的学习算法。第一个是 k-Means ,所有特性都使用一个通过计算成本确定的 k 值,具体来说,就是在大量的 k 值上计算的误差平方和** ( SSE ),并选择曲线的“弯头”。确定 k 的最佳值通常不是一件容易的事情;通常,为了挑选最佳的 k ,会对轮廓等评估指标进行比较。即使我们知道数据集中的类的数量是 7 ,如果我们假装没有标记数据,看看这样的实验会导致什么结果是有启发性的。使用弯头法找到的最佳 k 值为 27。在现实世界中,商业决策可能经常会引导对 ?? 的选择。**

在下面的清单中,我们展示了如何使用 MLlib 套件中的不同模型来进行聚类分析和分类。代码基于 MLlib API 指南中的例子(spark.apache.org/docs/latest/mllib-guide.html)。我们使用 CSV 格式的标准化 UCI CoverType数据集。请注意,将spark.sql.Dataset与新的spark.ml包一起使用更自然,而spark.mllib包与JavaRDD的配合更紧密。这提供了对 rdd 的抽象,并允许对底层的转换进行优化。在大多数无监督学习算法的情况下,这意味着必须转换数据,以便用于训练和测试的数据集在默认情况下应该有一个名为 features 的列,该列包含作为向量的所有观察特征。一个VectorAssembler对象可用于此转换。ML 管道是一种将任务链接在一起的方法,在训练随机森林分类器的源代码中给出了对 ML 管道使用的一瞥。

k-Means

用于 k-Means 实验的代码片段使用了来自org.apache.spark.ml.clustering包的算法。代码包括设置SparkSession的最小样板文件,它是 Spark 运行时的句柄。注意在设置中,本地模式下指定了八个内核:

SparkSession spark = SparkSession.builder()
    .master("local[8]")
    .appName("KMeansExpt")
    .getOrCreate();

// Load and parse data
String filePath = "/home/kchoppella/book/Chapter09/data/covtypeNorm.csv";
// Selected K value 
int k =  27;

// Loads data.
Dataset<Row> inDataset = spark.read()
    .format("com.databricks.spark.csv")
    .option("header", "true")
    .option("inferSchema", true)
    .load(filePath);
ArrayList<String> inputColsList = new ArrayList<String>(Arrays.asList(inDataset.columns()));

//Make single features column for feature vectors 
inputColsList.remove("class");
String[] inputCols = inputColsList.parallelStream().toArray(String[]::new);

//Prepare dataset for training with all features in "features" column
VectorAssembler assembler = new VectorAssembler().setInputCols(inputCols).setOutputCol("features");
Dataset<Row> dataset = assembler.transform(inDataset);

KMeans kmeans = new KMeans().setK(k).setSeed(1L);
KMeansModel model = kmeans.fit(dataset);

// Evaluate clustering by computing Within Set Sum of Squared Errors.
double SSE = model.computeCost(dataset);
System.out.println("Sum of Squared Errors = " + SSE);

spark.stop();

通过对几个不同值的平方误差的总和进行评估和绘图,并选择曲线拐点处的一个值,得出聚类数的最佳值。这里使用的值是 27

k-均值与主成分分析

在第二个实验中,我们再次使用了 k-Means,但首先我们通过 PCA 降低了数据中的维数。同样,我们在这里使用了一个经验法则,即针对维数选择 PCA 参数的值,使得在降维后原始数据集中至少 85%的方差被保留。这在转换的数据集中从最初的 54 个特征产生了 16 个特征,并且该数据集被用于该实验和随后的实验。以下代码显示了 PCA 分析的相关代码:

int numDimensions = 16
PCAModel pca = new PCA()
    .setK(numDimensions)
    .setInputCol("features")
    .setOutputCol("pcaFeatures")
    .fit(dataset);

Dataset<Row> result = pca.transform(dataset).select("pcaFeatures");
KMeans kmeans = new KMeans().setK(k).setSeed(1L);
KMeansModel model = kmeans.fit(dataset);

二等分 k-均值(使用 PCA)

第三个实验使用了 MLlib 的二分 k-Means 算法。该算法类似于自上而下的分层聚类技术,其中所有实例一开始都在同一个聚类中,随后是连续的拆分:

// Trains a bisecting k-Means model.
BisectingKMeans bkm = new BisectingKMeans().setK(k).setSeed(1);
BisectingKMeansModel model = bkm.fit(dataset);

高斯混合模型

在接下来的实验中,我们使用了 MLlib 的高斯混合模型** ( GMM ),另一种聚类模型。该模型固有的假设是每个集群中的数据分布本质上是高斯分布,参数未知。此处指定了相同的聚类数,最大迭代次数和容差使用了默认值,这决定了算法何时被视为已收敛:**

GaussianMixtureModel gmm = new GaussianMixture()
    .setK(numClusters)
    .fit(result);
// Output the parameters of the mixture model
for (int k = 0; k < gmm.getK(); k++) {
  String msg = String.format("Gaussian %d:\nweight=%f\nmu=%s\nsigma=\n%s\n\n",
              k, gmm.weights()[k], gmm.gaussians()[k].mean(), 
              gmm.gaussians()[k].cov());
  System.out.printf(msg);
  writer.write(msg + "\n");
  writer.flush();
}

随机森林

最后,我们运行了随机森林,这是唯一可用的能够处理多类分类的集成学习器。在下面的代码中,我们看到该算法需要在训练之前执行一些准备工作。预处理阶段由转换器和估计器组成。然后使用管道来拟合数据。你可以在 Apache Spark 网站(spark.apache.org/docs/latest/ml-pipeline.html)上了解更多关于管道的信息:

// Index labels, adding metadata to the label column.
// Fit on whole dataset to include all labels in index.
StringIndexerModel labelIndexer = new StringIndexer()
  .setInputCol("class")
  .setOutputCol("indexedLabel")
  .fit(dataset);
// Automatically identify categorical features, and index them.
// Set maxCategories so features with > 2 distinct values are treated as continuous since we have already encoded categoricals with sets of binary variables.
VectorIndexerModel featureIndexer = new VectorIndexer()
  .setInputCol("features")
  .setOutputCol("indexedFeatures")
  .setMaxCategories(2)
  .fit(dataset);

// Split the data into training and test sets (30% held out for testing)
Dataset<Row>[] splits = dataset.randomSplit(new double[] {0.7, 0.3});
Dataset<Row> trainingData = splits[0];
Dataset<Row> testData = splits[1];

// Train a RF model.
RandomForestClassifier rf = new RandomForestClassifier()
  .setLabelCol("indexedLabel")
  .setFeaturesCol("indexedFeatures")
  .setImpurity("gini")
  .setMaxDepth(5)
  .setNumTrees(20)
  .setSeed(1234);

// Convert indexed labels back to original labels.
IndexToString labelConverter = new IndexToString()
  .setInputCol("prediction")
  .setOutputCol("predictedLabel")
  .setLabels(labelIndexer.labels());

// Chain indexers and RF in a Pipeline.
Pipeline pipeline = new Pipeline()
  .setStages(new PipelineStage[] {labelIndexer, featureIndexer, rf, labelConverter});

// Train model. This also runs the indexers.
PipelineModel model = pipeline.fit(trainingData);

// Make predictions.
Dataset<Row> predictions = model.transform(testData);

// Select example rows to display.
predictions.select("predictedLabel", "class", "features").show(5);

// Select (prediction, true label) and compute test error.
MulticlassClassificationEvaluator evaluator = new MulticlassClassificationEvaluator()
  .setLabelCol("indexedLabel")
  .setPredictionCol("prediction");

evaluator.setMetricName("accuracy");
double accuracy = evaluator.evaluate(predictions);
System.out.printf("Accuracy = %f\n", accuracy); 

下表给出了使用 k 均值和二等分 k 均值的实验的误差平方和:

|

算法

|

k

|

特征

|

同SOUTH-SOUTH-EAST

k 均值 Twenty-seven Fifty-four Two hundred and fourteen thousand seven hundred and two
k 均值(PCA) Twenty-seven Sixteen Two hundred and forty-one thousand one hundred and fifty-five
二分 k 均值(PCA) Twenty-seven Sixteen Three hundred and five thousand six hundred and forty-four

表 3:k 均值的结果

GMM 模型被用来说明 API 的使用;它输出每个聚类的高斯混合的参数以及聚类权重。所有集群的输出可以在本书的网站上看到。

对于随机森林的情况,这些是用不同数量的树运行的结果。这里使用了所有 54 个特性:

|

树的数量

|

准确(性)

|

F1 度量

|

加权精度

|

加权回忆

Fifteen 0.6806 0.6489 0.6213 0.6806
Twenty 0.6776 0.6470 0.6191 0.6776
Twenty-five 0.5968 0.5325 0.5717 0.5968
Thirty 0.6547 0.6207 0.5972 0.6547
Forty 0.6594 0.6272 0.6006 0.6594

表 4:随机森林的结果

结果分析

表 3 中可以看出,当 PCA 后使用更少的维度时,对于相同数量的簇,成本会有小幅增加。用 PCA 改变 k 可能暗示 PCA 情况下更好的 k 。还要注意,在这个实验中,对于相同的 k ,用 PCA 派生的特征平分 K-Means 具有最高的成本。用于二等分 k-均值的聚类的停止数目已经被简单地挑选为对于基本 k-均值确定的数目,但是这不需要如此。对产生最佳成本的 k 的类似搜索可以独立地进行以平分 k 均值。

在随机森林的情况下,我们看到使用 15 树时性能最佳。所有树的深度都是 3。这个超参数也可以改变来调整模型。尽管由于在训练阶段考虑了树之间的差异,随机森林不容易过度拟合,但是将树的数量值增加到超过最佳数量会降低性能。

实时大数据机器学习

在本节中,我们将讨论大数据机器学习的实时版本,在这种情况下,数据大量到达,同时快速变化。在这些条件下,机器学习分析无法按照的“批量学习和部署”的传统实践应用(参考 [14])。**

**Real-time Big Data Machine Learning

图 21:实时大数据机器学习的用例**

让我们考虑一种情况,其中标记的数据在短时间内可用,我们对数据执行适当的建模技术,然后对结果模型应用最合适的评估方法。接下来,我们选择最佳模型,并在运行时使用它对未知数据进行预测。然后,我们有些沮丧地观察到,模型性能随着时间显著下降。用新数据重复这个练习显示了类似的性能下降!我们现在该怎么办?这种困境,加上大量的数据,激发了对不同方法的需求:实时大数据机器学习。

像批量学习框架一样,大数据中的实时框架可能有类似的组件,直到数据准备阶段。当数据准备中涉及的计算必须在流或组合流和批处理数据上进行时,我们需要专门的计算引擎,如 Spark Streaming 。像流计算一样,机器学习必须跨集群工作,并在流上执行不同的机器学习任务。这给单机多线程流算法的实现增加了额外的复杂性。

**Real-time Big Data Machine Learning

图 22:实时大数据组件和提供者**

萨摩亚作为实时大数据机器学习框架

对于一台单机,在第五章、实时流机器学习中,我们详细讨论了 MOA 框架。萨摩亚是用于在流上执行机器学习的分布式框架。

在撰写本文的时刻,萨摩亚是一个孵化器级的开源项目,拥有 Apache 2.0 许可,并与不同的流处理引擎如 Apache StormSamzaS4 进行了良好的集成。

萨摩亚建筑

SAMOA 框架为一组可扩展的流处理引擎提供了几个关键的流服务,并为当今最流行的引擎提供了现有的实现。

**SAMOA architecture

图 23:萨摩亚高层架构**

是一个接口,它作为一个工厂来创建不同的组件,并在萨摩亚将它们连接在一起。萨摩亚的核心是为数据流构建处理元素。加工的基本单元由ProcessingItemProcessor接口组成,如图图 24 所示。ProcessingItem是一个封装的隐藏元素,而处理器是核心实现,用于处理流的逻辑在其中编码。

**SAMOA architecture

图 24:萨摩亚处理数据流**

****流是另一个接口,将各个处理器连接在一起,作为TopologyBuilder创建的源和目的地。一个流可以有一个源和多个目标。流支持源和目的地之间的三种通信形式:

  • All :在这种通信中,来自源的所有消息都被发送到所有目的地
  • Key :在这次通信中,具有相同密钥的消息被发送到相同的处理器
  • 混洗:在这种通信中,消息被随机发送到处理器

SAMOA 中的所有消息或事件都是接口ContentEvent的实现,主要将流中的数据封装为一个值,并具有某种形式的惟一性键。

每个 stream 处理引擎都有一个作为插件的所有关键接口的实现,并与 SAMOA 集成。Apache Storm 实现 StormTopology、StormStream 和 StormProcessingItem 等显示在图 25 的 API 中。

Task 是萨摩亚的另一个工作单元,负责执行。所有的分类或聚类评估和验证技术(如 prequential、holdout 等)都是作为任务实现的。

学习者是萨摩亚实现所有监督和非监督学习能力的接口。学习者可以是本地的,也可以是分布式的,有不同的扩展,比如ClassificationLearnerRegressionLearner

机器学习算法

**Machine Learning algorithms****Machine Learning algorithms

图 25:萨摩亚机器学习算法**

图 25 显示了萨摩亚拓扑的核心组件及其在各种引擎上的实现。

工具和用法

我们继续处理和以前一样的业务问题。为covtype数据集启动训练作业的命令行是:

**bin/samoa local target/SAMOA-Local-0.3.0-SNAPSHOT.jar "PrequentialEvaluation -l classifiers.ensemble.Bagging** 
 **-s (ArffFileStream -f covtype-train.csv.arff) -f 10000"** 

**Tools and usage

图 25:装袋模型性能**

使用 Storm 运行时,命令行如下:

**bin/samoa storm target/SAMOA-Storm-0.3.0-SNAPSHOT.jar "PrequentialEvaluation -l classifiers.ensemble.Bagging** 
 **-s (ArffFileStream -f covtype-train.csv.arff) -f 10000"** 

实验、结果和分析

使用萨摩亚作为大数据的基于流的学习平台的实验的结果在表 5 中给出。

|

算法

|

最佳精确度

|

最终精度

|

最终 Kappa 统计

|

最终 Kappa 时间统计

制袋材料 Seventy-nine point one six Sixty-four point zero nine Thirty-seven point five two -69.51
助推 Seventy-eight point zero five Forty-seven point eight two Zero -1215.1
垂直 HoeffdingTree Eighty-three point two three Sixty-seven point five one Forty-four point three five -719.51
适应性装袋 Eighty-one point zero three Sixty-four point six four Thirty-eight point nine nine -67.37

表 5:使用萨摩亚进行大数据实时学习的实验结果

结果分析

通过对结果的分析,可以得出以下结论:

  • 表 5 显示,根据几乎所有指标,萨摩亚上流行的基于非线性决策树的 VHDT 是性能最好的算法。
  • 自适应 bagging 算法比 bagging 执行得更好,因为它在实现中采用了 Hoeffding 自适应树,这比基本的在线流 bagging 更健壮。
  • 在线 boosting 算法依赖于弱学习者并且没有适应性,如预期的那样排名最低。
  • 图 25 中的 bagging 图显示了随着示例数量的增加而实现的稳定趋势,验证了这样一个普遍共识,即如果模式是稳定的,则更多的示例会导致稳健的模型。

机器学习的未来

机器学习对商业、社会互动以及我们今天的日常生活的影响是不可否认的,尽管并不总是显而易见的。在不久的将来,它将无处不在,不可避免。根据麦肯锡全球研究所 2016 年 12 月发布的一份报告(参考文献 [15]),在主要行业领域,尤其是医疗保健和公共部门,数据和分析有着巨大的未开发潜力。机器学习是有助于开发这一潜力的关键技术之一。比以往任何时候都有更多的计算能力可供我们使用。比以往任何时候都有更多的数据可用,我们比以往任何时候都有更便宜和更大的存储容量。

对数据科学家的需求得不到满足已经刺激了全球大学课程的变化,并导致美国数据科学家的工资在 2012—2014 年间每年增长 16%。利用机器学习,可以找到一系列问题的解决方案,包括资源分配、预测、预测分析、预测性维护以及价格和产品优化。

麦肯锡的同一份报告强调了机器学习日益增长的作用,包括深度学习在农业、制药、制造、能源、媒体和金融等行业的各种用例中的作用。这些场景涵盖了所有领域:预测个性化的健康结果、识别欺诈交易、优化定价和调度、根据个人条件个性化作物、识别和导航道路、诊断疾病以及个性化广告。深度学习在自动化越来越多的职业方面具有巨大的潜力。仅仅提高对自然语言的理解就有可能对全球工资产生 3 万亿美元的影响,影响到全球的客户服务和支持等工作。

得益于深度学习技术的显著进步,图像和语音识别以及语言处理方面的巨大进步已经使个人数字助理等应用变得司空见惯。本书开篇提到的 AlphaGO 成功击败 Lee Sedol 的象征意义是巨大的,因为这是一个生动的例子,说明人工智能的进步如何超越我们自己对人工智能发展里程碑的预测。然而,这只是众所周知的冰山一角。迁移学习等领域的最新研究为更广泛的智能系统带来了希望,这些系统将能够解决更广泛的问题,而不是狭隘地专注于一个问题。在通用人工智能中,人工智能可以开发客观推理,提出解决问题的方法,并从错误中学习,在这一点上还有一段距离,但几年后检查一下,这一距离可能已经缩小到超出我们目前的预期!越来越多的变革性技术进步相互融合,预示着一个充满令人眼花缭乱的可能性的未来,我们已经可以在身边一瞥。看起来,机器学习的作用是继续以深刻和非凡的方式塑造未来。这是毫无疑问的。

总结

这本书的最后一章讨论了机器学习,它适应了过去几十年来信息管理和分析领域出现的最重要的范式转变之一——大数据。正如计算机科学和工程的许多其他领域所看到的那样,人工智能——特别是机器学习——受益于创新的解决方案和专门的社区,这些社区适应于面对大数据带来的许多挑战。

描述大数据的一种方式是通过数量、速度、多样性和准确性。这需要一套新的工具和框架来执行有效的分析任务。

选择大数据框架涉及选择分布式存储系统、数据准备技术、批处理或实时机器学习,以及可视化和报告工具。

有几个开源部署框架可用,包括 Hortonworks 数据平台、Cloudera CDH、Amazon Elastic MapReduce 和 Microsoft Azure HDInsight。每个都提供了一个平台,其中包含支持数据采集、数据准备、机器学习、评估和结果可视化的组件。

在数据获取组件中,发布-订阅是由 Apache Kafka ( 参考文献 [8])和亚马逊 Kinesis 提供的一种模型,它涉及一个在订阅者和发布者之间进行中介的经纪人。备选方案包括源接收器、SQL、消息队列和其他定制框架。

关于数据存储,无论您的需求是什么,有几个因素有助于做出正确的选择。HDFS 提供了一个具有强大容错能力和高吞吐量的分布式文件系统。NoSQL 数据库也提供高吞吐量,但通常一致性保证较弱。它们包括键值、文档、列和图形数据库。

流程中的下一步是数据处理和准备,包括数据清理、清理和转换。Hive 和 HQL 在 HDFS 系统中提供这些功能。SparkSQL 和 Amazon Redshift 提供了类似的功能。Storm 和 Samza 等产品提供实时流处理。

大数据分析中的学习阶段可以包括批量或实时数据。

存在各种丰富的可视化和分析框架,可以从多种编程环境中访问它们。

关于大数据的两个主要机器学习框架是 H2O 和 Apache Spark MLlib。两者都可以访问各种来源的数据,如 HDFS、SQL、NoSQL、S3 等。H2O 支持许多可以在集群中运行的机器学习算法。对于使用实时数据的机器学习,萨摩亚是一个大数据框架,具有一套全面的流处理能力。

机器学习在未来将占据主导地位,对医疗保健、金融、能源乃至大多数行业都将产生广泛影响。自动化范围的扩大将会产生不可避免的社会影响。每美元计算能力、数据和存储的增加为机器学习应用开辟了新的前景,这些应用有可能提高生产率、产生创新并显著提高全世界的生活水平。

参考文献

  1. 马泰·扎哈利亚,莫沙拉夫·乔杜里,迈克尔·j·富兰克林,斯科特·申克,扬·斯托伊察:火花:带工作集的集群计算。热云 2010
  2. 马泰·扎哈利亚、雷诺兹·s·辛、帕特里克·温德尔、如来达斯、迈克尔·阿姆布鲁斯特、安库尔·戴夫、孟祥瑞、乔希·罗森、希瓦拉姆·文卡塔拉曼、迈克尔·j·富兰克林、阿里·古德西、约瑟夫·冈萨雷斯、斯科特·申克、扬·斯托伊察:阿帕奇·斯帕克:大数据处理的统一引擎。Commun。第五十九届会议(11): 56-65 (2016)
  3. 阿帕奇 Hadoop:hadoop.apache.org/
  4. cloud era:www.cloudera.com/
  5. 霍顿作品:hortonworks.com/
  6. 亚马逊 EC2:aws.amazon.com/ec2/
  7. 微软 Azure:azure.microsoft.com/
  8. 阿帕奇水槽:flume.apache.org/
  9. 阿帕奇卡夫卡:kafka.apache.org/
  10. Apache sqoop:http://sqoop . Apache . org/。
  11. 阿帕奇蜂巢:hive.apache.org/
  12. 阿帕奇风暴:storm.apache.org/
  13. http://h2o.ai/的 H2O。
  14. Shahrivari S,Jalili S. 超越批处理:走向实时和流式大数据。电脑。2014;3(4):117–29.
  15. MGI,分析时代——执行摘要www . McKinsey . com/~/media/McKinsey/Business % 20 functions/McKinsey % 20 Analytics/Our % 20 insights/The % 20 Age % 20 of % 20 Analytics % 20 competiting % 20 in % 20a % 20 data % 20 driven % 20 world/MGI-The-The-Age-of-Analytics-Full-report . ashx

十、附录 A:线性代数

线性代数在机器学习中非常重要,它为我们提供了一系列工具,这些工具对于处理数据和从中提取模式非常方便。此外,当在许多机器学习中必须成批处理数据时,当在优化或数据预处理或分析中的任何数量的操作中实施软件解决方案时,使用“矢量化”形式作为传统循环结构的替代,可以获得很高的运行时效率。

下面我们将只考虑实数域。因此,向量Linear Algebra表示一个由 n 个实数值组成的数组。矩阵Linear Algebra是一个由实数值组成的 m 行和 n 列的二维数组。

这里介绍了线性代数基础中的一些关键概念。

矢量

向量 x (小写,粗体,约定;等价地,Vector可以看作是n-维空间中的一个点。通常,当我们说向量时,我们指的是列向量。列向量的转置是元素个数相同的向量,排列成单行。

VectorVector

向量的标量积

也称为点积,标量积定义为两个长度相等的向量。运算的结果是一个标量值,并且是通过对向量的相应元素的乘积求和而获得的。因此,给定向量 xy :

Scalar product of vectors

点积 x T y 给出为:

Scalar product of vectors

矩阵

一个矩阵是一个二维数组。每个元素都可以根据其行和列的位置进行索引。因此,一个 3×2 的矩阵:

Matrix

矩阵的转置

交换矩阵中的行和列产生转置。因此, A 的转置是一个 2×3 矩阵:

Transpose of a matrix

矩阵加法

矩阵加法被定义为具有相同形状的两个矩阵的元素相加。设 AB 为两个 m x n 矩阵。它们的和 C 可以写成如下:

C i,j = A i,j + B i,j

标量乘法

与标量相乘产生一个矩阵,其中每个元素由标量值缩放。这里 A 乘以标量值 d :

Scalar multiplication

矩阵乘法

如果 A 的列数等于 B 的行数,则两个矩阵 AB 可以相乘。如果 A 的尺寸为 m x n 并且 B 的尺寸为 n x p ,则产品 AB 的尺寸为 m x p :

Matrix multiplication

矩阵产品的特性

分配性超过加法:A(B + C) = AB + AC

结合性:A(BC) = (AB)C

非交换性:AB ≠ BA

向量点积是可换的:xTy=yTx

积的转置是转置的积:(ABT =ATBT

线性变换

在线性代数中,矩阵和向量的乘积有着特殊的重要性。考虑 3×2 矩阵 A 和 2×1 向量 x 的乘积,产生 3×1 向量 y :

Linear transformationLinear transformationLinear transformationLinear transformation

(三)

Linear transformation

(R)

考虑前面的矩阵矢量积的两个视图是有用的,即列图像( C 和行图像( R )。在列图中,乘积可视为矩阵列向量的线性组合,而行图可视为矩阵行与向量的点积Linear transformation

矩阵求逆

矩阵与其逆矩阵的乘积就是单位矩阵。因此:

Matrix inverse

如果矩阵逆矩阵存在的话,它可以用来求解由前面的向量矩阵乘积方程表示的联立方程组。考虑一个方程组:

x 1 + 2 x 2 = 3

3 x 1 + 9 x 2 = 21

这可以表示为一个包含矩阵矢量积的等式:

Matrix inverse

我们可以通过将两边乘以矩阵逆来求解变量 x 1 和 x 2:

Matrix inverseMatrix inverse

矩阵的逆矩阵可以用不同的方法计算。建议读者观看斯特朗教授的麻省理工学院讲座:bit.ly/10vmKcL。

特征分解

矩阵可以被分解成因子,这些因子可以给我们对矩阵所代表的转换的有价值的洞察力。作为特征分解的结果,获得特征值和特征向量。对于给定的方阵 A ,特征向量是一个非零向量,当乘以矩阵时,它被转换成自身的缩放版本。标量乘数是特征值。特征向量的所有标量倍数也是特征向量:

A****v=λv

在前面的例子中, v 是特征向量,λ是特征值。

矩阵 A 的特征值方程由下式给出:

(A**—λI)v= 0**

特征值的非零解由行列式表示的次数为 n 的特征多项式方程的根给出:

Eigendecomposition

然后通过求解Av**=λv 中的 v 可以找到特征向量。**

一些矩阵,称为可对角化矩阵,可以完全由它们的特征向量和特征值构成。如果λ是矩阵 A 的特征值在其主对角线上的对角矩阵, Q 是列为 A 的特征向量的矩阵:

Eigendecomposition

那么A = QλQ-1。

正定矩阵

如果一个矩阵只有正的特征值,则称这个矩阵为正定矩阵**。如果特征值为正或为零,则该矩阵称为正半定矩阵。对于正定矩阵,事实是:**

x**T??Ax0

奇异值分解

SVD 是任何矩形矩阵的一个分解,一个维度为 n x p 的**,并且被写成三个矩阵的乘积:**

Singular value decomposition (SVD)

U 定义为 n x nS 为对角 n x p 矩阵, Vp x pUV 是正交矩阵;那就是:

Singular value decomposition (SVD)

S 的对角值称为 A 的奇异值。 U 的列称为 A 的左奇异向量, V 的列称为 A 的右奇异向量。左奇异向量是 A T A 的正交特征向量,右奇异向量是 AA T 的正交特征向量。

SVD 表示将原始数据扩展到一个坐标系中,使得协方差矩阵是一个对角矩阵。

十一、附录 B:概率

这里简单介绍一下概率的基本概念。

概率公理

Kolmogorov 的概率公理可以用可能事件的样本空间 SE 1、 E 2、 E 3、… E n 和事件 E 的实值概率 P(E) 来表述。公理是:

  1. P(E) ≥ 0 对于所有的 eϵs
  2. P(S) = 1
  3. Axioms of probability

总的来说,这些公理认为概率不能是负数——不可能事件的概率为零——样本空间之外的事件是不可能的,因为它是所考虑的可能性的宇宙,并且两个互斥事件中任何一个发生的概率等于它们各自概率的总和。

贝叶斯定理

以证据 X 为条件的事件 E 的概率与事件的先验概率和事件已经发生的证据的可能性成正比。这是贝叶斯定理:

Bayes' theorem

P(X) 是归一化常数,也叫 X 的边际概率。 P(E) 为先验, P(X|E) 为似然。 P(E|X) 也叫后验概率。

用后验概率和先验概率表示的贝叶斯定理被称为贝叶斯法则。

密度估计

从总体中随机抽取样本数据,估计随机变量的隐藏概率密度函数,称为密度估计。高斯混合和核密度估计是用于特征工程、数据建模和聚类的例子。

给定随机变量 X 的概率密度函数 f(X) ,与 X 的值相关联的概率可以被发现如下:

Density estimation

密度估计可以是参数化的,其中假设数据来自已知的分布族,并且例如通过估计分布的参数来估计 f(x) ,并且在正态分布的情况下估计σ ² 。另一种方法是非参数的,其中没有对观察数据的分布进行假设,并且允许数据确定分布的形式。

意思是

随机变量的长期平均值被称为期望值或平均值。样本平均值是观测数据的相应平均值。

在离散随机变量的情况下,平均值由下式给出:

Mean

例如,掷出单个公平骰子的点数平均数是 3.5。

对于概率密度函数为 f(x) 的连续随机变量,均值为:

Mean

方差

方差是随机变量与其均值之差的平方的期望值。

在离散情况下,使用前面讨论的定义的平均值,以及概率质量函数 p(x) ,方差为:

Variance

在连续情况下,情况如下:

Variance

一些连续分布没有均值或方差。

标准偏差

标准偏差衡量数据相对于其平均值的分布程度。它是方差的平方根,与方差不同,它以与数据相同的单位表示。这里给出了离散和连续随机变量的标准偏差:

  • 离散案例:Standard deviation
  • 连续案例:Standard deviation

高斯标准差

从较大人口中随机抽取样本的标准差是人口标准差的有偏估计。基于特定的分布,对这种有偏估计的校正可以不同。对于高斯或正态分布,方差通过Gaussian standard deviation的值进行调整。

根据之前给出的定义,有偏估计值 s 由下式给出:

Gaussian standard deviation

在上式中,Gaussian standard deviation是样本平均值。

使用贝塞尔修正的无偏估计值为:

Gaussian standard deviation

协方差

在两个随机变量的联合分布中,随机变量与其各自均值的偏差乘积的期望称为协方差。因此,对于两个随机变量 XY ,等式如下:

Covariance

=e[xy]–xμy

如果两个随机变量是独立的,那么它们的协方差为零。

相关系数

当协方差被两个随机变量的标准差的乘积归一化时,我们得到相关系数ρX,Y ,也称为皮尔逊积矩相关系数:

Correlation coefficient

相关系数只能取-1 和 1 之间的值。系数+1 意味着随机变量之间存在完美的递增线性关系。-1 表示完美的递减线性关系。如果两个变量相互独立,则皮尔逊系数为 0。

二项分布

参数为 np 的离散概率分布。随机变量是一个二元变量,在单次试验中,结果的概率由 p1–p给出。概率质量函数给出了在 n 次独立试验中 k 次成功的概率。

参数: n,k

PMF:

Binomial distribution

其中:

Binomial distribution

这是二项式系数。

均值:EX=NP

方差:Var(X)=NP(1—p

泊松分布

泊松分布给出了一个事件在给定时间段或给定空间区域发生次数的概率。

参数λ是给定时间间隔内出现的平均次数。在该间隔内观察到的 k 个事件的概率质量函数为

PMF:

![Poisson distribution

均值:E[ X ] = λ

方差: Var(X) = λ

高斯分布

高斯分布,又称正态分布,是一种连续的概率分布。其概率密度函数用均值和方差表示如下:

Gaussian distribution

平均:

标准偏差:σ

方差:σ2

标准正态分布是均值为 0,标准差为 1 的情况。标准正态分布的 PDF 如下所示:

Gaussian distribution

中心极限定理

中心极限定理说,当你有几个独立且同分布的随机变量,其分布具有明确定义的均值和方差时,大量这些观察值的平均值(或总和)近似正态分布,而不考虑母分布。此外,极限正态分布与母体分布具有相同的均值,并且方差等于基础方差除以样本大小。

给定一个随机样本 X 1, X 2, X 3 … X n 用*=E**XI】和σ2*= Var(XI),样本均值:![Central limit theorem**大致正常Central limit theorem

中心极限定理有几个变体,其中独立性或同分布的约束被放松,但收敛到正态分布仍然遵循。

误差传播

假设有一个随机变量 X ,它是多个观测值的函数,每个观测值都有自己的分布。给定组成 X 的测量量的相应值,关于 X 的平均值和方差有什么说法?这就是误差传播的问题。

假设 x 是通过观察变量 uv 等确定的量:

x = f(u,v,)

让我们假设:

Error propagation

x 中关于 uv 等的方差的不确定性可以用 x 的方差来表示:

Error propagation

x 的方差的泰勒展开式,我们得到如下结果:

Error propagation

这里,Error propagation是协方差。

同样,我们可以确定平均值的传播误差。给定具有由 s i 表征的 N 测量值和xT4I 不确定度,可写出以下公式:

Error propagation

使用:

Error propagation

这些方程假设协方差为 0。

假设sI= s*——也就是说,所有的观测值都有相同的误差。*

然后,Error propagation

Error propagation

因此,Error propagation