精通 Java 机器学习(一)
原文:
annas-archive.org/md5/ae0ef35bdc04e7c0f29c1a93734045dd译者:飞龙
前言
关于机器学习有许多值得注意的书籍,从关于从数据学习理论的教学小册子;到该领域专业化的标准参考书籍,如聚类和异常检测或概率图建模;到提供特定语言中工具和库使用实用建议的食谱书。那些覆盖面广泛的书籍通常在理论细节上比较简短,而那些专注于一个主题或工具的书籍可能不会,例如,在流式处理与批量环境中的方法差异方面有很多可说的。此外,对于喜欢 Java 工具且希望找到一本能够扩展他们知识——同时关注基本方面——的初学者来说,选择非常有限。
在一个地方找到
-
在任何数据可用性场景下,不同技术的优缺点——当数据被标记或未标记,是流式或批量,本地或分布式,结构化或非结构化时
-
为那些与这些技术非常相关的最重要的数学结果提供参考资料,以便更好地理解潜在的理论
-
介绍最成熟的基于 Java 的框架、库和可视化工具,包括如何将这些技术付诸实践的描述和说明,据我们所知,今天是不可能的
因此,本书的核心思想是在保持理论处理与实践处理之间平衡的同时,利用概率、统计学、基础线性代数和基础微积分来服务一方,并强调方法论、案例研究、工具和代码来支持另一方。
根据 KDnuggets 2016 年软件调查,Java 在机器学习使用的语言中,以 16.8%的份额位居第二,仅次于 Python。更重要的是,这比前一年增长了 19%!显然,尽管有些人声称 Java 有所衰退,但它仍然是构建和部署涉及机器学习的系统的重要而有效的工具。通过本书,我们旨在接触那些在 Java 方面有一定经验并且对机器学习有入门知识的专业人士和有志爱好者。我们的目标是使《精通 Java 机器学习》成为他们成为数据科学高级实践者道路上的下一步。为了引导他们在这条道路上前进,本书涵盖了机器学习中的各种技术——其中一些他们可能已经熟悉,而另一些可能不太熟悉,或者只是表面了解——包括数据分析方法、学习算法、模型性能评估以及监督学习和半监督学习、聚类和异常检测、半监督和主动学习中的更多内容。它还介绍了特殊主题,如概率图建模、文本挖掘和深度学习。不忘考虑当今企业规模系统中日益重要的主题,本书还涵盖了从不断变化的数据流中学习的独特挑战,以及适用于实时系统的工具和技术,以及大数据世界的必要性:
-
机器学习在大规模分布式环境中的工作方式是什么?
-
会有哪些权衡?
-
算法应该如何调整?
-
这些系统如何与其他主导的 Hadoop 生态系统中的技术互操作?
本书解释了如何使用正确的方法论、流程、应用和分析,将机器学习应用于现实世界的数据和领域。每一章都伴随着案例研究和如何使用一些最佳开源工具(用 Java 编写)应用新学习技术的示例。本书涵盖了超过 15 个开源 Java 工具,它们之间支持广泛的技术,包括代码和实际用法。代码、数据和配置可供读者下载和实验。我们展示了超过十个机器学习的现实世界案例研究,这些研究说明了数据科学家的工作流程。每个案例研究详细描述了实验中采取的步骤:数据摄入、数据分析、数据清洗、特征减少/选择、映射到机器学习、模型训练、模型选择、模型评估和结果分析。这为读者提供了使用每章中介绍的工具和方法解决手头商业问题的实用指南。
本书涵盖的内容
第一章, 机器学习回顾,是对读者从 Packt 的Java 机器学习学习或类似文本中学到的基本概念和技术的复习。本章回顾了诸如数据、数据转换、采样和偏差、特征及其重要性、监督学习、无监督学习、大数据学习、流和实时学习、概率图模型以及半监督学习等概念。
第二章, 现实世界监督学习的实用方法,抹去尘网,直接深入监督学习的广阔领域及其相关技术的全谱系。我们涵盖了特征选择和降维、线性建模、逻辑模型、非线性模型、SVM 和核、集成学习技术如 bagging 和 boosting、验证技术和评估指标以及模型选择等主题。使用 WEKA 和 RapidMiner,我们进行了详细的案例研究,从数据分析到模型性能分析的所有步骤。与每一章的其他案例研究一样,案例研究作为示例呈现,以帮助读者理解章节中介绍的技术如何在现实生活中应用。案例研究中使用的数据集是 UCI 马科利克。
第三章, 无监督机器学习技术,介绍了聚类和异常检测技术中的许多高级方法及其应用。涵盖的主题包括无监督数据中的特征选择和降维、聚类算法、聚类中的评估方法以及使用统计、距离和分布技术进行异常检测。本章结束时,我们使用真实世界的图像数据集 MNIST 对聚类和异常检测进行了案例研究。我们使用 Smile API 进行特征降维,使用 ELKI 进行学习。
第四章, 半监督学习和主动学习,详细介绍了在只有少量标记数据时进行学习的算法和技术。涵盖的主题包括自训练、生成模型、归纳 SVM、协同训练、主动学习和多视角学习。案例研究涉及学习系统,并在真实世界的 UCI 威斯康星乳腺癌数据集上进行。介绍的工具是 JKernelMachines、KEEL 和 JCLAL。
第五章,实时流机器学习,涵盖了实时数据流在从数据中学习的问题上呈现的独特情况。本章广泛讨论了流机器学习的需求和应用、监督流学习、无监督聚类流学习、无监督异常值学习、流学习中的评估技术以及用于评估的指标。本章末尾提供了一个详细的案例研究,说明了 MOA 框架的使用。所使用的数据集是电力(ELEC)。
第六章,概率图建模,表明许多现实世界问题可以通过在多维空间中对复杂联合概率分布进行编码来有效地表示。概率图模型提供了一种框架,用于在这种情况下表示、推理和有效学习。本章广泛讨论了概率概念、PGMs、贝叶斯网络、马尔可夫网络、图结构学习、隐马尔可夫模型和推理。本章末尾进行了一个基于现实世界数据集的详细案例研究。本案例研究中使用的工具是 OpenMarkov 和 Weka 的贝叶斯网络。数据集是 UCI 成人(Census Income)。
第七章,深度学习,如果今天在流行想象中有一个机器学习的超级明星,那就是深度学习,它在解决最复杂人工智能问题所使用的技巧中占据了主导地位。涵盖的主题广泛,包括神经网络、神经网络的问题、深度信念网络、受限玻尔兹曼机、卷积网络、长短期记忆单元、降噪自编码器、循环网络等。我们提供了一个详细的案例研究,展示了如何实现深度学习网络、调整参数和执行学习。我们使用 DeepLearning4J 和 MNIST 图像数据集。
第八章,文本挖掘与自然语言处理,详细介绍了在文本挖掘领域进行各种分析的技术、算法和工具。涵盖的主题广泛,包括文本挖掘的领域、文本挖掘所需的组件、文本数据的表示、降维技术、主题建模、文本聚类、命名实体识别和深度学习。案例研究使用了现实世界的非结构化文本数据(Reuters-21578 数据集),突出了主题建模和文本分类;所使用的工具是 MALLET 和 KNIME。
第九章,大数据机器学习 – 最终边疆,讨论了当今的一些最重要挑战。当数据量很大或以非常高的速度可用时,有哪些学习选项?如何处理可扩展性?涵盖的主题包括大数据集群部署框架、大数据存储选项、批量数据处理、批量数据机器学习、实时机器学习框架和实时流学习。在针对大数据批量处理和实时处理的详细案例研究中,我们选择了 UCI Covertype 数据集和机器学习库 H2O、Spark MLLib 和 SAMOA。
附录 A,线性代数,涵盖了线性代数的概念,旨在作为简要的复习。它在其覆盖范围内远非完整,但包含了对书中介绍的机器学习技术相关的一些重要概念的快速浏览。它包括向量、矩阵和基本的矩阵运算和属性、线性变换、矩阵逆、特征分解、正定矩阵和奇异值分解。
附录 B,概率,提供了一个关于概率的简要入门。它包括概率的公理、贝叶斯定理、密度估计、均值、方差、标准差、高斯标准差、协方差、相关系数、二项分布、泊松分布、高斯分布、中心极限定理和误差传播。
您需要为这本书准备什么
本书假设您在 Java 编程方面有一些经验,并对机器学习概念有基本的了解。如果您不符合这些条件,但仍然好奇并且有自我驱动力,请不要担心,继续阅读!对于那些有一些背景知识的人来说,这意味着您熟悉数据的基本统计分析以及监督学习和无监督学习中的概念。对于那些可能没有必要的数学知识或者必须挖掘记忆深处来回忆起某个公式或奇怪符号的人,请不要气馁。如果您喜欢挑战,附录中的简短入门可能就是您启动引擎所需的一切——一点坚持就能让您度过难关!对于那些从未接触过机器学习的人来说,第一章同样是为您写的,就像为那些需要复习的人一样——这是您全速投入并了解其全部内容的入门工具。您可以通过任何数量的在线资源来增强您的基础知识。最后,对于那些对 Java 一无所知的人,这里有一个秘密:本书中介绍的大多数工具都有强大的图形用户界面。其中一些包括类似向导的界面,使用起来非常简单,而且不需要任何 Java 知识。所以如果您是 Java 的新手,只需跳过需要编码的示例,学习如何使用基于 GUI 的工具即可!
这本书面向的对象
本书的主要受众是与数据打交道的专业人士,他们的职责可能包括数据分析、数据可视化或转换、机器学习模型的训练、验证、测试和评估——可能使用 Java 或基于 Java 的工具来执行预测、描述性或规范性分析。选择 Java 可能意味着个人偏好,因此可能需要一些在 Java 中编程的经验。另一方面,工作环境或公司政策可能限制第三方工具的使用,仅限于用 Java 编写的工具和一些其他工具。在第二种情况下,潜在读者可能没有 Java 编程经验。本书旨在针对这类读者,就像它针对他们的同事 Java 专家(最初提出该政策的人)一样。
可以通过具有两个属性的个人资料来定义一个次要受众:对机器学习的知识好奇心以及对概念、实用技术和工具的单一全面处理的渴望。这类读者的一个例子可以选择跳过数学和工具,仅专注于学习最常用的监督学习和无监督学习算法。另一个人可能会浏览第一章、第二章、第三章和第七章,完全跳过其他章节,并一头扎进工具——如果你想要快速让自己对客户所说的即将到来的数据集进行分析变得有用,这是一个完全合理的策略。重要的是,通过一些练习重现书中的实验,这将帮助你向专家提出正确的问题!或者,你可能想将这本书作为参考,快速查找亲和传播算法的详细信息(第三章,无监督机器学习技术),或者通过简要回顾方案(第七章,深度学习)来提醒自己 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 %
新术语和重要词汇以粗体显示。
注意
警告或重要注意事项会以这样的框出现。
小贴士
小贴士和技巧会像这样出现。
读者反馈
我们始终欢迎读者的反馈。让我们知道您对这本书的看法——您喜欢或不喜欢什么。读者反馈对我们来说很重要,因为它帮助我们开发出您真正能从中获得最大利益的标题。
要向我们发送一般反馈,请简单地发送电子邮件至<feedback@packtpub.com>,并在邮件主题中提及书籍的标题。
如果您在某个领域有专业知识,并且您有兴趣撰写或为书籍做出贡献,请参阅我们的作者指南,网址为www.packtpub.com/authors。
客户支持
现在,您已经是 Packt 书籍的骄傲拥有者,我们有一些可以帮助您充分利用购买的东西。
您可以通过以下步骤下载代码文件:
-
使用您的电子邮件地址和密码登录或注册我们的网站。
-
将鼠标指针悬停在顶部的支持标签上。
-
点击代码下载 & 错误清单。
-
在搜索框中输入书籍的名称。
-
选择您想要下载代码文件的书籍。
-
从下拉菜单中选择您购买此书的来源。
-
点击代码下载。
您也可以通过点击 Packt Publishing 网站上书籍网页上的代码文件按钮来下载代码文件。您可以通过在搜索框中输入书籍的名称来访问此页面。请注意,您需要登录您的 Packt 账户。
下载文件后,请确保您使用最新版本的软件解压缩或提取文件夹:
-
Windows 版本的 WinRAR / 7-Zip
-
Mac 版本的 Zipeg / iZip / UnRarX
-
Linux 版本的 7-Zip / PeaZip
书籍的代码包也托管在 GitHub 上,网址为github.com/mjmlbook/mastering-java-machine-learning。我们还有其他来自我们丰富图书和视频目录的代码包可供在github.com/PacktPublishing/找到。查看它们吧!
错误清单
尽管我们已经尽一切努力确保我们内容的准确性,但错误仍然可能发生。如果您在我们的某本书中发现了错误——可能是文本或代码中的错误——如果您能向我们报告这一点,我们将不胜感激。通过这样做,您可以节省其他读者的挫败感,并帮助我们改进此书的后续版本。如果您发现任何错误清单,请通过访问www.packtpub.com/submit-errata,选择您的书籍,点击错误清单提交表单链接,并输入您的错误清单详情。一旦您的错误清单得到验证,您的提交将被接受,错误清单将被上传到我们的网站或添加到该标题的错误清单部分。
要查看之前提交的勘误表,请访问www.packtpub.com/books/content/support,并在搜索字段中输入书籍名称。所需信息将显示在勘误部分。
盗版
在互联网上,版权材料盗版是一个跨所有媒体持续存在的问题。在 Packt,我们非常重视我们版权和许可证的保护。如果您在互联网上发现我们作品的任何非法副本,请立即提供位置地址或网站名称,以便我们可以追究补救措施。
请通过<copyright@packtpub.com>与我们联系,并提供涉嫌盗版材料的链接。
我们感谢您在保护我们作者和我们为您提供有价值内容的能力方面的帮助。
问题和建议
如果您在这本书的任何方面遇到问题,您可以通过<questions@packtpub.com>联系我们,我们将尽力解决问题。
第一章:机器学习概述
近年来,人工智能(AI)和机器学习在学术界和工业界都得到了复兴,尤其是机器学习。在过去十年中,人工智能取得了显著的成就,这些成就超越了该领域最初承诺以来在中间几年中从业者所取得的成就。
这些成功在很大程度上得益于处理日益增长的大量数据的迫切需求、深度学习领域研究人员不懈努力的关键算法进步,以及摩尔定律推动的原始计算能力的不断增长。在人工智能领域引领复苏的各个领域中,机器学习取得了显著的发展,并在众多领域找到了最广泛的应用。机器学习在帮助最高层级的商业复杂决策中的应用,以及它在提高如今已成为日常应用的准确性(如搜索、语音识别和手机上的个人助理)方面的巨大成功,使得其影响在家庭客厅和会议室中变得司空见惯。如今,不仅可以在科普科技媒体中找到对深度学习力量的狂热赞扬文章,还可以在主流媒体如《纽约时报》和《赫芬顿邮报》等地方找到。机器学习确实在相对较短的时间内变得无处不在。
一个普通的用户在日常活动中以多种方式遇到机器学习。大多数电子邮件服务提供商,包括雅虎和 Gmail,都为用户提供了自动将电子邮件分类到诸如垃圾邮件、垃圾邮件、促销等标题中的功能,这是通过文本挖掘(机器学习的一个分支)实现的。当在电子商务网站如www.amazon.com/上在线购物或从内容提供商如 Netflix 观看电影时,用户会收到所谓的推荐系统提供的其他产品和内容推荐,这是机器学习的另一个分支,作为一种有效的方式留住客户。
预测天气、估算房地产价格、预测选民投票率,甚至预测选举结果——所有这些都可以说是使用某种形式的机器学习来窥视未来。
随着数据量的不断增长以及能够通过学习这些数据来丰富我们生活的系统的承诺,对数据科学领域有限的专业人员技能的需求也在不断增长。这种需求对于在更流行的语言(如 Java、Python、R 和越来越流行的 Scala)中熟悉机器学习技术的受过良好训练的专家来说尤其迫切。幸运的是,多亏了开源社区中的数千名贡献者,这些语言都有丰富且快速增长的库、框架和教程集,使得最前沿的技术对任何有互联网连接和电脑的人来说都触手可及,这在很大程度上得益于 Java。Java 是这种工具和技术传播的重要载体,尤其是在大规模机器学习项目中,这得益于其在企业级部署中的成熟度和稳定性,以及可移植的 JVM 平台,更不用说多年来采用它的专业程序员大军了。因此,掌握今天劳动力中如此缺乏的技能将使任何有志于进入该领域的专业人士在市场上处于明显的优势地位。
也许你已经在你的专业工作中应用了机器学习技术,或者你可能只是对这个主题有业余爱好者的兴趣。如果你正在阅读这篇文章,很可能你已经能够轻松地将 Java 应用于你的意愿,但现在你感觉你准备好深入挖掘并学习如何在你的下一个数据科学项目中使用最好的开源 ML Java 框架。如果你确实是这样,那么这本书中的章节设计来做到这一切以及更多是多么幸运!
掌握一门学科,尤其是像机器学习这样具有明显应用性的学科,不仅需要理解其核心概念和熟悉其数学基础,还需要更多。与该主题的入门级处理不同,一本声称帮助你掌握该主题的书必须非常关注实践方面,同时介绍更多高级主题,这些主题可能会超出入门材料的范围。在我们开始磨练我们的技能之前,我们将用这一章来快速回顾我们已经知道的内容。对于有志于充分利用这本书的初学者(即使他们对这个主题几乎没有或没有先前的接触,但仍然决心从中获得最大利益),这是我们的建议:确保你不跳过本章的其余部分;相反,将其用作跳板,更深入地探索不熟悉的概念。如有必要,寻求外部资源。查阅维基百科。然后立即回到学习上来。
在本章的剩余部分,我们将回顾以下内容:
-
历史与定义
-
什么是非机器学习?
-
概念与术语
-
机器学习的重要分支
-
机器学习中的不同数据类型
-
机器学习的应用
-
机器学习面临的问题
-
大多数机器学习项目中使用的元过程
-
本书将使用的一些知名工具、API 和资源的详细信息
机器学习 - 历史与定义
给出一个确切的历史很难,但我们今天使用的机器学习的定义最早可以追溯到 19 世纪 60 年代。在雷内·笛卡尔的《方法谈》中,他提到了自动机并说:
因为我们可以很容易地理解一个机器的构成,使其能够说出话语,甚至对它施加的某些物理动作做出响应,从而改变其器官;例如,如果触摸特定部位,它可能会问我们想对它说什么;如果在另一个部位,它可能会惊呼它受伤了,等等。
注意
www.earlymoderntexts.com/assets/pdfs/descartes1637.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 年写道:"机器学习是研究计算机在没有明确编程的情况下获得学习能力的一个领域。"。
近期,汤姆·米切尔给出了机器学习的更精确定义:"如果一个计算机程序在任务 T 上,通过性能指标 P,从经验 E 中学习,那么它的性能随着经验 E 的提高而提高。"
机器学习与多个领域有关:
-
统计学: 它使用数据抽样、估计、假设检验、学习理论和基于统计的建模等元素,仅举几个例子。
-
算法与计算: 它使用了来自基础计算机科学的基本概念,如搜索、遍历、并行化、分布式计算等。
-
数据库与知识发现: 由于其能够以各种格式存储、检索和访问信息的能力。
-
模式识别: 由于其能够从数据中找到有趣的模式以进行探索、可视化和预测的能力。
-
人工智能: 虽然它被认为是人工智能的一个分支,但它也与其他分支有关,例如启发式、优化、进化计算等。
什么是机器学习?
认识到与机器学习有关但本身不能被视为机器学习一部分的领域很重要。某些学科可能在一定程度上重叠,但机器学习的基本原理是相当独特的:
-
商业智能(BI)和报告:报告关键绩效指标(KPIs),查询 OLAP 进行切片、切块和深入数据,仪表板等,这些都是 BI 的核心组件,并不等同于机器学习。
-
存储和 ETL:数据存储和 ETL 是任何机器学习过程中的关键元素,但它们本身并不等同于机器学习。
-
信息检索、搜索和查询:根据搜索标准或索引检索数据或文档的能力,这是信息检索的基础,并不真正等同于机器学习。许多形式的机器学习,如半监督学习,可以依赖于相似数据的搜索来进行建模,但这并不将搜索视为机器学习。
-
知识表示和推理:为了执行复杂任务(如本体、专家系统和语义网)而表示知识并不等同于机器学习。
机器学习——概念和术语
在本节中,我们将描述在机器学习中通常使用的不同概念和术语:
-
数据或数据集:机器学习的基础在于理解数据。数据或数据集通常指用于机器学习的结构化或非结构化格式的可用内容。结构化数据集具有特定的格式,非结构化数据集通常以某种自由流动的文本形式存在。数据可以以各种存储类型或格式存在。在结构化数据中,每个被称为实例、示例或行的元素都遵循预定义的结构。数据还可以按大小分类:小型或中型数据有几百到几千个实例,而大数据指的是大量数据,通常在数百万或数十亿,无法使用常见设备存储或访问,也无法适应这些设备的内存。
-
特征、属性、变量或维度:在结构化数据集中,如前所述,存在具有自身语义和数据类型的预定义元素,这些元素被统称为特征、属性、指标、指标、变量或维度。
-
数据类型:在许多机器学习算法或技术中,之前定义的特征需要某种形式的类型化。最常用的数据类型如下:
-
分类或名义:这表示数据集中存在的定义良好的类别或值。例如,眼睛颜色——黑色、蓝色、棕色、绿色、灰色;文档内容类型——文本、图像、视频。
-
连续或数值:这表示数据字段具有数值性质。例如,通过浴室秤测量的一个人的体重,传感器测量的温度读数,或信用卡账户的月美元余额。
-
有序:这表示数据可以按某种方式排序。例如,服装尺寸——小号、中号、大号;拳击重量级别:重量级、轻重量级、中量级、轻量级和雏量级。
-
-
目标或标签:数据集中用于从训练数据中学习并在未见数据集中预测的特征或特征集,被称为目标或标签。在某些领域也使用“地面真实”这个术语。标签可以具有之前指定的任何形式,即分类的、连续的或序数的。
-
机器学习模型:每个机器学习算法,基于从数据集中学习到的内容,保持其学习状态以预测或对未来或未见数据提供见解,这被称为机器学习模型。
-
抽样:数据抽样是机器学习中的一个基本步骤。抽样意味着从总体中选择一个子集的例子,目的是将(较小的)样本中观察到的行为视为(较大的)总体行为的代表。为了使样本能够代表总体,必须小心选择样本的方式。通常,总体由在问题域中具有感兴趣属性的所有对象组成,例如,所有有资格参加大选的人,或未来四年内所有潜在的汽车拥有者。由于通常收集总体中所有对象的资料是不切实际的(或不可能的),因此选择一个合适的子集用于分析。抽样过程中的一个关键考虑因素是样本相对于总体是无偏的。以下是基于概率的抽样类型:
-
均匀随机抽样:这指的是在均匀分布的总体上进行的抽样,即每个对象被选中的概率相等。
-
分层随机抽样:这指的是当数据可以分类为多个类别时使用的抽样方法。在这种情况下,为了确保样本中代表所有类别,根据这些分类将总体划分为不同的层,并且每个层按其在总体中类别的比例进行抽样。当总体密度在类别之间变化时,分层抽样很常见,并且比较这些类别时需要具有相同的统计能力。当已知不同的群体以显著不同的方式投票时,政治民意调查通常涉及分层抽样。在随机样本中每个群体的不成比例的代表性可能导致民意调查结果出现重大误差。当我们控制人口统计学因素时,我们可以避免对其他群体过度抽样。
-
聚类抽样:有时在研究的总体中存在自然群体,每个群体都代表了整个总体。一个例子是跨越许多地理区域的数据库。在聚类抽样中,你随机选择一组群体,然后从每个群体中随机抽取样本来构建完整的数据样本。这种抽样可以降低数据收集的成本,同时不会损害总体分布的保真度。
-
系统抽样:当抽样框架(将有限集合的对象视为总体,并作为抽样数据来源,例如,按标题字母顺序排列的维基百科文章集合)中存在某种顺序时,会使用系统抽样或间隔抽样。如果样本是通过从随机对象开始,跳过常数k个对象后选择下一个对象来选择的,那么这种抽样称为系统抽样。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(属性-关系文件格式)文件。它由一个标题组成,提供有关特征或属性及其数据类型的信息,然后是数据标签之后的实际逗号分隔数据。数据集有五个特征,即outlook、temperature、humidity、windy和play。特征outlook和windy是分类特征,而humidity和temperature是连续的。特征play是目标,也是分类的。
机器学习 – 类型与亚型
现在我们将探讨机器学习的不同子类型或分支。尽管以下列表并不全面,但它涵盖了最知名的类型:
-
监督学习:这是机器学习中最受欢迎的分支,它涉及从标记数据中学习。如果标签的数据类型是分类的,它就变成了分类问题;如果是数字的,它就被称为回归问题。例如,如果使用数据集的目标是检测欺诈,欺诈具有真或假的分类值,我们处理的是一个分类问题。另一方面,如果目标是预测房屋的最佳上市价格,这是一个数值美元值,问题就是一个回归问题。下图展示了需要使用分类技术(如适合线性可分数据的逻辑回归)的标记数据,也就是说,当存在一条可以干净地分离两个类别的线时。对于可能线性可分的高维数据,人们谈论的是分离超平面:
线性可分数据
一个不是线性可分的数据集的例子。
这种类型的问题需要分类技术,例如支持向量机。
-
无监督学习:当没有给出标签时,理解数据并探索数据以构建机器学习模型被称为无监督学习。聚类、流形学习、异常值检测是这一主题下的技术,这些技术将在第三章《无监督机器学习技术》中详细讨论。需要无监督学习解决的问题有很多。根据购买行为对客户进行分组就是一个例子。在生物数据的情况下,可以使用无监督学习技术根据相似的基因表达值对组织样本进行聚类。
下图展示了具有固有结构的数据,这些结构可以通过无监督学习技术,如 k-means,揭示为不同的聚类:
数据中的聚类
使用不同的技术来检测全局异常值——相对于整个数据集而言异常的例子,以及局部异常值——在其邻域中不匹配的例子。在下图中,为两个特征数据集展示了局部和全局异常值的概念:
局部和全局异常值
-
半监督学习:当数据集只有一些标记数据以及大量未标记数据时,从这样的数据集中进行学习被称为半监督学习。例如,在处理旨在检测欺诈的金融数据时,可能会有大量未标记数据,而只有少量已知的欺诈和非欺诈交易。在这种情况下,可以应用半监督学习。
-
图挖掘:挖掘表示为图结构的数据被称为图挖掘。它是社交网络分析以及不同生物信息学、网络挖掘和社区挖掘应用中的结构分析的基础。
-
概率图建模和推理:学习和利用以图模型表示的特征之间的条件依赖结构属于概率图建模的分支。贝叶斯网络和马尔可夫随机场是这类模型的两个类别。
-
时间序列预测:这是一种学习形式,其中数据具有明显的时序行为,并且与时间的关系被建模。一个常见的例子是在金融预测中,某个特定领域的股票表现可能是预测模型的目标。
-
关联分析:这是一种学习形式,其中数据以项集或购物篮的形式存在,并建立关联规则来探索和预测项目之间的关系。关联分析中的一个常见例子是学习客户在访问杂货店时购买的最常见项目之间的关系。
-
强化学习:这是一种学习形式,其中机器根据从环境中获得的奖励或惩罚形式的反馈来最大化性能。一个著名的例子是 AlphaGo,这是谷歌开发的一种机器,在 2016 年 3 月决定性地击败了世界围棋冠军李世石。使用奖励和惩罚方案,该模型首先在监督学习阶段对数百万个棋盘位置进行训练,然后在强化学习阶段自我对弈,最终变得足够好,能够战胜最佳人类选手。
注意
www.theatlantic.com/technology/archive/2016/03/the-invisible-opponent/475611/ -
流学习或增量学习:以监督、无监督或半监督方式从实时或伪实时流数据中进行学习被称为流学习或增量学习。从不同类型的工业系统中学习传感器的行为以将其分类为正常和异常的应用需要实时反馈和实时检测。
机器学习中使用的数据集
要从数据中学习,我们必须能够理解和管理所有形式的数据。数据来源于许多不同的来源,因此,数据集在结构上可能差异很大,或者几乎没有结构。在本节中,我们以常见示例为依据,对数据集进行高级分类。
根据其结构或结构的缺失,数据集可以分为以下几种:
-
结构化数据:具有结构化数据的数据集更适合作为大多数机器学习算法的输入。数据以记录或行形式存在,遵循一个已知的格式,具有特征,这些特征可以是表格中的列或由分隔符或标记分隔的字段。记录或实例之间没有明确的关系。数据集主要在平面文件或关系数据库中可用。以下图所示的银行交易记录是一个结构化数据的例子:
带有欺诈标签的金融卡交易数据
-
交易或市场数据:这是一种特殊形式的结构化数据,其中每个条目对应一组项目。市场数据集的例子包括不同客户购买的杂货清单或客户观看的电影,如下表所示:
来自杂货店的商品市场数据集
-
非结构化数据:非结构化数据通常不以已知的格式存在,与结构化数据不同。文本数据、图像数据和视频数据是非结构化数据的不同格式。通常,需要某种形式的转换来从这些数据形式中提取特征,以便将其转换为结构化数据集,从而应用传统的机器学习算法。
样本文本数据,没有可识别的结构,因此是非结构化的。将垃圾邮件与正常消息(ham)区分开来是一个二元分类问题。在这里,通过它们的标签(每个数据实例中的第二个标记)区分真正的阳性(垃圾邮件)和真正的阴性(ham)。SMS 垃圾邮件收集数据集(UCI 机器学习库),来源:来自联邦大学圣卡洛斯分校的 Tiago A. Almeida。
-
序列数据:序列数据具有明确的“顺序”概念。这种顺序可以是时间序列数据中特征与时间变量之间的关系,或者是在基因组数据集中以某种形式重复的符号。序列数据的两个例子是天气数据和基因组序列数据。以下图显示了时间和传感器级别之间的关系:
来自传感器数据的时间序列
考虑了三个基因组序列,以展示这三个基因组序列中
CGGGT和TTGAAAGTGGTG的重复情况:DNA 的基因组序列作为符号序列。
-
图数据:图数据的特点是数据中实体之间存在关系,形成图结构。图数据集可以是结构化记录格式或非结构化格式。通常,图关系必须从数据集中挖掘出来。保险领域的索赔可以被认为是包含相关索赔细节的结构化记录,索赔人通过地址、电话号码等相关联。这可以看作是图结构。以万维网为例,我们有网页作为非结构化数据,包含链接,以及可以使用网页链接构建的网页之间的关系图,从而产生了今天最广泛挖掘的图数据集之一:
将保险索赔数据转换为表示车辆、驾驶员、保单和地址之间关系的图结构
机器学习应用
由于机器学习在人类努力的不同领域的快速增长使用,任何试图列出在不同行业中使用的某些形式的机器学习的典型应用都必须是不完整的。尽管如此,在本节中,我们按领域和所采用的学习类型列出了一组广泛的机器学习应用:
| 领域/行业 | 应用 | 机器学习类型 |
|---|---|---|
| 金融 | 信用风险评估、欺诈检测和反洗钱 | 监督学习、无监督学习、图模型、时间序列和流学习 |
| 网络 | 在线活动、健康监控和广告定位 | 监督学习、无监督学习和半监督学习 |
| 医疗保健 | 基于证据的医学、流行病学监控、药物事件预测和索赔欺诈检测 | 监督学习、无监督学习、图模型、时间序列和流学习 |
| 物联网(IoT) | 网络安全、智能道路和传感器健康监控 | 监督学习、无监督学习、半监督学习和流学习 |
| 环境 | 天气预报、污染建模和水质量测量 | 时间序列、监督学习、无监督学习、半监督学习和流学习 |
| 零售 | 库存、客户管理和推荐、布局和预测 | 时间序列、监督学习、无监督学习、半监督学习和流学习 |
机器学习的应用
机器学习中的实际问题
在处理需要机器学习的问题时,理解约束的性质和可能出现的次优条件是必要的。在接下来的章节讨论中,我们将解决这些问题性质、它们存在的影响以及处理它们的方法。在此,我们简要介绍我们面临的实际问题:
-
数据质量和噪声:缺失值、重复值、由于人为或仪器记录错误导致的错误值以及格式错误是在构建机器学习模型时需要考虑的一些重要问题。不处理数据质量可能导致模型错误或不完整。在下一章中,我们将强调这些问题以及一些通过数据清洗克服这些问题的策略。
-
不平衡数据集:在许多现实世界的数据集中,训练数据中的标签之间存在不平衡。这种数据集的不平衡会影响学习选择、算法选择、模型评估和验证过程。如果不采用正确的技术,模型可能会出现大的偏差,学习效果不佳。下一章将详细介绍各种使用元学习过程的技术,如成本敏感学习、集成学习、异常检测等,这些技术可以应用于这些情况。
-
数据量、速度和可扩展性:通常,大量数据以原始形式或高速实时流数据的形式存在。由于算法或硬件限制或两者的组合,从整个数据中学习变得不可行。为了将数据集的大小减少到适合可用资源,必须进行数据采样。采样可以通过多种方式进行,每种采样形式都会引入偏差。必须通过采用各种技术,如分层采样、变化样本大小和在不同集合上增加实验规模,来验证模型对样本偏差的适应性。使用大数据机器学习也可以克服数据量和采样偏差。
-
过拟合:预测模型的核心问题之一是模型泛化不足,被训练数据拟合得“太好”。这导致模型在应用于未见数据时表现不佳。后续章节中描述了各种克服这些问题的技术。
-
维度诅咒:在处理高维数据时,即具有大量特征的数据集,机器学习算法的可扩展性成为一个严重的问题。向数据添加更多特征的问题之一是它引入了稀疏性,即在特征空间的单位体积中平均数据点更少,除非特征数量的增加伴随着训练示例数量的指数级增加。这可能会损害许多方法,如基于距离的算法的性能。添加更多特征也可能降低学习者的预测能力,如以下图所示。在这种情况下,需要更合适的算法,或者必须降低数据的维度。
在分类学习中体现的维度诅咒,其中添加更多特征会降低分类器的性能。
机器学习 - 角色和流程
将机器学习应用于大型问题的任何努力都需要多个角色的协作,每个角色都遵循一套旨在确保严谨性、效率和鲁棒性的系统流程。以下角色和流程确保了在开始时明确界定努力的目标,并在数据分析、数据抽样、模型选择、部署和性能评估等方面采用正确的方法论——所有这些都是进行一致性和可重复性分析的综合框架的一部分。
角色
参与者在每个步骤中扮演特定的角色。这些责任在以下四个角色中得以体现:
-
业务领域专家:了解问题领域的主题专家
-
数据工程师:参与数据的收集、转换和清洗
-
项目经理:流程顺利运行的监督者
-
数据科学家或机器学习专家:负责应用描述性或预测性分析技术
流程
CRISP(跨行业标准流程)是一个知名的高级数据挖掘流程模型,它定义了分析流程。在本节中,我们对 CRISP 流程添加了一些自己的扩展,使其更加全面,更适合使用机器学习进行数据分析。整个迭代过程在以下示意图中展示。我们将在本节中详细讨论流程的每一步。
-
识别业务问题:理解项目或流程的目标和最终目标是第一步。这通常由业务领域专家与项目经理和机器学习专家共同完成。在数据可用性、格式、规格、收集、投资回报率、商业价值、交付成果等方面,最终目标是什么?所有这些问题都在这个阶段讨论。明确地识别目标,并在可能的情况下以可衡量的术语进行,例如节省的金额、找到预定义数量的异常或聚类,或者预测不超过一定数量的假阳性等,是这个阶段的重要目标。
-
机器学习映射:下一步是将业务问题映射到前文讨论的机器学习类型之一或多个。这一步骤通常由机器学习专家执行。在这个过程中,我们确定是否只使用一种学习形式(例如,监督学习、无监督学习、半监督学习)或者混合形式更适合项目。
-
数据收集:获取处理所需格式的原始数据,并遵循既定的规范,这是下一步。这一步通常由数据工程师执行,可能需要处理一些基本的 ETL 步骤。
-
数据质量分析:在这一步中,我们对数据进行缺失值、重复值等分析,对分类和连续类型进行基本统计分析,以及类似任务来评估数据质量。数据工程师和数据科学家可以共同执行这些任务。
-
数据采样和转换:确定数据是否需要划分为样本,并执行不同大小的数据采样以进行训练、验证或测试——这些是在这一步执行的任务。它包括采用不同的采样技术,如对训练数据集进行过采样和随机采样,以便算法能够有效地学习,尤其是在标签数据高度不平衡的情况下。数据科学家参与这项任务。
-
特征分析和选择:这是一个结合建模的迭代过程,在许多任务中确保对特征进行评估,以确定它们的区分度或有效性。这可能包括寻找新的特征、转换现有特征、处理前面提到的数据质量问题、选择特征子集等,在建模过程之前进行。数据科学家通常负责这项任务。
-
机器学习建模:这是一个基于数据特征和学习类型的迭代过程,针对不同的算法进行工作。它涉及不同的步骤,如生成假设、选择算法、调整参数,并通过评估结果来找到符合标准模型的步骤。数据科学家执行这项任务。
-
模型评估:虽然这一步在一定程度上与前面的所有步骤都有关联,但它与业务理解阶段和机器学习映射阶段更为紧密相关。评估标准必须以某种方式映射到业务问题或目标。每个问题/项目都有自己的目标,无论是提高真正阳性、减少假阳性、寻找异常簇或行为,还是分析不同簇的数据。根据学习技术,使用不同的技术来隐式或显式地衡量这些目标。数据科学家和业务领域专家通常参与这一步骤。
-
模型选择和部署:根据评估标准,选择一个或多个模型——可以是独立的或作为集成——。模型的部署通常需要解决几个问题:运行时可扩展性措施、环境的执行规范和审计信息等。基于学习的关键参数捕获的审计信息是流程的一个基本部分。它确保模型性能可以跟踪和比较,以检查模型的老化和退化。保存关键信息,如训练数据量、日期、数据质量分析等,与学习类型无关。监督学习可能涉及保存混淆矩阵、真正例率、假正例率、ROC 曲线下面积、精确度、召回率、错误率等。无监督学习可能涉及聚类或异常评估结果、聚类统计等。这是数据科学家和项目经理的领域。
-
模型性能监控:这项任务涉及定期跟踪模型性能,根据其评估的标准,如真正例率、假正例率、性能速度、内存分配等。衡量这些指标与训练模型性能连续评估之间的偏差至关重要。随着时间的推移,偏差和偏差容忍度将提供有关重复过程或调整模型的信息。数据科学家负责这一阶段。
如前图所示,整个过程是一个迭代的过程。在部署了一个或一组模型之后,商业和环境因素可能会以影响解决方案性能的方式发生变化,需要重新评估业务目标和成功标准。这又把我们带回了循环中。
机器学习 – 工具和数据集
要熟练掌握成功完成任何规模或复杂度机器学习项目的必要技术,一个可靠的方法是通过使用广泛使用的数据集进行实验,熟悉可用的工具和框架,正如后续章节所展示的。以下列表提供了一个对最流行的 Java 框架的简要概述。后续章节将包括您将使用以下工具进行的实验:
-
RapidMiner:一个领先的分析平台,RapidMiner 提供多种产品,包括 Studio,一个用于流程的可视化设计框架,Server,一个通过允许共享数据源、流程和实践来促进协作环境的产品,以及 Radoop,一个具有将部署和执行转换为 Hadoop 生态系统功能的系统。RapidMiner Cloud 提供了一个基于云的存储库和按需计算能力。
-
许可证:GPL(社区版)和商业版(企业版)
-
网站:
rapidminer.com/
-
-
Weka: 这是一个综合性的开源 Java 工具集,用于数据挖掘和构建机器学习应用,拥有自己的公共数据集集合。
-
许可证: GPL
-
-
Knime: KNIME 分析平台(我们被鼓励以无声的 k 发音,即“naime”)是用 Java 编写的,提供了一个集成的工具集、丰富的算法集和可视化的工作流程,无需标准编程语言(如 Java、Python 和 R)即可进行数据分析。然而,人们可以用 Java 和其他语言编写脚本以实现 KNIME 中未本地提供的功能。
-
许可证: GNU GPL v3
-
网站:
www.knime.org/
-
-
Mallet: 这是一个用于 NLP 的 Java 库。它提供文档分类、序列标记、主题建模以及其他基于机器学习的文本应用,以及用于任务管道的 API。
-
许可证: 公共公共许可证版本 1.0 (CPL-1)
-
-
Elki: 这是一个以研究为导向的 Java 软件,主要专注于使用无监督算法进行数据挖掘。它通过使用改进多维数据访问性能的数据索引结构,实现了高性能和可扩展性。
-
许可证: AGPLv3
-
-
JCLAL: 这是一个用于主动学习的 Java 类库,是一个开发主动学习方法的开源框架,该方法是处理从标记和无标记数据混合中学习预测模型(半监督学习是另一个领域)的领域之一。
-
许可证: GNU 通用公共许可证版本 3.0 (GPLv3)
-
-
KEEL: 这是一个用 Java 编写的开源软件,主要用于设计实验,特别适合于实现基于进化学习和软计算技术的数据挖掘问题。
-
许可证: GPLv3
-
网站:
www.keel.es/
-
-
DeepLearning4J: 这是一个用于 Java 和 Scala 的分布式深度学习库。DeepLearning4J 与 Spark 和 Hadoop 集成。异常检测和推荐系统是适合通过深度学习技术生成的模型的应用案例。
-
许可证: Apache 许可证 2.0
-
-
Spark-MLlib: (包含在 Apache Spark 发行版中)MLlib 是 Spark 中包含的机器学习库,主要用 Scala 和 Java 编写。自从 Spark 中引入了 Data Frames,推荐使用基于 Data Frames 编写的
spark.ml包,而不是原始的spark.mllib包。MLlib 包括对分析过程所有阶段的支持,包括统计方法、分类和回归算法、聚类、降维、特征提取、模型评估以及 PMML 支持,等等。MLlib 的另一个方面是支持使用管道或工作流。MLlib 可从 R、Scala 和 Python 访问,除了 Java 之外。-
许可证: Apache 许可证 v2.0
-
-
H2O: H2O 是一个基于 Java 的库,除了 Java 之外,还支持 R 和 Python 的 API。H2O 还可以在 Spark 上作为其自己的应用程序 Sparkling Water 运行。H2O Flow 是一个基于网页的交互式环境,在单个笔记本样式的文档中包含可执行单元格和丰富的媒体。
-
许可证: Apache 许可证 v2.0
-
网站:
www.h2o.ai/
-
-
MOA/SAMOA: 针对从数据流中进行机器学习,SAMOA 提供了流处理平台的插件式接口,截至写作时,SAMOA 是 Apache 孵化器项目。
-
许可证: Apache 许可证 v2.0
-
-
Neo4j: Neo4j 是一个用 Java 和 Scala 实现的开源 NoSQL 图形数据库。正如我们将在后面的章节中看到的,图分析有多种用途,包括匹配、路由、社交网络、网络管理和更多。Neo4j 支持完全 ACID 事务。
-
许可证: 社区版—GPLv3 和企业版—包括商业和教育等多个选项 (
neo4j.com/licensing/) -
网站:
neo4j.com/
-
-
GraphX: 这包含在 Apache Spark 发行版中。GraphX 是 Spark 的图形库。API 提供了对查看和操作图结构以及一些图算法的广泛支持,例如 PageRank、连通组件和三角形计数。
-
许可证: Apache 许可证 v2.0
-
-
OpenMarkov: OpenMarkov 是一个用于编辑和评估概率图模型(PGM)的工具。它包括一个用于交互式学习的图形用户界面。
-
许可证: EUPLv1.1 (
joinup.ec.europa.eu/community/eupl/og_page/eupl)
-
-
Smile: Smile 是一个针对 JVM 的机器学习平台,拥有丰富的算法库。其功能包括自然语言处理(NLP)、流形学习、关联规则、遗传算法以及一套用于可视化的多功能工具。
-
许可证: Apache 许可证 2.0
-
数据集
许多公开可用的数据集极大地促进了数据科学的研究和学习。以下列出的数据集中,有一些是广为人知的,多年来被众多研究人员用来作为他们方法的基准。不断有新的数据集被提供出来,以满足不同建模者和用户群体的需求。大多数数据集来自不同领域的现实世界数据。本卷中的练习将使用此列表中的几个数据集。
-
UC Irvine (UCI) 数据库: 由加州大学欧文分校(UCI)机器学习与智能系统中心维护的 UCI 数据库是一个包含约 350 个不同大小数据集的目录,从几十个到超过四千万条记录,以及最多三百万个属性,包括多元文本、时间序列和其他数据类型。(
archive.ics.uci.edu/ml/index.html) -
Tunedit: (
tunedit.org/) 这提供了 Tunedit 挑战和进行可重复数据挖掘实验的工具。它还提供了一个举办数据竞赛的平台。 -
Mldata.org: (
mldata.org/) 由 PASCAL 2 组织支持,该组织汇集了欧洲和世界各地的研究人员和学生,mldata.org 主要是一个用户贡献的数据集存储库,鼓励研究人员群体之间进行数据和解决方案的共享,以帮助实现创建可重复解决方案的目标。 -
KDD 挑战数据集: (
www.kdnuggets.com/datasets/index.html) KDNuggets 聚合了来自广泛领域的多个数据集存储库。 -
Kaggle: 被誉为“数据科学之家”,Kaggle 是领先的数据科学竞赛平台,也是过去竞赛和用户提交的数据集的存储库。
摘要
尽管机器学习是一个相对较新的领域,但它已经展示了令人印象深刻的成功。随着 Java 资源的普遍存在,Java 的平台独立性以及 Java 中 ML 框架的选择,使用 Java 进行机器学习的卓越技能在当今市场上是一种高度渴望的资产。
机器学习以某种形式存在——至少在思考者的想象中,一开始就是如此——已经很长时间了。然而,最近的发展在许多日常生活的领域产生了革命性的影响。机器学习与统计学、人工智能以及几个其他相关领域有很多共同之处。虽然一些数据管理、商业智能和知识表示系统也可能与数据在每个系统中的核心作用有关,但它们通常不与机器学习领域中体现的数据学习原则相关联。
任何关于机器学习的讨论都会假设对数据及其数据类型有所了解。它们是分类的、连续的还是有序的?数据特征是什么?目标是什么,哪些是预测因子?可以使用哪些采样方法——均匀随机、分层随机、聚类或系统抽样?模型是什么?我们看到了一个包含分类和连续特征的 ARFF 格式的天气数据示例集。
机器学习的类型包括监督学习,当有标记数据时最常见,无监督学习当没有标记数据时,以及半监督学习当我们有两者混合时。接下来的章节将详细介绍这些,以及图挖掘、概率图建模、深度学习、流学习和大数据学习。
数据以多种形式存在:结构化、非结构化、事务性、顺序性和图。我们将在本书后面的练习中使用不同结构的数据。
领域列表和不同类型的机器学习应用不断增长。本综述介绍了最活跃的领域和应用。
理解并有效地处理实际问题,如噪声数据、倾斜数据集、过拟合、数据量和维度诅咒,是成功项目的关键——这也是每个项目在其挑战中的独特之处。
使用机器学习的分析是一个涉及多个角色和明确流程的协作努力。为了获得一致和可重复的结果,采用这里概述的增强 CRISP 方法论至关重要——从理解业务问题到数据质量分析、建模和模型评估,最后到模型性能监控。
数据科学从业者有幸拥有一个丰富且不断增长的公共数据集目录,以及 Java 和其他语言中不断增加的机器学习框架和工具集。在接下来的章节中,你将了解几个数据集、API 和框架,以及高级概念和技术,以帮助你掌握机器学习所需的一切。
准备好了吗?那么,我们就继续吧!
第二章. 实际应用中的现实世界监督学习
从带有明显目标或标签的观察中学习的能力,通常是为了对未见数据做出预测,这被称为监督机器学习。如果目标是类别,则问题属于分类;如果目标是数值,则称为回归。实际上,所尝试的是推断将数据映射到目标的功能。监督机器学习在广泛的机器学习应用中被广泛使用,无论是有标签数据可用还是标签可以手动添加。
监督机器学习的核心假设是,从训练数据中学习到的模式将在未见数据中表现出来。
在本章中,我们将讨论在训练模型之前用于探索、分析和预处理数据的步骤。然后,我们将介绍从简单的线性模型到复杂的集成模型的不同建模技术。我们将展示不同的评估指标和验证标准,这些标准使我们能够比较模型性能。一些讨论伴随着简短的数学解释,这有助于更精确地表达概念并激发更多数学倾向读者的兴趣。在本章中,我们将重点关注分类作为监督学习方法,但原则同样适用于分类和回归,这是监督学习的两个广泛应用。
从本章开始,我们将介绍工具来帮助说明每个章节中提出的概念是如何用于解决机器学习问题的。没有什么比将新学的材料直接应用于现实世界问题更能加强对新材料的理解了。在这个过程中,我们往往比仅仅被动吸收理论更能获得更清晰、更相关的理解。如果学习新工具的机会是学习的一部分,那就更好了!为了达到这个目标,我们将介绍一个大多数数据科学从业者都熟悉的数据集,并使用它来解决一个分类问题,同时突出引导解决方案的过程和方法。
在本章中,我们将使用 RapidMiner 和 Weka 来构建从单个知名数据集中学习的过程。工作流程和代码可在网站上供读者下载、执行和修改。
RapidMiner 是一个基于 GUI 的 Java 框架,它使得在工具内部从头到尾进行数据科学项目变得非常容易。它有一个简单的拖放界面来构建工作流程,用于摄取和清理数据,探索和转换特征,使用广泛的机器学习算法进行训练,进行验证和模型评估,将最佳模型应用于测试数据,等等。它是学习如何使流程的各个部分协同工作并快速产生结果的一个优秀工具。Weka 是另一个基于 GUI 的框架,它有一个我们将用于说明执行分析所需的更多编码的 Java API。
本章我们将涵盖的主要主题包括:
-
数据质量分析
-
描述性数据分析
-
可视化分析
-
数据转换和预处理
-
数据采样
-
特征相关性分析和降维
-
模型构建
-
模型评估、评估和比较
-
案例研究—马绞痛分类
形式描述和符号
我们希望介绍一些用于监督学习中使用的术语的符号和形式定义。在不指定的情况下,我们将遵循这种符号贯穿本书的其余部分,并在遇到新概念时适当扩展。这种符号将提供一个精确和一致的语言来描述术语,并使对主题的理解更加快速和高效。
-
实例:每个观察都是数据实例。通常变量 X 用于表示输入空间。每个数据实例有许多变量(也称为特征),被称为 x(用粗体表示的向量表示)的维度为 d,其中 d 表示每个实例中的变量或特征或属性的数量。特征表示为 x = (x[1],x[2],…x[d])^T,其中每个值在它是数值时对应于特征值。
-
标签:标签(也称为目标)是感兴趣的因变量,通常用 y 表示。在 分类 中,标签的值是问题域中定义良好的类别;它们不需要是数值或可以排序的事物。在 回归 中,标签是实数值。
-
二元分类,其中目标只取两个值,在数学上表示为:
y ∈ {1,–1}
-
回归,其中目标可以取实数域内的任何值,表示为:
-
数据集:通常,数据集用 D 表示,由单个数据实例及其标签组成。实例通常表示为集合 {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[n])},其中
用于实值特征。
数据质量分析
从质量较差的数据中可以学习到的东西有限。质量问题的因素可能包括,但不仅限于,噪声数据、缺失值和标签错误。因此,第一步是理解我们面前的数据,以便我们确定如何解决任何数据质量问题。异常值仅仅是噪声,还是表明人口中有有趣的异常?对于所有特征,缺失数据是否应该以相同的方式处理?稀疏特征应该如何处理?这些问题以及类似的问题在最初就显现出来。
如果我们很幸运,我们会收到一个清洗过的、准确标记的数据集,并附带描述数据元素、数据的血统以及是否对数据进行过任何转换的文档。这样的数据集就可以准备好按照数据采样部分描述的方法分成训练、验证和测试样本。然而,如果数据没有清洗并且不适合用于我们的目的,我们必须在采样开始之前以原则性的方式准备数据。(数据分区的意义将在本章的“训练、验证和测试集”部分中解释)。
在接下来的章节中,我们将讨论在分析特征之前所需的数据质量分析和转换步骤。
描述性数据分析
应对以下特征进行分析和总结的完整数据样本(包括训练、验证和测试)。在数据尚未分成训练、验证和测试的情况下,数据转换的任务需要确保样本具有相似的特征和统计信息。这对于确保训练的模型可以泛化到未见过的数据至关重要,正如我们将在数据采样部分所学到的。
基本标签分析
分析的第一步是理解不同集合以及整体数据中标签的分布。这有助于确定例如目标变量的分布是否存在不平衡,以及这种不平衡是否在所有样本中一致。因此,第一步通常是找出训练集和测试集中每个类别的例子数量。
基本特征分析
下一步是计算每个特征的统计信息,例如
-
唯一值的数量
-
缺失值的数量:可能包括按不同缺失值代理(NA、null、?等)分组的计数。
-
对于分类:这是跨特征类别的计数,按标签类别跨特征类别的计数,最频繁出现的类别(众数),按标签类别的众数等。
-
对于数值:最小值、最大值、中位数、标准差、方差等。
特征分析提供了基本的见解,这些见解可以作为缺失值和噪声的有用指标,这些缺失值和噪声可能会影响学习过程或算法的选择。
可视化分析
数据的可视化是一个广泛的话题,它是在机器学习和数据挖掘领域不断发展的一个领域。我们只将涵盖一些有助于我们在实践中分析数据的可视化重要方面。
单变量特征分析
这里的目标是每次可视化一个特征,与标签相关。使用的技术如下:
分类特征
堆叠条形图是一种简单的方式来展示每个特征类别在标签中的分布,当问题是一类分类时。
连续特征
直方图和箱线图是连续特征的两种基本可视化技术。
直方图有预定义的区间,其宽度要么是固定的间隔,要么是基于某种用于分割特征值全范围的计算。然后计算每个区间内的数据实例数量,并根据这个计数调整区间的身高。直方图有各种变体,如相对直方图或基于频率的直方图、帕累托直方图、二维直方图等;每个都是概念的一小部分变化,允许对特征有不同见解。对于那些想了解更多关于这些变体的人来说,维基百科上的直方图文章是一个很好的资源。
箱线图是数值特征的键视觉技术,因为它们以百分位数和异常值来展示分布。
多变量特征分析
多变量特征分析的想法是可视化多个特征,以深入了解它们之间的关系。这里解释了一些著名的图表。
-
散点图:理解不同特征之间以及特征和标签之间关系的重要技术。在实践中通常使用二维散点图,其中数值特征形成维度。数据点在某些想象轴上的对齐显示相关性,而数据点的散射则显示无相关性。它还可以用于在低维空间中识别簇。气泡图是散点图的变体,其中两个特征形成维度轴,第三个特征与数据点的尺寸成比例,该图呈现出“气泡”场的样子。密度图通过引入数据点颜色、背景颜色等,帮助可视化更多特征,从而提供额外的见解。
-
散点图矩阵:散点图矩阵是散点图的扩展,其中为每个特征(和标签)可视化了成对的散点图。它提供了一种有效的方式,以比较和执行高维数据的多元分析。
-
并行图:在这种可视化中,每个特征线性排列在 x 轴上,每个特征的值域形成 y 轴。因此,每个数据元素都表示为一条线,该线上的每个特征值都位于平行轴上。如果可用,类标签用于着色线条。并行图提供了对有效分离数据的特征的良好理解。偏差图是并行图的变体,其中不是显示实际数据点,而是绘制均值和标准偏差。Andrews 图是并行图的另一种变体,其中使用傅里叶级数转换数据,并将对应于每个数据的函数值投影。
数据转换和预处理
在本节中,我们将涵盖数据转换的广泛主题。数据转换的主要思想是将输入数据以谨慎的方式进行转换,以便对其进行清理,从中提取最相关的信息,并将其转换为可用于进一步分析和学习的可用形式。在这些转换过程中,我们必须只使用在设计时考虑到不添加任何可能影响数据完整性的偏差或伪影的方法。
特征构建
在某些数据集的情况下,我们需要从已给出的特征中创建更多特征。通常,会使用常见的聚合器,如平均值、总和、最小值或最大值,以创建额外的特征。例如,在金融欺诈检测中,卡欺诈数据集通常包含账户在活跃期间不同时间段的交易行为。通过捕获“每天发生借记交易时的金额总和,对于每个账户,一天之内”的行为合成,就是一个特征构建的例子,它为数据集添加了一个新的维度,这个维度是由现有特征构建的。一般来说,设计新的特征以增强数据的预测能力需要领域知识和对数据的经验,这使得它既是一门艺术也是一门科学。
处理缺失值
在现实世界的数据集中,通常许多特征都有缺失值。在某些情况下,它们是因测量错误、记录失误或由于各种情况下的不可用而缺失;例如,个人可能选择不透露年龄或职业。为什么要在乎缺失值呢?一种极端且不罕见的方法是忽略任何具有缺失特征的记录,换句话说,只保留“完整”的例子。当数据中广泛存在缺失特征时,这种方法可能会严重减少数据集的大小。正如我们稍后将要看到的,如果我们处理的是一个复杂系统,数据集的大小可以给我们带来宝贵的优势。此外,即使存在缺失值,只要我们使用适当的措施来处理问题,即使在“不完整”的记录中,也常常可以挖掘出有预测价值的值。另一方面,当数据本身的省略本身具有重要意义时,如贷款申请中故意隐瞒信息以掩盖事实的情况,可能会无意中丢弃关键信息。
以下是学习过程中的一个重要步骤,即采用某种系统的方式来处理缺失值,并理解每个案例中决策的后果。有一些算法,如朴素贝叶斯,对缺失值不太敏感,但通常,在数据上进行分析之前,将这些缺失值作为预处理步骤处理是良好的实践。以下是一些处理缺失值的方法。
-
用均值和众数替换:当我们用特征的均值替换连续值特征的缺失值时,新的均值显然保持不变。但如果均值受到异常值的影响很大,更好的方法可能是使用计算中去除异常值后的均值,或者使用中位数或众数,而不是均值。同样,当特征在数据集中稀疏表示时,均值可能没有意义。对于具有分类值的特征,用样本中出现频率最高的值替换缺失值是一个合理的选择。
-
通过插补替换:当我们插补一个缺失值时,实际上是在构建一个关于该特征的分类或回归模型,并基于记录中的其他特征进行预测,以便对缺失值进行分类或估计。
-
最近邻插补法:对于分类特征的缺失值,我们将该特征视为目标,并使用已知的类别数量 k 训练一个 KNN 模型。然后使用此模型来预测缺失值。(KNN 模型是非参数的,根据其邻居的函数为其“传入”数据实例分配一个值——该算法将在本章后面关于非线性模型时进行描述)。
-
基于回归的插补:在连续值变量的情况下,我们使用线性模型如线性回归来估计缺失数据——原理与分类值相同。
-
用户定义的插补:在许多情况下,用于插补缺失值的最合适的值必须来自问题域。例如,pH 值为 7.0 是中性的,更高的是碱性,更低的是酸性。对于 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[min] 进行归一化,使用以下公式:
-
Z 分数标准化:在这种技术中,也称为标准化,特征值会自动转换,使得平均值是 0,标准差是 1。转换的技术如下:对于每个特征 f,计算其均值 µ(f) 和标准差 σ(f),然后将具有值 x 的特征转换如下:
-
离散化
许多算法只能处理分类值或名义值才能有效,例如贝叶斯网络。在这种情况下,将数值特征通过监督或无监督方法离散化为类别变得至关重要。讨论的一些技术包括:
-
通过分箱进行离散化:这种技术也被称为等宽离散化。对于每个特征 f 的整个数据范围,从值 x[max] 到 x[min],被划分为预定义的 k 个等间隔,每个间隔的宽度为
。"切割点"或离散化间隔如下:
-
通过频率进行离散化:这种技术也被称为等频率离散化。特征被排序后,整个数据被离散化为预定义的 k 个间隔,使得每个间隔包含相同比例的数据。这两种技术,通过分箱和通过频率的离散化,由于预定义的 k 值而损失信息。
-
通过熵进行离散化:给定标签,计算在值变化的迭代点处的熵,使得区间的箱子尽可能纯净或具有区分性。请参阅特征评估技术部分,了解基于熵(信息增益)的理论和计算。
数据采样
接收到的数据集可能经常需要谨慎采样,以便有效地从数据中学习。数据的特征以及建模练习的目标决定了是否需要采样,以及如何进行。在我们开始从这些数据中学习之前,创建训练、验证和测试数据样本至关重要,如本节所述。
是否需要采样?
当数据集很大或噪声较多,或者偏向于某一类型时,是否进行采样的问题变得重要。答案取决于各种方面,如数据集本身、目标以及用于选择模型的评估标准,以及可能的其他实际考虑。在某些情况下,算法在内存和空间方面存在可扩展性问题,但通过模型性能(根据它们预期实现的回归或分类目标)在样本上工作得很好。例如,SVM 在内存和训练时间上的可扩展性分别为O(n²)和O(n³)。在其他情况下,数据的不平衡程度如此之高,以至于许多算法不足以处理偏斜。在文献中,通过创建新的训练样本来重新平衡原始数据集中类别分布的步骤也被称为重采样。
欠采样和过采样
在类别分布上存在明显不平衡的数据集可以称为包含一个独特的少数类。通常,这个少数类是我们特别感兴趣的实例集合,因为其成员在如此罕见的情况下出现。例如,在信用卡欺诈中,不到 0.1%的数据属于欺诈。这种偏斜不利于学习;毕竟,当我们寻求最小化分类的总误差时,我们给予所有类别相同的权重,无论一个类别相对于另一个类别是否代表性不足。在二元分类问题中,我们将少数类称为正类,将多数类称为负类,这是我们将在以下讨论中遵循的惯例。
大类欠采样是一种常用的技术,用于解决数据中的偏斜问题。以信用卡欺诈为例,我们可以从原始数据集中创建不同的训练样本,使得每个样本都包含原始数据集中的所有欺诈案例,而非欺诈实例则以某种固定的比例分布在所有训练样本中。因此,通过这种方法创建的给定训练集中,与原始偏斜数据集相比,多数类现在代表性不足,从而有效地平衡了类别的分布。可以通过这种方式创建带有标记的正例和负例实例,比例为,例如,1:20 到 1:50,但必须注意,使用的负例样本应具有与主要数据集的数据统计和分布相似的特征。使用多个训练样本,以及正负实例的不同比例,是为了使任何可能存在的采样偏差变得明显。
或者,我们也可以选择对少数类进行过采样。和之前一样,我们创建多个样本,其中少数类的实例是通过从原始数据集中有放回或无放回地采样选出的。当无放回地采样时,样本之间没有重复的实例。有放回地采样时,某些实例可能出现在多个样本中。在完成样本的初始播种后,我们可以通过在每个样本中对少数类进行随机有放回采样,直到我们得到所需的正负实例比例,从而产生更平衡的类别分布。过采样可能导致过拟合,因为分类决策边界由于重复值而变得更加具体。SMOTE(合成少数类过采样技术)是一种通过在特征空间中创建合成数据点来缓解此问题的技术,它通过在正类相邻实例之间进行插值来实现(参考文献 [20])。
分层采样
创建样本,使得具有相似特征的数据以与它们在总体中出现的相同比例被抽取,这被称为分层采样。在多类分类中,如果有 N 个类别,每个类别以一定的比例存在,那么创建的样本将代表原始数据集中每个类别的相同比例。通常,创建多个样本来训练和测试模型,以验证采样偏差是良好的实践。
训练集、验证集和测试集
创建良好的分类模型的圣杯是在一组高质量、具有代表性的(训练数据)上训练,调整参数并找到有效的模型(验证数据),最后,通过其在未见数据上的行为来估计模型的表现(测试数据)。
逻辑分组背后的核心思想是确保模型在训练期间未见过的数据上进行验证或测试。否则,一个简单的“死记硬背的学习者”可能会优于算法。学习算法的泛化能力必须在不同于训练数据集但来自同一总体的数据集上评估(参考文献 [11])。在从训练数据中移除过多数据以增加验证和测试预算之间取得平衡可能导致模型“欠拟合”,即没有足够的例子来构建有助于泛化的模式。另一方面,将所有标记数据分配给训练,而不进行任何验证或测试的极端选择可能导致“过拟合”,即模型过于忠实于例子,泛化能力不足。
通常,在大多数机器学习挑战和现实世界的客户问题中,人们一开始就得到一个训练集和一个测试集来评估模型的性能。在这些合作中,唯一的问题是如何在给定的训练集的基础上验证并找到最有效的参数。在某些合作中,只提供了标记的数据集,你需要考虑训练、验证和测试集,以确保你的模型不会过度拟合或欠拟合数据。
建模需要三个逻辑过程,因此需要三个逻辑数据集,即训练、验证和测试。训练数据集的目的是向学习算法提供标记数据以构建模型。验证集的目的是通过在验证集上训练来观察被评估的训练模型参数的效果。最后,在训练和验证集的组合上重新训练最佳参数或模型,以找到一个最优模型,然后在该模型上测试盲测试集。
图 1:训练、验证和测试数据及其使用方法
两个因素会影响学习或泛化能力:算法的选择(及其参数)和训练数据的数量。这种泛化能力可以通过包括预测误差在内的各种指标来估计。模型对未见数据的总体误差估计或风险由以下给出:
在这里,噪声是随机噪声,*Var (G,n)被称为方差误差,它是衡量我们的假设或算法(G)*如果给定不同的数据集有多敏感的度量。被称为偏差误差,表示模型中最佳算法(所有可能数据集上的平均学习者)与最优算法的距离。
如图 2和图 3所示的学习曲线——其中训练和测试错误是固定的算法及其参数或训练数据大小——可以提供对欠拟合或过拟合的指示。
当训练数据量固定时,不同的算法或具有不同参数选择的相同算法可以表现出不同的学习曲线。图 2显示了在相同数据量下,两种算法给出基于偏差和方差的两种不同学习曲线的情况。
图 2:当模型复杂度固定时,训练数据与错误率的关系表明了不同模型的选择。
算法或模型选择也会影响模型性能。一个复杂的算法,具有更多可调整的参数,可能导致过拟合,而一个简单的算法,参数较少,可能存在欠拟合。当训练数据量固定时,以下经典图示了模型性能和复杂性的关系:
图 3:当训练数据量固定时,模型复杂性与训练和测试数据中的错误率的关系。
验证允许探索参数空间以找到最佳泛化模型。正则化(将在线性模型中讨论)和验证是两种用于防止过拟合的机制。有时使用“k 折交叉验证”过程进行验证,这涉及到创建k个数据样本,使用*(k – 1)个进行训练,剩余的一个进行测试,重复k*次以给出平均估计。以下图示了 5 折交叉验证作为示例:
图 4:5 折交叉验证。
以下是一些常用的数据采样、验证和学习的技巧:
-
训练、验证和测试的随机分割:60%,20%,20%。在 60%的数据上训练,使用 20%进行验证,然后将训练集和验证集合并以训练一个最终模型,用于在剩余的 20%上进行测试。分割可以是随机的,基于时间、基于地区等。
-
训练、交叉验证和测试:分为训练集和测试集各占三分之一,在训练集上使用交叉验证进行验证,在全部三分之二的数据上训练,在三分之一的数据上测试。分割可以是随机的,基于时间、基于地区等。
-
训练和交叉验证:当训练集较小时,只能进行模型选择而不需要大量参数调整。在整个数据集上运行交叉验证,并选择在整个数据集上学习的最佳模型。
特征相关性分析和降维
特征相关性和选择的目标是找到对目标变量有区分性的特征,并帮助减少数据的维度[1,2,3]。这主要通过改善维度灾难的影响和去除无关特征的噪声来提高模型性能。通过仔细评估在验证集上添加和去除特征时的模型,我们可以看到特征相关性的影响。由于对k个特征的穷举搜索涉及 2^k – 1 个集合(考虑所有k个特征的组合,每个特征要么保留要么去除,不考虑一个特征都不存在的退化情况),因此需要评估的模型数量可能变得不可接受,因此需要某种启发式搜索技术。以下将描述这些技术中最常见的一些。
特征搜索技术
一些非常常见的搜索技术被用来寻找特征集:
-
前向或爬山搜索:在这种搜索中,每次添加一个特征,直到评估模块输出性能不再进一步变化。
-
反向搜索:从整个集合开始,每次移除一个特征,直到不再发生性能改进。某些应用程序交替使用前向和反向技术来搜索特征。
-
进化搜索:可以使用各种进化技术,如遗传算法,作为搜索机制,并且可以使用基于过滤器或包装器的评估指标作为适应度标准来指导过程。
特征评估技术
在高层次上,评估特征有三个基本方法。
过滤器方法
这种方法指的是使用技术而不使用机器学习算法进行评估。过滤器方法的基本思想是使用搜索技术选择一个特征(或特征子集)并使用某种统计量来衡量其重要性,直到达到停止标准。
单变量特征选择
这种搜索与根据使用的统计量对每个特征进行排名一样简单。
信息论方法
所有信息论方法都以熵机制为核心概念。其思想是,如果特征在数据集中随机出现,则熵最大,或者说,压缩或编码的能力低,特征可能是不相关的。另一方面,如果特征值的分布使得某些值在一个类别中相对于其他类别更普遍,那么熵最小化,特征具有区分性。以这种方式将问题表述为熵需要某种形式的离散化,以便将数值特征转换为类别,以便计算概率。
考虑一个具有训练数据 D[X] 的二分类问题。如果 X[i] 是具有 v 个不同分类值的 i^(th) 特征,使得 D[Xi] = {D[1], D[2]… D[v]},那么特征 X[i] 中的信息或熵为:
在这里,Info(D[j]) 是分割的熵,其计算如下:
在这里,p[+](D) 是数据集 D 中的数据属于正类的概率,而 p_(D) 是它属于负类的概率,在该样本中。特征的信息增益是根据整体信息和特征信息来计算的
InfoGain(X[i]) = Info(D) – Info(D[Xi])
对于数值特征,值按升序排序,并且考虑相邻值之间的分割点作为不同的值。
熵的减少越大,特征的相关性就越高。当特征具有大量值时,信息增益存在问题;这时增益比率就派上用场。增益比率通过引入分割信息来纠正大分割的信息增益。特征X[i]和GainRatio的分割信息如下:
还有其他杂质度量,如基尼杂质指数(如决策树算法部分所述)和基于不确定性的度量来计算特征相关性。
统计方法
卡方特征选择是最常见的特征选择方法之一,其基础是统计假设检验。零假设是特征和类别变量相互独立。数值特征被离散化,以便所有特征都具有分类值。列联表的计算如下:
| 特征值 | 类别=P | 类别=N | 对类别 niP + niN 求和 |
|---|---|---|---|
| X[1] | (n[1P]|µ[1P]) | (n[1N]|µ[1N]) | n[1] |
| …. | … | …. | … |
| X[m] | (n[mP]|µ[mP]) | (n[mN]|µ[mN]) | n[m] |
| n[*P] | n[*P] | n |
列联表 1:显示二元类别的特征值和类别分布。
在前面的表中,n[ij]是具有值——在离散化后——等于x[i]和类别值j的特征的数量。
值求和如下:
这里n是数据实例的数量,j = P, N是类别值,i =1,2, … m是特征的不同离散化值的索引,该表有m – 1个自由度。
卡方统计量由以下公式给出:
卡方值用于与置信水平阈值进行比较以测试显著性。例如,对于i = 2,5%置信水平下的卡方值为 3.84;如果我们的值小于表格中的 3.83,那么我们知道该特征是有趣的,并且零假设被拒绝。
多变量特征选择
大多数多变量特征选择方法有两个目标:
-
减少特征与其他选定的特征之间的冗余
-
最大化特征与类别标签的相关性或相关性
寻找此类特征子集的任务不能穷尽,因为该过程可能具有很大的搜索空间。通常使用启发式搜索方法,如回溯搜索、前向搜索、爬山法和遗传算法来找到特征子集。接下来将介绍两种非常著名的评估技术,以实现上述目标。
最小冗余最大相关性(mRMR)
在这种技术中,数值特征通常被离散化——就像在单变量预处理中做的那样——以获得不同的值类别。
对于每个子集 S,两个特征 X[i] 和 X[j] 之间的冗余可以测量如下:
这里,MI (X[i], X[j]) = 两个特征 X[i] 和 X[j] 之间的互信息度量。特征 X[i] 与类别 C 之间的相关性可以测量如下:
此外,可以将这两个目标结合起来,使用以下方法找到最佳特征子集:
基于相关性的特征选择 (CFS)
基本思想与前面的例子相似;子集 S 的整体优点被测量为:
在这里,k 是特征的总数, 是平均特征类别相关性,
是平均特征间互相关性。分子给出相关性因子,分母给出冗余因子,因此搜索的目标是最大化整体比率或优点 (S)。
还有其他技术,如基于快速相关性的特征选择,它基于相同的原则,但在计算指标方面有所变化。读者可以在 Weka 中尝试这些和其他技术。
过滤方法的优势在于其方法与学习算法无关,因此可以免除选择算法和参数的麻烦。它们也比基于包装的方法更快。
包装方法
搜索技术与在特征搜索方法中讨论的方法相同;只是评估方法不同。在包装方法中,使用机器学习算法来评估基于各种指标发现的具有区分性的特征子集。用作包装方法的机器学习算法可能与用于建模的算法相同或不同。
最常用的交叉验证用于学习算法。性能指标,如曲线下面积或 F 分数,作为交叉验证的平均值,指导搜索过程。由于训练和评估模型的成本非常高,我们选择具有快速训练速度的算法,如线性回归、线性 SVM 或基于决策树的算法。
一些包装方法使用特定的算法,如随机森林来衡量特征相关性,已经非常成功。
嵌入方法
这种方法不需要特征搜索技术。不是在预处理中进行特征选择,而是在机器学习算法本身中进行。规则归纳、决策树、随机森林等算法在训练算法中执行特征选择。一些算法,如回归或基于 SVM 的方法,被称为收缩方法,可以在模型中添加正则化项以克服数据集中噪声特征的影响。岭回归和 lasso 正则化是回归中提供隐式特征选择的知名技术。
在第三章“无监督机器学习技术”中,将讨论其他使用无监督算法的技术,这些技术也可以在监督环境中有效地使用,例如,主成分分析(PCA)。
模型构建
在现实世界的问题中,学习有许多约束,评估模型在未见数据上的性能也有许多方法。每个建模算法在应用于特定问题或特定领域的问题类时都有其优势和劣势。这一点在著名的无免费午餐定理(NFLT)中得到了阐述,该定理指出——对于监督学习的情况——在所有数据分布的平均情况下,每个分类算法的表现几乎与其他任何算法一样好,包括总是选择同一类的算法!监督学习、搜索和优化的 NFLT 应用可以在www.no-free-lunch.org/找到。
在本节中,我们将讨论最常用的实用算法,提供必要的细节来回答诸如算法的输入和输出是什么?它是如何工作的?在选择算法时需要考虑哪些优势和局限性?对于每个模型,我们将包括测试所选数据集时获得的示例代码和输出。这应该为读者提供对过程的洞察。一些算法,如神经网络和深度学习、贝叶斯网络、基于流的机器学习等,将在各自的章节中单独介绍。
线性模型
当数据线性可分时,线性模型效果很好。这始终应该是首先要确定的事情。
线性回归
线性回归可用于分类和估计问题。它是实践中最广泛使用的方法之一。它包括通过数据点找到最佳拟合超平面。
算法输入和输出
特征必须是数值型的。分类特征使用各种预处理技术进行转换,例如,当分类值成为具有 1 和 0 值的特征时。线性回归模型在分类中输出一个分类类别,在回归中输出数值。许多实现还给出置信度值。
它是如何工作的?
模型试图在输入空间中学习一个“超平面”,以最小化每个类别的数据点之间的误差(参考文献 [4])。
线性模型在 d 维输入空间中学习的超平面由以下公式给出:
模型将输入空间分割成两个区域(二元分类),分别是和
。将特征 0 的坐标赋值为 1,即x0=1,假设空间或模型的向量表示为:
权重矩阵可以通过各种方法推导出来,例如普通最小二乘法或使用矩阵表示的迭代方法,如下所示:
在最小二乘问题中,如果矩阵X^TX不是满秩的,或者遇到各种数值稳定性问题,解决方案将进行修改如下:
这里,被添加到大小为(n + 1, n + 1)的单位矩阵I[n]的对角线上,其余值被设置为 0。这种解决方案被称为岭回归,参数λ理论上控制了平方损失和解决方案低范数的权衡。常数λ也称为正则化常数,有助于防止“过拟合”。
优点和局限性
-
当特征少于 100 个且数据点只有几千个时,这是一个尝试获取洞察力的合适方法。
-
在一定程度上是可解释的,因为权重提供了对每个特征影响的洞察。
-
假设线性关系、可加性和不相关特征,因此它不模拟复杂的非线性现实世界数据。一些线性回归的实现允许移除共线性特征来克服这个问题。
-
非常容易受到数据中的异常值的影响,如果有巨大的异常值,在进行线性回归之前必须先处理这些异常值。
-
异方差性,即训练点的方差不等,可能会影响简单的最小二乘回归模型。采用加权最小二乘等技术来克服这种情况。
朴素贝叶斯
基于贝叶斯规则,朴素贝叶斯分类器假设数据的特征相互独立(参考文献 [9])。它特别适合于大型数据集,尽管它对特征独立性的假设是朴素的,但通常比其他更复杂的技术表现更好。
算法输入和输出
朴素贝叶斯模型可以接受既是分类又是连续的特征。通常,如果连续特征以正确的格式离散化,朴素贝叶斯模型的性能会得到提高。朴素贝叶斯输出所有类别的类别和概率分数,使其成为评分模型的良好分类器。
它是如何工作的?
它是一个基于概率的建模算法。基本思想是使用贝叶斯定理并测量不同项的概率,如这里所示。测量概率可以通过预处理(如离散化)、假设某种分布或,如果数据足够多,映射数值特征的分布来完成。
应用贝叶斯定理以获得后验概率作为预测,其中k代表k^(th)类别。
优点和局限性
-
它对孤立噪声数据点具有鲁棒性,因为在估计输入数据的概率时,这些点会被平均。
-
从贝叶斯分类中得到的概率分数可以作为评分模型。
-
能够很好地处理缺失值,因为它们在估计概率时没有被使用。
-
此外,它对无关属性具有鲁棒性。如果特征没有用,类别的概率分布将是均匀的,并且会相互抵消。
-
在训练速度和内存方面非常好,它可以并行化,因为方程中每个概率的计算都是相互独立的。
-
当使用朴素贝叶斯时,相关特征可能成为一个大问题,因为条件独立性假设不再有效。
-
大多数优化算法都假设误差是正态分布的。
逻辑回归
如果我们使用线性回归模型,比如使用最小二乘回归方法,输出必须转换为类别,比如 0 和 1。许多线性回归算法输出类别和置信度作为概率。一般来说,如果我们看到线性回归的概率大多超出了 0.2 到 0.8 的范围,那么逻辑回归算法可能是一个更好的选择。
算法输入和输出
与线性回归类似,所有特征都必须是数值的。分类特征必须转换为数值。像在朴素贝叶斯中一样,此算法为每个类别输出类别和概率,可以用作评分模型。
如何工作?
逻辑回归使用输入特征的线性函数来模拟类别的后验概率。
二元分类的逻辑回归模型如下所示:
该模型是线性模型的对数几率或 logit 转换(参考文献 [6])。权重向量通常使用各种优化方法计算,如迭代加权最小二乘法(IRLS)或Broyden-Fletcher-Goldfarb-Shanno(BFGS)方法,或这些方法的变体。
优点和局限性
-
克服了输入和输出之间异方差性和某些非线性问题。
-
在误差估计中不需要正态分布的假设。
-
它是可解释的,但不如线性回归模型那么可解释,因为需要一些统计学知识。它提供诸如优势比、p 值等信息,这些信息有助于理解特征对类别的影响,以及根据 p 值的重要性进行隐式特征相关性。
-
在实践中,必须使用 L1 或 L2 正则化来克服逻辑回归模型中的过拟合问题。
-
许多优化算法可用于提高训练速度和鲁棒性。
非线性模型
接下来,我们将讨论一些知名、实用且最常用的非线性模型。
决策树
决策树也被称为分类和回归树(CART)(参考文献 [5])。它们的表示是通过在每个内部节点评估一个关于单个属性的不等式来构建的二叉树,每个叶子节点对应于从其路径到达的决策产生的输出值或类别。当提供新的输入时,通过从根节点开始遍历树来预测输出。
算法输入和输出
特征可以是分类的也可以是数值的。它生成类别作为输出,大多数实现使用基于频率的估计给出分数或概率。尽管有一些扩展,但决策树的概率并不是像朴素贝叶斯和逻辑回归那样的平滑函数。
它是如何工作的?
通常,从根节点开始创建单个树,根节点使用单个特征进行决策,根据特征的值将决策分支到各个分支,而在叶子节点处则是一个类别或更多特征。有许多选择要做,例如树的数量、如何选择根级别或后续叶子级别的特征,以及如何在不分类的情况下分割特征值。这导致了许多不同的算法或对基本决策树的修改。许多分割特征值的技术与在离散化部分讨论的内容相似。通常,会应用某种形式的剪枝来减少树的大小,这有助于解决过拟合问题。
Gini 指数是另一种用于分割特征的流行技术。所有数据点的集合 S 中的数据点的 Gini 指数如下 ,其中 p[1],p[2] … p[k] 是每个类别的概率分布。
如果 p 是所有数据点集合 S 中属于正类别的数据点的分数或概率,那么 1 – p 是其他类别的分数或二分类中的错误率。如果数据集 S 以 r 种方式分割为 S[1], S[2],…S[r],那么每个集合的错误率可以量化为 |S[i]|。r 种分割的 Gini 指数如下:
使用最低 Gini 指数的分割用于选择。流行的决策树算法 CART 使用 Gini 指数作为分割标准。
数据点集 S 的熵可以类似地计算如下:
类似地,基于熵的分割计算如下:
熵分割的值越低,特征越好,这一点在 ID3 和 C4.5 决策树算法中得到了应用(参考文献 [12])。
停止标准与剪枝标准相关。提前停止树的生长或剪枝的目的是减少“过拟合”,这与线性模型和逻辑模型中的正则化类似。通常,训练集被分为树生长集和剪枝集,这样剪枝就可以使用不同的数据来克服生长集的任何偏差。最小描述长度(MDL),根据节点数量惩罚树的复杂性,是许多决策树算法中常用的方法。
图 5:显示了一个二维二分类问题和一个通过在阈值X[1t]和X[1t]处进行分割诱导的决策树
优点和局限性
-
决策树的主要优点是它们很容易解释。它们可以用通俗易懂的语言来理解,并且特别适合商业领域的专家轻松理解精确模型。
-
如果特征数量很多,那么构建决策树可能需要大量的训练时间,因为算法的复杂性会增加。
-
决策树固有的问题是过拟合。许多树算法都有剪枝选项来减少这种影响。使用剪枝和验证技术可以在很大程度上减轻这个问题。
-
当特征之间存在相关性时,决策树工作得很好。
-
决策树在类别之间构建轴平行的边界,这种偏差可能会引入错误,尤其是在复杂、平滑、非线性边界的情况下。
K-近邻(KNN)
K-近邻属于非参数和懒惰算法的分支。K-近邻不对底层数据做出任何假设,也不从训练数据中构建和泛化模型(参考文献 [10])。
算法输入和输出
虽然 KNN 可以处理分类和数值特征,但寻找邻居的核心——距离计算,与数值特征配合得更好。将数值特征归一化到相同的范围是必须的步骤之一。KNN 的输出通常是基于邻居距离计算的类别。
如何工作?
KNN 使用整个训练数据对未见过的测试数据进行预测。当出现未见过的测试数据时,KNN 通过某种距离计算找到 K 个“最近的邻居”,并根据邻居和决定类别的度量标准对新的点进行分类。如果我们考虑由x[1]和x[2]表示的两个数据点,对应的向量,距离计算如下:
-
欧几里得距离:
-
余弦距离或相似度:
用于对未见数据分类的度量可能仅仅是K个邻居中的多数类。
训练时间很小,因为它只需构建数据结构以以最小化未见面数据时最近邻的计算方式来存储数据。该算法依赖于从训练数据点存储数据的选择,以实现搜索邻居的高效性,使用哪种距离计算来找到最近邻,以及使用哪种度量来根据所有邻居的类别进行分类。通过使用验证技术来选择 KNN 中的"K"值是至关重要的。
图 6:使用二维数据以及不同的 k 值选择来展示 K-最近邻。
优点和局限性
-
对底层数据分布没有假设,并且训练时间最小,这使得它成为学习的一个非常有吸引力的方法。
-
KNN 使用局部信息来计算距离,在特定领域可以产生高度自适应的行为。
-
当K值选择得当,对噪声训练数据具有鲁棒性。
-
根据数据点的数量和硬件限制,保留整个训练数据用于分类可能会出现问题。
-
特征数量和维度的诅咒会影响此算法,因此在 KNN 建模之前必须进行某种形式的维度缩减或特征选择。
支持向量机(SVM)
简单来说,SVM 可以被视为通过解决约束优化问题来最大化分离超平面和数据之间边界的线性分类器。SVM 甚至可以通过使用后面描述的核将数据转换到更高维空间来处理非线性可分的数据。
算法输入和输出
SVM 仅对数值特征有效,尽管大多数实现可以通过将特征转换为数值或二进制来处理分类特征。归一化通常是选择之一,因为它有助于训练中的优化部分。SVM 的输出是类别预测。有一些实现提供概率估计作为置信度,但这需要相当多的训练时间,因为它们使用 k 折交叉验证来构建估计。
如何工作?
在其线性形式中,SVM 的工作方式类似于线性回归分类器,在两个类别之间绘制线性决策边界。两者的区别在于,在 SVM 中,边界是以最大化边界附近点之间的“间隔”或距离的方式绘制的。边界上的点被称为“支持向量”(参考文献 [13 和 8])。
因此,支持向量机(SVM)试图在类似于线性回归模型的线性模型中找到权重向量,如下所示:
权重 w[0] 在这里表示为 b。对于二类分类问题,SVM 试图找到一个超平面:
超平面试图将数据点分离,使得属于同一类别的所有点都位于超平面的同一侧,如下所示:
模型通过约束优化和惩罚函数 C(用于克服误差)来最大化间隔:
使得 和
。
由于这个原因,它们也被称为大间隔分类器。基于核的 SVM 将输入数据转换到一个假设的特征空间,在这个空间中,SV 机制以线性方式工作,边界在特征空间中绘制。
在变换后的表示上,核函数如下给出:
这里 Φ 是输入空间上的一个变换。可以看出,SVM 的整个优化和求解过程保持不变,唯一的例外是点积 x[i] · x[j] 被核函数 k(x[i], x[j]) 所替代,这是一个涉及不同空间中两个向量的函数,实际上并没有转换到那个空间。这被称为核技巧。
通常使用的最著名的核函数包括:
-
高斯径向基核:
-
多项式核:
-
Sigmoid 核:
SVM 的性能对一些优化参数、核参数以及核心 SV 参数(如代价函数 C)非常敏感。通常使用网格搜索或进化搜索等技术,结合交叉验证等验证技术来寻找最佳参数值。
图 7:从训练数据中学习得到的 SVM 线性超平面,它能在两个类别之间创建最大间隔分离。
图 8:核变换说明如何使用多项式变换将二维输入空间转换为三维特征空间,其中数据是线性可分的。
优点和局限性
-
SVM 在泛化、低过拟合方面表现优异,如果参数选择得当,对于复杂非线性数据有良好的理论基础。
-
SVM 在具有大量特征和较少训练数据的情况下也能很好地工作。
-
SVM 对噪声训练数据不太敏感。
-
SVM 的最大缺点是它们不可解释。
-
SVM(支持向量机)的另一个大问题是其训练时间和内存需求。它们是 O(n²) 和 O(n³),当数据量大或存在硬件限制时,可能会导致严重的可扩展性问题。有一些修改可以帮助减少这两者。
-
SVM 通常在二分类问题上表现良好,但对于多分类问题,尽管有诸如一对多和一对一等技术,但它的鲁棒性不如决策树等一些其他分类器。
集成学习和元学习器
将多个算法或模型组合起来进行分类,而不是仅仅依赖一个,这被称为集成学习。它有助于结合各种模型,因为每个模型都可以被视为——在高级别上——在整个数据集中检测特定模式的专家。每个基学习器也可以在略微不同的数据集上学习。最后,将所有模型的结果结合起来进行预测。根据组合中使用的算法的相似程度、如何向每个算法展示训练数据集以及算法如何组合结果以最终对未见数据集进行分类,集成学习有许多分支:
图 9:集成学习策略的说明
一些常见的集成学习方法包括:
-
不同的学习算法
-
相同的学习算法,但具有不同的参数选择
-
不同特征集上的不同学习算法
-
不同训练数据的不同学习算法
自助聚合或 bagging
它是用于在不同样本中划分数据并在每个样本上构建分类器的最常用的集成方法之一。
算法输入和输出
输入受所使用的基学习器的选择限制——如果使用决策树,基本上没有限制。该方法输出类成员资格以及类的概率分布。
它是如何工作的?
bagging 的核心思想是对具有高方差的不同学习器应用自助估计,例如决策树。自助估计是任何依赖于有放回随机抽样的统计量。整个数据被使用自助估计分成不同的样本,并对每个样本使用基学习器构建模型。最后,在预测时,通过多数投票得到平均预测——这是结合所有学习器的一种技术。
随机森林
随机森林是基本 Bagged 决策树的改进。即使在 Bagging 的情况下,基本的决策树在创建树时在每个分割点都有所有特征的选择。正因为如此,即使有不同的样本,许多树也可以形成高度相关的子模型,这导致 Bagging 的性能下降。通过给不同的模型提供随机特征以及随机数据集,子模型之间的相关性降低,与基本 Bagged 树相比,随机森林表现出更好的性能。随机森林中的每棵树都在随机特征上生长其结构,从而最小化偏差;在决策上结合许多这样的树可以减少方差(参考文献 [15])。随机森林还用于通过平均树中的不纯度减少来衡量特征相关性,并对所有特征进行排名,以给出每个特征的相对重要性。
优点和局限性
-
比单个基学习器有更好的泛化能力。克服了基学习器过拟合的问题。
-
由于 Bagging 作为元学习器结合了甚至可解释的学习器,其可解释性非常低。
-
与大多数其他集成学习器一样,Bagging 对噪声和异常值具有弹性。
-
随机森林通常不会对训练数据是独立同分布(iid)的情况下产生过拟合。
Boosting
Boosting 是另一种流行的集成学习方法,它基于使用弱学习器并迭代地学习“错误分类”或难以学习的点。因此,想法是“提升”难以学习的实例,并使基学习器更有效地学习决策边界。Boosting 有各种变体,如 AdaBoost、LogitBoost、ConfidenceBoost、Gradient Boosting 等。我们在这里介绍一个非常基本的 AdaBoost 形式(参考文献 [14])。
算法输入和输出
输入受所使用的基学习器的选择约束——如果使用决策树,基本上没有限制。输出类成员资格以及类别的概率分布。
如何工作?
Boosting 背后的基本思想是迭代地重新加权输入样本,以创建新的数据分布,以便在每次迭代中从简单的基学习器中学习模型。
初始时,所有实例都使用的权重均匀加权,并且在每次迭代t时,种群被重新抽样或重新加权,如
所示,其中
和Zt 是归一化常数。
最终模型作为迭代中学习到的所有模型的线性组合工作:
每次迭代的重新加权或重新抽样数据基于“错误”;导致错误的点被抽样更多或具有更大的权重。
优点和局限性
-
比基学习器有更好的泛化能力,并且非常有效地克服了过拟合的问题。
-
一些提升算法,如 AdaBoost,可能对均匀噪声敏感。存在一些提升算法的变体,如“GentleBoost”和“BrownBoost”,它们可以减少异常值的影响。
-
提升算法在误差估计上有理论上的界限和保证,使其成为一个统计上稳健的算法。
模型评估、评估和比较
这里讨论的关键思想包括:
-
如何评估或估计分类器在未见数据集上的性能,这些数据集将是它未来预测未见数据集的。
-
我们应该使用哪些指标来评估模型的性能?
-
如果我们必须在它们之间进行选择,我们如何比较算法?
模型评估
为了训练模型(s),调整模型参数,选择模型,并最终估计模型在未见数据上的预测行为,我们需要许多数据集。我们不能在单一数据集上训练模型并估计其在该数据集上的行为,因为这会产生明显的乐观偏差,估计结果不太可能匹配未见数据的行为。因此,至少需要将可用的数据进行分区,形成训练集和测试集。此外,在我们对测试集进行测试之前,我们需要调整模型的参数,并在单独的数据集上测试调整的效果。如果我们使用同一数据集进行训练、参数调整和测试,乐观偏差和错误估计的问题同样适用。因此,从理论和实践上讲,需要有三个数据集,即训练集、验证集和测试集。
模型在训练集上训练,不同参数对训练集的影响在验证集上得到验证,最终选择参数的模型在测试集上运行以评估模型在未见数据上的性能。当数据集不够大,或者数据集很大但类别之间的不平衡性很大,即一个类别只占总人口的很小一部分时,我们无法创建太多的样本。记住,我们方法中描述的步骤之一是创建不同的数据样本和数据集。如果总训练数据量很大,并且数据量和类别比例良好,那么使用随机分层划分来创建这三个集合是最常见的选项。在某些显示季节性和时间相关行为的特定数据集中,基于时间界限创建数据集是一种常见的做法。在许多情况下,当数据集不够大时,可能只创建两个物理分区,即训练和测试。训练数据集大约占 66%到 80%,其余用于测试。然后使用 k 折交叉验证技术从训练数据集中创建验证集。训练数据集被分成k次,每次产生k-1/k随机训练1/k测试数据样本,并生成所需的性能平均指标。这样,有限的训练数据被分成k次,并使用不同训练/测试分割的平均性能来评估参数的影响。在交叉验证中,使用 10 折交叉验证是最常见的做法。
模型评估指标
在调整参数或选择模型时,下一个重要的决定是基于某些性能指标做出决策。在分类学习中,有不同可用的指标,你可以根据业务需求做出决策。例如,在某个领域,不漏掉任何一个真正的阳性是最重要的关注点,而在其他领域,人类参与判断模型结果时,过多的假阳性是更大的关注点。在某些情况下,整体良好的准确率被认为更为重要。在高度不平衡的数据集,如欺诈或网络攻击中,一个类别的实例只有几个,而另一个类别的实例有数百万。在这种情况下,准确率给出了模型性能的错误指示,因此使用一些其他指标,如精确度、真正阳性比率或曲线下面积作为指标。
我们现在将讨论在分类算法评估中最常使用的指标(参考文献 [16, 17 和 19])。
图 10:分类模型的模型评估指标
混淆矩阵和相关指标
图 11:混淆矩阵
混淆矩阵是许多模型性能指标定义的核心。指标和同义词的激增是矩阵元素在不同学科中衍生出的不同数量的效用结果,每个学科都强调模型行为的不同方面。
矩阵的四个元素是假阳性、假阴性、真阳性和真阴性的数量原始计数。通常,这些数量的不同比率更有趣,例如真阳性率(或灵敏度、或召回率)和假阳性率(FPR,或 1—特异性,或漏报率)。准确率反映了正确预测的百分比,无论是类别 1 还是类别 0。对于倾斜的数据集,准确率并不特别有用,因为即使是恒定的预测也可能看起来表现良好。
ROC 和 PRC 曲线
之前提到的指标,如准确率、精确率、召回率、灵敏度和特异性,是汇总指标,即它们描述了整个数据集的行为。在许多复杂问题中,观察 TP 和 FP 等指标之间的权衡通常很有价值。
许多分类器,主要是基于概率的分类器,除了给出分类外,还给出预测的置信度或概率。获得 ROC 或 PRC 曲线的过程是在学习模型上运行未见验证或测试集,然后获得预测和预测概率。根据置信度按降序对预测进行排序。对于每个概率或置信度,计算两个指标,即 FP 的分数(FP 率)和 TP 的分数(TP 率)。
将 TP 率绘制在 y 轴上,FP 率绘制在 x 轴上,可以得到 ROC 曲线。随机分类器的 ROC 曲线靠近对角线,而优秀分类器的 ROC 曲线倾向于图表的左上角。曲线下面积(AUC)是通过使用 ROC 曲线从 0 到 1 的梯形面积来测量的面积。例如,在运行交叉验证时,可能会有许多 ROC 曲线。有两种方法可以得到“平均”ROC 曲线:首先,使用垂直平均,即 TPR 平均在不同 FP 率下绘制;其次,使用水平平均,即在不同的 TP 率下绘制 FPR 平均。根据经验法则,曲线下面积大于 0.8 的分类器被认为对未见数据具有良好的预测能力。
精确率-召回率曲线或 PRC 曲线与 ROC 曲线类似,但与 TPR 对 FPR 不同,分别将精确率和召回率绘制在 y 轴和 x 轴上。当数据高度不平衡时,即 ROC 曲线并不能真正显示影响,而 PRC 曲线在判断性能方面更为可靠。
收益图和提升曲线
提升和增益图更偏向于敏感性或真正阳性。这两个图表的全部目的在于展示,与随机选择相比,模型的预测和置信度可以检测到未见数据样本中更好的质量或真正阳性。
这通常对用于检测金融犯罪中的欺诈或网络安全中的威胁的检测引擎非常有吸引力。增益图和提升曲线给出了在不同四分位数或总数据区间的不同区间内将被检测到的真正阳性的精确估计。这将给业务决策者提供洞察,了解需要多少调查人员或需要花费多少小时来检测欺诈行为或网络攻击,从而可以给出模型的实际投资回报率。
生成增益图或提升曲线的过程与通过模型运行未见过的验证或测试数据并获取预测以及置信度或概率的过程类似。这涉及到按降序排列概率,并计算数据集每个四分位数的 TPs 数量。最后,每个四分位数的计数直方图给出提升曲线,而每个四分位数的 TPs 累计计数给出增益图。在许多工具,如 RapidMiner 中,为了获得计数和累计计数,使用分箱技术而不是粗略的区间(如四分位数),而是使用固定的较大区间。
模型比较
当涉及到选择算法,或者给定算法的正确参数时,我们会在不同的数据集上,或者在交叉验证的情况下,在同一数据集的不同分割上进行比较。在这些比较中,会使用统计测试的度量来做出决策。使用经典统计学中的假设检验的基本思想是比较算法中的两个度量。零假设是算法基于测量的度量之间没有差异,因此测试是为了根据测量的度量来验证或拒绝零假设(参考文献 [16])。统计测试回答的主要问题是——算法获得的结果或度量是其真实特征,还是偶然得到的?
在本节中,我们将讨论在实际情况中使用的比较分类算法的最常见方法。
比较两个算法
一般过程是在相同的训练集上训练算法,然后在多个验证集、不同的测试集或交叉验证上运行模型,衡量之前讨论的兴趣度量,如错误率或曲线下面积,然后获取每个算法的度量统计,以决定哪个效果更好。每种方法都有其优点和缺点。
McNemar 测试
这是一个非参数测试,因此它不对数据分布做出假设。McNemar 的测试构建了一个关于性能度量值(如“误分类或错误”)的列联表,例如:
两个算法误分类的数量(c[00])
-
算法 G1 误分类但算法 G2 正确分类的数量(c[01])
-
算法 G2 误分类但算法 G1 正确分类的数量(c[10])
-
同时被 G1 和 G2 正确分类的数量(c[11])
如果 χ² 超过 统计量,则可以在 1 – α 的置信水平下拒绝两个算法 G1 和 G2 的性能度量值相等的零假设。
配对 t 检验
这是一个参数测试,并且假设计算出的度量值呈正态分布是有效的。通常,它与交叉验证过程结合使用,并计算曲线下面积、精确度或错误率等度量值的结果,然后测量均值和标准差。除了正态分布假设之外,两个度量值来自具有相等方差的总体这一额外假设可能对这种方法是一个很大的缺点。
是两个算法 G1 和 G2 性能度量值的均值差异。
在这里,di 是试验中两个算法 G1 和 G2 性能度量值的差异,并且有 n 次试验。
t-统计量使用均值差异和标准误差(从标准差计算得出)计算,并与表格中的正确 alpha 值进行比较,以检查显著性:
Wilcoxon 符号秩检验
在数据集上测试两个度量值最流行的非参数方法是使用 Wilcoxon 符号秩检验。算法在相同的训练数据和度量值(如错误率或准确率下的面积)上训练,并在不同的验证或测试集上计算。设 d[i] 为 N 个数据集的第 i 次试验中两个分类器性能度量值的差异。差异根据其绝对值进行排名,并关联平均秩以处理平局。设 R^+ 为第二个算法优于第一个算法的秩之和,R^– 为第一个算法优于第二个算法的秩之和:
统计量 然后与 alpha 值的阈值进行比较,
以拒绝假设。
比较多个算法
现在我们将讨论在涉及两个以上算法且需要跨多个算法进行评估指标比较时使用的两种最常见技术。
ANOVA 测试
这些是参数测试,假设样本呈正态分布,即我们用于评估的指标。方差分析(ANOVA)测试遵循与其他测试相同的过程,即使用相似的训练集训练模型/算法,并在不同的验证或测试集上运行。ANOVA 测试计算的主要量包括每个算法性能的指标均值,然后计算所有算法的整体指标均值。
设p[ij]为i = 1,2… k和j = 1,2 …l的试验和分类器的性能指标。分类器j在所有试验中的平均性能和整体平均性能如下:
评估两种类型的变异。第一种是组内变异,即每个算法与整体指标均值的总偏差,第二种是组间变异,即每个算法指标均值的偏差。组内变异和组间变异用于计算相应的组内和组间平方和,如下:
使用两个平方和以及如 F 统计量这样的计算,即两者的比率,可以在 alpha 值上进行显著性测试以接受或拒绝零假设:
ANOVA 测试在假设指标的正态分布和方差相等方面与配对 t 测试具有相同的局限性。
弗里德曼测试
弗里德曼测试是一种针对多个算法比较的非参数测试,它对数据分布或指标的方差没有假设,ANOVA 测试有这些假设。它使用排名而不是直接使用性能指标进行计算。在每个数据集或试验中,算法被排序,最好的算法排名为 1,依此类推,对所有分类器都如此。计算算法在n个数据集上的平均排名,记为R[j]。弗里德曼统计量在l个分类器上的计算如下,并与 alpha 值比较以接受或拒绝零假设:
案例研究 – 马肠阻塞分类
为了说明第一章中描述的不同步骤和方法,从数据分析到模型评估,需要一个具有现实世界特征的代表性数据集。
我们从以下链接可用的 UCI 存储库中选择“马肠阻塞数据集”:archive.ics.uci.edu/ml/datasets/Horse+Colic
该数据集有 23 个特征,具有类别和连续特征的混合。它包含大量具有缺失值的特征和实例,因此在本处理中,理解如何替换这些缺失值并在建模中使用它们变得更加实用。实际上,大量缺失数据(30%)是该数据集的一个显著特征。数据由连续属性以及类型为名义的属性组成。此外,存在自预测因子使得从实际角度处理此数据集具有指导意义。
本练习的目的是应用我们迄今为止已吸收的监督学习技术。我们将使用真实数据集并通过使用两个开源工具包——WEKA 和 RapidMiner 来完成。借助这些工具,我们将构建一个管道,使我们能够从数据文件的摄取开始,通过数据清洗、学习过程和模型评估。
Weka 是一个机器学习的 Java 框架——我们将看到如何使用这个框架通过几行代码从头到尾解决一个分类问题。除了 Java API 之外,Weka 还有一个 GUI。
RapidMiner 是一个具有拖放功能和大量算法及可视化工具的图形化环境,这使得快速运行数据实验和不同建模技术变得极其简单。
业务问题
业务问题是确定数据集中已知变量的值——如果马的病变是手术性的。我们将使用测试集作为必须分类的未见数据。
机器学习映射
基于数据和标签,这是一个二元分类问题。数据已经分为训练数据和测试数据。这使得评估技术更简单,因为从特征选择到模型的所有方法都可以在相同的测试数据上评估。
该数据集包含 300 个训练样本和 68 个测试样本。有 28 个属性,目标对应于病变是否为手术性的。
数据分析
在查看标签类别在训练和测试样本中的分布后,我们在特征分析之前将 300 个训练样本和 68 个测试样本合并。
标签分析
训练集中无类别与有类别的比例是 109/191 = 0.57,测试集中为 0.66:
| 训练数据集 | ||
|---|---|---|
| 手术病变? | 1 (是) | 2 (否) |
| 示例数量 | 191 | 109 |
| 测试数据集 | ||
| 手术病变? | 1 (是) | 2 (否) |
| 示例数量 | 41 | 27 |
表 2:标签分析
特征分析
以下是一个截图,展示了具有类型、缺失值、最小值、最大值、众数和标准差基本统计特征的顶级功能,并按缺失值排序。观察结果如下:
-
没有非缺失值的分类或连续特征;最少的特征是“脉搏”,有 74 个缺失值,共 368 个,即 20%的值缺失,这高于一般的噪声阈值!
-
大多数数值特征也存在缺失值,例如,“鼻胃反流 PH”中有 247 个缺失值,共 368 个,即 67%的值缺失!
-
许多分类特征存在缺失值,例如,“腹部穿刺外观”中有 165 个缺失值,共 368 个,即 45%的值缺失!
-
必须以某种方式处理缺失值,以克服由如此大量缺失值产生的噪声!!特征分析
图 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 与朴素贝叶斯。
图 13:WEKA 实验者显示了使用 30 次重复的交叉验证运行两个算法的过程。
图 14:WEKA 实验者结果显示了使用配对 t 检验比较两个算法在百分比正确或准确度指标上的结果。
RapidMiner 实验
现在我们使用 RapidMiner 中的马绞痛数据集进行一些实验。我们将再次遵循章节第一部分介绍的方法。
注意
本节的目的不是作为 RapidMiner 工具的教程。实验者应阅读优秀的文档和用户指南,以便熟悉工具的使用。软件中每个操作员都有一个专门的教程——我们建议您在想要了解如何使用特定操作员时使用这些教程。
一旦我们使用数据访问工具导入测试和训练数据文件,我们就会想要直观地探索数据集,以便熟悉情况。特别重要的是要识别出这 28 个属性中的每一个是连续的(在 RapidMiner 中为数值、整数或实数)还是分类的(在 RapidMiner 中为名义、二项或多项)。
可视化分析
从工具的结果面板中,我们执行数据的单变量、双变量和多变量分析。统计工具为每个特征提供简短的摘要——对于连续类型,有最小值、最大值、平均值和标准差;对于名义类型,有最少、最多和频率。
当我们进行双变量分析时,数据的有趣特征开始显现。在四分位数颜色矩阵中,颜色代表两个可能的目标值。正如箱线图所示,我们立即注意到一些属性比其他属性更明显地区分这两个目标值。让我们检查几个:
图 15:四分位数颜色矩阵
蠕动:这个特征在按目标值分开时显示出明显的分布差异。两个四分位数区域之间几乎没有重叠。这表明这个特征在目标方面的区分能力。
另一方面,直肠温度的图表在分布上没有明显的差异。这表明这个特征与目标的相关性较低。从脉搏这个特征也可以得出类似的推断。我们预计这些特征在评估它们相对于目标区分能力时排名相当低。
最后,疼痛的图表具有非常不同的特征。它也是区分目标的,但与蠕动的区分方式非常不同。在疼痛的情况下,类别 2 的数据方差比类别 1 大得多。腹部膨胀在类别之间也有明显不同的方差,除了类别 2 比类别 1 有更大的方差。
图 16:散点图矩阵
探索数据的一个重要部分是理解不同的属性如何相互关联以及与目标的相关性。在这里,我们考虑特征对,并查看值的组合发生是否告诉我们有关目标的信息。在这些图中,数据点的颜色代表目标。
图 17:气泡图
在气泡图中,我们可以通过使用绘图工具指定 x 轴和 y 轴以及表示特征大小的第三维(气泡大小)来同时可视化四个特征。目标类别由颜色表示。
在总蛋白的低端,我们看到直肠温度中值范围内的 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 |
| 聚集细胞体积 | 13.5733 | 聚集细胞体积 | 0.020932 |
| 直肠指检-粪便 | 11.88078 | 直肠指检-粪便 | 0.018322 |
| 毛细血管充盈时间 | 8.078319 | 毛细血管充盈时间 | 0.012458 |
| 呼吸频率 | 7.616813 | 呼吸频率 | 0.011746 |
| 总蛋白 | 5.616841 | 总蛋白 | 0.008662 |
| 鼻胃管反流 PH | 2.047565 | 鼻胃管反流 PH | 0.003158 |
| 脉搏 | 1.931511 | 脉搏 | 0.002979 |
| 年龄 | 0.579216 | 年龄 | 8.93E-04 |
| 鼻胃管 | 0.237519 | ||
| 腹腔穿刺总蛋白 | 0.181868 | ||
| 直肠温度 | 0.139387 |
表 3:由两种不同技术(卡方检验和吉尼指数)确定的关联特征。
模型流程
在 RapidMiner 中,您可以使用具有输入和输出的运算符定义计算流程,这些运算符可以串联在一起。以下流程表示执行整个操作集的流程,从加载训练和测试数据,处理缺失值,按相关性加权特征,过滤掉得分低的特征,训练使用 Bagging 和随机森林作为算法的集成模型,最后将学习模型应用于测试数据并输出性能指标。请注意,应用于训练数据集的所有预处理步骤必须以相同的顺序通过 Group Models 运算符应用于测试集:
图 18:RapidMiner 流程图
在流程的顶部,训练集由最左侧的运算符摄取,随后排除非预测因子(医院编号、CP 数据)和自预测因子(病变 1)。这之后是替换缺失值(对于连续属性使用均值,对于分类属性使用众数)的运算符。接下来,特征权重运算符根据卡方统计量评估每个特征的权重,随后是一个忽略低权重特征的过滤器。然后,使用 Bagging 和随机森林分类器训练模型,使用预处理后的数据集。
在训练数据上使用的预处理步骤通过 Group Models 运算符按适当顺序分组,并在倒数第二步应用于测试数据。最后,在最后一步,对测试示例上的目标变量的预测以及混淆矩阵和其他性能指标进行评估和展示。
模型评估指标
我们现在可以比较各种模型的结果。如果您一直跟随,您可能会发现您的结果与这里展示的不同——这可能是由于某些学习算法的随机性质,或者模型中使用的某些超参数值的差异。
我们考虑了三个不同的训练数据集:
-
原始训练数据包含缺失值
-
处理缺失值的转换后的训练数据
-
处理缺失值并应用特征选择(卡方检验)以选择高度区分性特征的转换后的训练数据
我们在每个数据集上考虑了三组不同的算法:
-
线性算法(朴素贝叶斯和逻辑回归)
-
非线性算法(决策树和 KNN)
-
集成算法(Bagging、Ada Boost 和随机森林)
混淆度指标评估
| 模型 | 真阳性率 | 假阳性率 | 精确率 | 特异性 | 准确率 | AUC |
|---|---|---|---|---|---|---|
| 朴素贝叶斯 | 68.29% | 14.81% | 87.50% | 85.19% | 75.00% | 0.836 |
| 逻辑回归 | 78.05% | 14.81% | 88.89% | 85.19% | 80.88% | 0.856 |
| 决策树 | 68.29% | 33.33% | 75.68% | 66.67% | 67.65% | 0.696 |
| k-NN | 90.24% | 85.19% | 61.67% | 14.81% | 60.29% | 0.556 |
| Bagging (GBT) | 90.24% | 74.07% | 64.91% | 25.93% | 64.71% | 0.737 |
| Ada Boost (朴素贝叶斯) | 63.41% | 48.15% | 66.67% | 51.85% | 58.82% | 0.613 |
表 4:在具有缺失值的马肠炎数据上训练的模型在未见(测试)数据上的结果
| 模型 | 真阳性率 | 假阳性率 | 精确度 | 特异性 | 准确率 | AUC |
|---|---|---|---|---|---|---|
| 朴素贝叶斯 | 68.29% | 66.67% | 60.87% | 33.33% | 54.41% | 0.559 |
| 逻辑回归 | 78.05% | 62.96% | 65.31% | 37.04% | 61.76% | 0.689 |
| 决策树 | 97.56% | 96.30% | 60.61% | 3.70% | 60.29% | 0.812 |
| k-NN | 75.61% | 48.15% | 70.45% | 51.85% | 66.18% | 0.648 |
| Bagging (随机森林) | 97.56% | 74.07% | 66.67% | 25.93% | 69.12% | 0.892 |
| Bagging (GBT) | 82.93% | 18.52% | 87.18% | 81.48% | 82.35% | 0.870 |
| Ada Boost (朴素贝叶斯) | 68.29% | 7.41% | 93.33% | 92.59% | 77.94% | 0.895 |
表 5:在替换缺失值后训练的模型在马肠炎数据上的未见(测试)数据结果
| 模型 | 真阳性率 | 假阳性率 | 精确度 | 特异性 | 准确率 | AUC |
|---|---|---|---|---|---|---|
| 朴素贝叶斯 | 75.61% | 77.78% | 59.62% | 29.63% | 54.41% | 0.551 |
| 逻辑回归 | 82.93% | 62.96% | 66.67% | 37.04% | 64.71% | 0.692 |
| 决策树 | 95.12% | 92.59% | 60.94% | 7.41% | 60.29% | 0.824 |
| k-NN | 75.61% | 48.15% | 70.45% | 51.85% | 66.18% | 0.669 |
| Bagging (随机森林) | 92.68% | 33.33% | 80.85% | 66.67% | 82.35% | 0.915 |
| Bagging (GBT) | 78.05% | 22.22% | 84.21% | 77.78% | 77.94% | 0.872 |
| Ada Boost (朴素贝叶斯) | 68.29% | 18.52% | 84.85% | 81.48% | 73.53% | 0.848 |
表 6:使用卡方统计技术选择的特征在马肠炎数据上训练的模型在未见(测试)数据上的结果
ROC 曲线、提升曲线和增益图
性能图使我们能够直观地评估三个实验中使用的两个模型——在没有替换缺失数据的情况下,以及在用卡方加权特征替换缺失数据后——并将它们相互比较。成对的图显示了我们在本章 earlier 中了解到的每个线性(逻辑回归)、非线性(决策树)和集成(Bagging,使用梯度提升树)技术的性能曲线,这些曲线来自两个实验的结果。
图 19:使用缺失数据进行的实验的 ROC 性能曲线
图 20:使用缺失数据进行的实验的累积增益性能曲线
图 21:使用缺失数据进行的实验的升力性能曲线
结果、观察和分析
处理缺失值的影响是显著的。在七个分类器中,除了朴素贝叶斯和逻辑回归之外,当按照各种指标(包括 AUC、精确度、准确率和特异性)处理缺失值时,所有分类器都表现出显著的改进。这告诉我们,处理可能“噪声”的缺失值是数据转换的重要方面。朴素贝叶斯有其处理缺失值的内部方式,而我们实验的结果显示,它在处理空值方面比我们的外部转换做得更好。但总的来说,当考虑到所有分类器时,转换缺失值的概念似乎是有益的。
如建模部分所述,一些算法需要正确处理缺失值和特征选择才能获得最佳性能。从结果中我们可以看到,例如,决策树的性能从缺失数据的 0.696 逐步提高到管理缺失数据的 0.812,以及与特征选择一起处理缺失数据时的最佳性能 0.824。七个分类器中有六个在执行这两个步骤时,AUC(以及其他指标)的性能都有所提高;比较AUC的表 5和表 6提供了这些快速见解。这证明了在进行建模之前进行预处理(如处理缺失值和特征选择)的重要性。
从结果中得出的一个主要结论是,问题高度非线性,因此从最简单的决策树到集成随机森林的多数非线性分类器都表现出色。最佳性能来自元学习算法随机森林,在适当处理缺失值并使用最相关特征进行训练的情况下。以 AUC 衡量的最佳线性模型性能是逻辑回归的 0.856(数据如原样,即包含缺失值),而随机森林通过适当处理缺失数据并伴随特征选择实现了 AUC 性能的 0.915。一般而言,如表 3所示,非线性分类器或元学习者在大多数性能指标上都优于线性分类器。
正确处理缺失值,这可以被视为“噪声”,可以显著提高 AdaBoost 的性能。AUC 从 0.613 提高到 0.895,FPR 从 48.15%降低到 7.41%。这确实符合该技术的预期理论行为。
与其他常见技术相比,元学习技术,即使用提升和袋装概念的技巧,在处理现实世界数据时相对更有效。这似乎由结果得到证实,因为基于经过适当噪声处理的 AdaBoost(以朴素贝叶斯作为基学习器)在大多数指标上优于朴素贝叶斯,如表 5和表 6所示。随机森林和 GBTs 与 AdaBoost 相比,在表 6中也表现出最佳性能,再次证实了正确的过程和集成学习可以在现实世界的噪声数据集中产生最优化结果。
注意
本章中 WEKA 和 RapidMiner 处理文件的全部数据、模型和结果均可在以下网址找到:github.com/mjmlbook/mastering-java-machine-learning/tree/master/Chapter2。
摘要
监督学习是机器学习应用中占主导地位的技术。该方法包括一系列步骤,从数据探索、数据转换和数据采样开始,通过特征减少、模型构建,最终到模型评估和比较。过程中的每一步都涉及一些决策,这些决策必须回答关键问题:我们应该如何插补缺失值?我们应该使用什么数据采样策略?在数据集中的噪声量和规定的可解释性目标下,最合适的算法是什么?本章展示了将这些过程和技术应用于现实世界问题——使用 UCI 马绞痛数据集的分类问题。
无论问题是分类问题,目标是一个分类值,还是回归问题,目标是一个实值连续变量,用于监督学习的方法都是相似的。在本章中,我们使用了分类进行说明。
第一步是数据分析,这包括特征描述性统计、使用单变量和多变量特征分析的可视化分析。借助各种绘图类型,我们可以揭示数据中的不同趋势,并检查某些特征可能与标签值以及彼此相关或无关。数据分析之后是数据预处理,其中技术包括处理噪声的方法,例如缺失数据的情况,以及异常值,以及通过归一化和离散化准备数据以供建模技术使用。
在预处理之后,我们必须适当地将数据分成训练、验证和测试样本。根据数据和问题的特性,可能使用不同的采样策略,例如,当数据有偏斜或当我们有一个多类分类问题时。根据数据大小,交叉验证是创建单独验证集的常见替代方案。
下一步是剔除无关特征。在过滤方法中,使用单变量分析的技术要么是基于熵的(信息增益、增益比率)要么是基于统计假设检验的(卡方检验)。在主要的多变量方法中,目标是当考虑在一起时减少冗余特征,或者使用与目标标签相关性最高的特征。在包装方法中,我们使用机器学习算法来告诉我们哪些特征更具区分性。最后,一些学习技术将特征选择嵌入到算法中,通常使用岭回归或 Lasso 技术作为正则化项。这些代表嵌入式方法。
建模技术可以广泛地分为线性、非线性以及集成方法。在线性算法中,特征类型可以决定使用哪种算法——线性回归(仅限数值特征)、朴素贝叶斯(数值或分类)和逻辑回归(仅限数值特征,或分类转换为数值)是主要的工具。在选择它们或解释使用这些模型进行学习的结果时,必须理解每种方法的优缺点。
决策树、k-NN 和 SVM 都是非线性技术,每种技术都有其自身的优势和局限性。例如,可解释性是决策树的主要优势。k-NN 在面对噪声数据时具有鲁棒性,但在处理高维数据时表现不佳。SVM 的可解释性较差,但当数据集有限且特征数量较多时,其表现依然出色。
在多个不同模型协作的情况下,集成方法可以充分利用所有模型的优势。Bagging 和 Boosting 都是相对于它们所使用的基学习器在集成中表现更好的技术,并且在许多应用中都很受欢迎。
最后,评价模型性能和比较模型之间有哪些策略和方法可以使用?验证集或交叉验证在泛化到未见数据的能力中起着至关重要的作用。从混淆矩阵中衍生出的性能评估指标被普遍用于评估分类器;某些指标在某些领域和学科中比其他指标更常用。ROC、增益和提升曲线是随着分类阈值变化时模型性能范围的优秀可视化表示。在成对比较模型时,使用基于统计假设检验的几个指标。Wilcoxon 和 McNemar 的检验是两种非参数检验;配对 t 检验是参数方法的一个例子。同样,在比较多个算法时,Friedman 检验是一种常用的非参数检验,它不对数据分布做出假设。ANOVA 是参数检验,它假设指标服从正态分布且方差相等。
本章的最后几节介绍了使用 RapidMiner 工具开发并评估用于从 UCI 马绞痛数据集测试数据分类生成的模型的流程。设计了三个实验来比较和对比在不同数据预处理条件下的模型性能,即不处理缺失数据、使用标准技术替换缺失数据,以及最终在空替换后进行特征选择。在每个实验中,我们选择了多个线性、非线性以及集成方法。作为整体流程的一部分,我们说明了如何使用建模环境。我们可以从结果中得出有意义的结论,这些结论不仅让我们对数据有了深入了解,还展示了不同情况下各种技术类别的相对优势和劣势。我们得出结论,数据高度非线性,集成学习在与其他技术相比时显示出明显的优势。
参考文献
-
D. Bell 和 H. Wang (2000). 相关性形式化及其在特征子集选择中的应用. 机器学习, 41(2):175–195.
-
J. Doak (1992). 特征选择方法及其在计算机安全中的应用评估. 技术报告 CSE–92–18, 加州大学戴维斯分校,计算机科学系.
-
M. Ben-Bassat (1982). *在特征评估中使用距离度量、信息度量以及误差界限. 在 P. R. Krishnaiah 和 L. N. Kanal 编辑的《统计学手册》,第 2 卷,第 773–791 页,North Holland.
-
Littlestone N, Warmuth M (1994) 加权多数算法. 《信息计算》. 108(2):212–261
-
Breiman L., Friedman J.H., Olshen R.A., Stone C.J. (1984) 分类与回归树. Wadsforth 国际集团.
-
B. Ripley(1996), 模式识别与神经网络. 剑桥大学出版社,剑桥.
-
Breiman, L., (1996). Bagging 预测器,机器学习. 24 123-140.
-
Burges, C. (1998). 支持向量机在模式识别中的教程. 《数据挖掘与知识发现》. 2(2):1-47.
-
Bouckaert, R. (2004), 在连续变量上表现良好的朴素贝叶斯分类器,计算机科学讲义, 第 3339 卷,第 1089 – 1094 页.
-
Aha D (1997). 懒惰学习, Kluwer 学术出版社,多德雷赫特
-
Nadeau, C. and Bengio, Y. (2003), 泛化误差的推理. 在《机器学习》52:239– 281.
-
Quinlan, J.R. (1993). C4.5: 机器学习程序, Morgan Kaufmann, 旧金山.
-
Vapnik, V. (1995), 统计学习理论的本质. Springer Verlag.
-
Schapire RE, Singer Y, Singhal A (1998). Boosting 和 Rocchio 应用于文本过滤. 在 SIGIR '98: 第 21 届国际信息检索研究与发展年度会议论文集,第 215–223 页
-
Breiman L.(2001). 随机森林. 《机器学习》, 45 (1), pp 5-32.
-
Nathalie Japkowicz 和 Mohak Shah (2011). 评估学习算法:从分类的角度. 剑桥大学出版社.
-
Hanley, J. & McNeil, B. (1982). 受试者工作特征曲线下面积的意义和使用. 放射学 143, 29–36.
-
Tjen-Sien, L., Wei-Yin, L., Yu-Shan, S. (2000). 比较三十三种旧的和新的分类算法的预测准确性、复杂性和训练时间. 机器学习 40: 203–228.
-
A. W. Moore 和 M. S. Lee (1994). 最小化交叉验证错误的有效算法. 在第 11 届国际机器学习会议论文集中,第 190–198 页,新不伦瑞克州新布鲁斯威克,Morgan Kaufmann 出版社.
-
Nitesh V. Chawla 等人 (2002). 合成少数类过采样技术. 人工智能研究杂志. 16:321-357.
第三章:无监督机器学习技术
在上一章中,我们专注于监督学习,即从标记的训练数据集中学习。在现实世界中,获取带有标签的数据往往很困难。在许多领域,由于数据生成的规模或速度,即使由于标记的成本或难度,实际上也不可能对数据进行标记。在这些情况下,无监督学习,以各种形式,提供了探索、可视化和执行描述性和预测建模的正确方法。在许多应用中,无监督学习通常与监督学习结合作为第一步,以隔离有趣的数据元素进行标记。
在本章中,我们将关注各种适用于无监督学习的方法、技术和算法。我们首先指出在处理数据和转换方面,监督学习和无监督学习共有的问题。然后,我们将简要介绍由于缺乏“真实情况”和在这些条件下的学习性质,无监督学习面临的特定挑战。
然后,我们将讨论应用于未标记数据集的特征分析和降维技术。接下来是聚类方法的广泛介绍和关于实际应用中各种算法的讨论,就像我们在第二章中做的那样,实际应用中的监督学习,展示每个算法的工作原理、何时使用它以及其优势和局限性。我们将通过介绍不同的聚类评估技术来结束对聚类的讨论。
在处理聚类之后,我们将探讨异常检测的主题。我们将对比各种技术和算法,说明为什么某些对象在给定数据集中是异常的——也称为异常值。
本章将以聚类和异常检测实验结束,这些实验使用真实世界的数据集进行,并对获得的结果进行分析。在本案例研究中,我们将使用 ELKI 和 SMILE Java 库进行机器学习任务,并展示实验的代码和结果。我们希望这将为读者提供对这些工具强大功能和易用性的感觉。
与监督学习共有的问题
我们讨论的许多与监督学习相关的问题也与无监督学习相关。其中一些列在这里:
-
算法处理的特征类型:大多数聚类和异常算法需要数值表示才能有效工作。对分类或有序数据进行转换必须谨慎进行
-
维度灾难:具有大量特征会导致稀疏空间,影响聚类算法的性能。必须选择一些选项来适当地降低维度——要么是特征选择,只保留最相关特征的一个子集,要么是特征提取,将特征空间转换成低维空间的新一组主变量
-
内存和训练时间上的可扩展性:许多无监督学习算法由于内存或训练时间限制,无法扩展到几千个实例以上
-
数据中的异常值和噪声:许多算法受到特征中的噪声、异常数据的存在或缺失值的影响。它们需要被适当地转换和处理
无监督学习的特定问题
以下是一些与无监督学习技术相关的问题:
-
参数设置:确定特征数量、特征的有用性、聚类数量、聚类的形状等问题,对某些无监督方法构成了巨大的挑战
-
评估方法:由于缺乏真实标签,无监督学习方法是不良设定的,因此算法的评估变得非常主观。
-
硬标签或软标签:许多无监督学习问题需要以排他性或概率方式对数据进行标记。这对许多算法来说是一个问题
-
结果和模型的可解释性:与监督学习不同,缺乏真实标签和一些算法的性质使得从模型和标签中解释结果变得更加困难
特征分析和降维
需要掌握的第一批工具是不同的特征分析和降维技术。与监督学习一样,降维的需求源于与之前讨论的特征选择和降维类似的多重原因。
较少的判别维度使得数据的可视化和聚类变得容易得多。在许多应用中,无监督降维技术被用于压缩,这可以用于数据的传输或存储。当大数据有额外开销时,这尤其有用。此外,应用降维技术可以提高许多算法在内存和计算速度方面的可扩展性。
符号表示
我们将使用与监督学习章节中使用的类似符号。示例在 d 维度上,表示为向量:
x = (x*[1],x[2],…x[d]* )**^T
包含 n 个示例的整个数据集可以表示为一个观察矩阵:
降维的思想是找到 k ≤ d 个特征,通过输入特征的变换、投影或组合,使得较低维度的 k 能够捕获或保留原始数据集的有趣特性。
线性方法
线性降维方法是一些最古老的统计技术,用于减少特征或将数据转换到较低维度,同时保留有趣的判别特性。
从数学上讲,我们使用线性方法执行一个变换,即通过原始数据元素的线性变换来创建一个新的数据元素:
s = Wx
在这里,W[k × d] 是线性变换矩阵。变量 s 也被称为潜在或隐藏变量。
在这个主题中,我们将讨论两种最实用且经常使用的方 法。我们将列出这些技术的变体,以便读者可以使用这些工具进行实验。这里的主要假设——通常形成限制——是变换之间的线性关系。
主成分分析(PCA)
PCA 是降维中广泛使用的技术(参考文献 [1])。原始坐标系被旋转到一个新的坐标系,该坐标系利用了数据中的最大方差方向,从而在低维子空间中产生了在原始特征空间中相关的变量。PCA 对特征的缩放敏感。
输入和输出
PCA 通常对数值数据集有效。许多工具提供了对名义特征的类别到连续的转换,但这会影响性能。主成分的数量,或k,也是用户提供的输入。
它是如何工作的?
PCA 在其最基本的形式中,试图将数据投影到新的轴上,这些轴被称为主成分。主成分是从原始空间捕获最大方差方向的投影。简单来说,PCA 通过将数据的原始轴旋转到最大方差的方向来找到第一个主成分。该技术通过再次确定下一个最佳轴(与第一个轴正交),寻求第二个最高方差,以此类推,直到捕获大多数方差。通常,大多数工具提供选择主成分数量的选项,或者选择继续寻找组件,直到捕获原始数据集中方差的一定百分比,例如 99%。
从数学上讲,寻找最大方差的目标可以写成
λ v = Cv 是特征分解
这相当于:
在这里,W 是主成分,S 是输入数据的新变换。通常,在计算部分使用特征值分解或奇异值分解。
图 1:主成分分析
优点和局限性
-
PCA 的一个优点是它在最小化数据重建误差方面是最佳的。
-
PCA 假设正态分布。
-
对于高维的大型数据集,计算协方差矩阵可能会变得非常密集。作为替代,可以使用奇异值分解(SVD),因为它是迭代的,并且不需要显式的协方差矩阵。
-
当数据中存在噪声时,PCA 会存在问题。
-
当数据位于复杂的流形上时,PCA 会失败,这是一个我们将在非线性降维部分讨论的话题。
-
PCA 假设特征之间存在相关性;在没有这些相关性的情况下,它无法进行任何转换;相反,它只是对它们进行排序。
-
通过将原始特征空间转换成一组新的变量,PCA 导致数据可解释性降低。
-
有许多其他流行的 PCA 变体,它们克服了 PCA 的一些偏差和假设。
独立成分分析(ICA)假设存在来自源的混合的非高斯分布,并使用生成技术尝试在较小的混合或组件中找到原始数据的分解(参考文献 [2])。PCA 和 ICA 之间的关键区别在于,PCA 创建的是不相关的组件,而 ICA 创建的是独立的组件。
从数学上讲,它假设 是独立源 ∈
的混合,使得每个数据元素 y = [y ¹ ,y ² ,….y ^k ]^T,独立性由
表示:
概率主成分分析(PPCA)基于使用混合模型和最大似然公式通过期望最大化(EM)来找到组件。它克服了 PCA 面临的缺失数据和异常值影响的问题。
随机投影(RP)
当数据可以通过大间隔分离——即使它是高维数据——一个人可以将数据随机投影到低维空间,而不会影响分离性,并且使用相对较少的数据实现良好的泛化。随机投影使用这种技术,具体细节在此描述(参考文献 [4])。
输入和输出
随机投影可以与数值和分类特征一起工作,但分类特征会被转换为二进制。输出是输入数据元素的低维表示。要投影的维度数 k 是用户定义输入的一部分。
它是如何工作的?
这种技术使用随机投影矩阵将输入数据投影到低维空间。原始数据 被转换到低维空间
,其中 k << p,使用以下方法:
在这里,k x d 矩阵 R 中的列是独立同分布的零均值正态变量,并缩放到单位长度。R 随机矩阵的构建有几种使用概率抽样的变体。RP 的计算复杂度为 O(knd),这比 PCA 的缩放效果要好得多。在许多实际数据集中,已经证明 RP 的结果与 PCA 相当,并且可以扩展到大型维度和数据集。
优点和局限性
-
它可以扩展到非常大的数据集大小和维度值。在文本和图像学习问题中,对于大型维度,该技术已被成功用作预处理技术。
-
在使用 RP 时,有时可能会发生较大的信息损失。
多维尺度分析(MDS)
MDS 有许多形式——经典、度量和非度量。MDS 的主要思想是保留成对相似度/距离值。它通常涉及将高维数据转换到两个或三个维度(参考文献 [5])。
输入和输出
MDS 可以根据用户选择的距离函数与数值和分类数据一起工作。要转换到的维数 k 是用户定义的输入。
如何工作?
给定 n 个数据元素,计算一个 n x n 的亲和度或距离矩阵。有使用距离的选择,例如欧几里得距离、马氏距离,或者使用相似度概念,如余弦相似度、Jaccard 系数等。MDS 在其最基本的形式中试图在低维空间中找到距离矩阵的映射,其中变换点之间的欧几里得距离与亲和度矩阵相似。
从数学上讲:
这里 输入空间和
映射空间。
如果使用核将输入亲和度空间进行转换,则 MDS 成为降维的非线性方法。当输入空间中点之间的距离是欧几里得距离时,经典 MDS 与 PCA 等价。
优点和局限性
-
关键缺点是需要主观选择所需的低维来解释高维数据,通常限制在两个或三个维度内,这对于人类来说是有局限的。一些数据可能无法有效地映射到这个低维空间。
-
优点是您可以使用该框架将线性和非线性映射到最低维度。
非线性方法
通常,非线性降维涉及对线性方法(如 KPCA)中的计算执行非线性变换,或者在低维中找到非线性关系,如流形学习。在某些领域和数据集中,低维数据结构是非线性的——这就是 KPCA 等技术的有效之处——而在某些领域,数据在低维中不会展开,你需要流形学习。
核主成分分析(KPCA)
核 PCA 使用第二章中描述的核技巧,实际应用中的监督学习,与 PCA 算法一起在多维空间中转换数据,以找到有效的映射(参考文献 [6])。
输入和输出
与 PCA 类似,增加了核和核参数的选择。例如,如果选择径向基函数(RBF)或高斯核,则核以及伽马参数成为用户选择的值。
如何工作?
与前一章中讨论的支持向量机(SVM)一样,KPCA 使用“核技巧”将输入空间转换为高维特征空间。然后在转换空间中执行寻找最大方差的所有 PCA 机制。
如 PCA:
通过构建N x N矩阵,而不是使用ϕ *(x)*进行实际变换,使用核方法对输入空间应用非线性变换,而不是线性协方差矩阵。
k(x,y) = (( ϕ (x), ϕ (y)) = ϕ (x) ^T ϕ (y)
由于核变换实际上并没有将特征转换到显式的特征空间,因此找到的主成分可以解释为数据在组件上的投影。在以下图中,一个使用 scikit-learn 示例生成的二进制非线性数据集(参考文献 [27])展示了使用 RBF 核进行 KPCA 后的线性分离,并通过逆变换返回几乎相同的输入空间:
图 2:圆数据集上的 KPCA 和逆变换。
优点和局限性
-
KPCA 克服了 PCA 所呈现的非线性映射。
-
KPCA 与标准 PCA 在异常值、噪声和缺失值方面存在类似问题。有稳健的方法和变体可以克服这些问题。
-
由于核矩阵的增加,KPCA 在空间上存在可扩展性问题,这可能在具有高维的大型数据集中成为瓶颈。在这些情况下,可以使用 SVD 作为替代。
流形学习
当高维数据嵌入到非线性但具有复杂结构的低维空间时,流形学习非常有效。
输入和输出
流形学习算法需要两个由用户提供的参数:k,代表初始搜索的邻居数量,以及n,流形坐标的数量。
它是如何工作的?
如下图中所示,使用 scikit-learn 工具(参考文献 [27])绘制的三维 S 曲线,在 2D PCA 和 2D 流形中使用 LLE 表示。观察蓝色、绿色和红色点在 PCA 表示中混合在一起,而使用 LLE 进行流形学习表示时,颜色被干净地分离。还可以观察到,欧几里得距离的秩排序在流形表示中不保持:
图 3:PCA 和流形学习后的数据表示
为了保留结构,保留的是测地距离而不是欧几里得距离。一般的方法是构建一个图结构,如邻接矩阵,然后根据不同的假设计算测地距离。在 Isomap 算法中,全局成对距离被保留(参考文献 [7])。在局部线性嵌入(LLE)算法中,映射是为了处理局部邻域,即附近的点在变换中映射到附近的点(参考文献 [9])。拉普拉斯特征映射与 LLE 类似,但它通过使用图拉普拉斯来尝试保持 LLE 中的“局部性”而不是“局部线性”,(参考文献 [8])。
优点和局限性
-
Isomap 是非参数的;它保留了全局结构,没有局部最优解,但速度受限。
-
LLE 和拉普拉斯特征映射是非参数的,没有局部最优解,速度快,但不保留全局结构。
聚类
聚类算法可以根据技术、输出、过程和其他考虑因素以不同的方式进行分类。在本主题中,我们将介绍一些最广泛使用的聚类算法。
聚类算法
目前有丰富的聚类技术用于广泛的多种应用。本节介绍其中的一些,解释它们的工作原理,它们可以用于哪些类型的数据,以及它们的优缺点。这些包括基于原型、基于密度、基于概率分区、基于层次、基于图理论和基于神经网络的算法。
k-Means
k-means 是一种基于质心或原型迭代的算法,采用分区和重新定位方法(参考文献 [10])。k-means 根据使用的距离度量找到球形形状的簇,例如在欧几里得距离的情况下。
输入和输出
k-means 可以处理大多数数值特征。许多工具提供类别到数值的转换,但计算中存在大量类别可能会导致非最优的聚类。用户定义的k,即要找到的聚类数量,以及用于计算接近度的距离度量是两个基本输入。k-means 生成聚类,将数据关联到每个聚类,以及聚类的质心作为输出。
它是如何工作的?
最常见的变体称为 Lloyd 算法,它通过从集合中随机选择数据元素来初始化给定数据集的k个质心。它使用某些距离度量(如欧几里得距离)将每个数据元素分配到最近的质心。然后,它计算每个聚类的数据点的平均值以形成新的质心,这个过程重复进行,直到达到最大迭代次数或质心没有变化。
从数学上讲,聚类的每一步都可以看作是一个优化步骤,其中要优化的方程由以下给出:
在这里,ci 是属于聚类i的所有点。最小化问题被归类为 NP-hard,因此 k-Means 有陷入局部最优的倾向。
优点和局限性
-
选择聚类数量k是困难的,但通常可以使用搜索技术,如为不同的值改变k并测量如平方误差和等指标来找到良好的阈值。对于较小的数据集,可以尝试层次 k-means。
-
对于较小的k值,k-means 的收敛速度可以比大多数算法快,并且可以找到有效的全局聚类。
-
k-means 的收敛可能受到质心初始化的影响,因此有许多变体执行具有不同种子的随机重启等。
-
当存在异常值和噪声数据点时,k-means 的表现可能会很糟糕。使用稳健技术(如中位数而不是平均值)、k-Medoids 在一定程度上克服了这一点。
-
当聚类形状任意或具有不同的密度时,k-means 无法找到有效的聚类。
DBSCAN
基于密度的空间聚类应用噪声(DBSCAN)是一种基于密度的划分算法。它将空间中的密集区域与稀疏区域分开(参考文献 [14])。
输入和输出
DBSCAN 仅使用数值特征。用户定义的参数是MinPts和由ϵ给出的邻域因子。
它是如何工作的?
算法首先找到每个点p的ϵ邻域,由给出。一个高密度区域被定义为在ϵ邻域中点的数量大于或等于给定MinPts的区域;围绕这样一个ϵ邻域定义的点被称为核心点。位于核心点的ϵ邻域内的点被认为是直接可达的。所有可以通过从一个直接可达的核心点到另一个直接可达的第二点的直接可达点跳跃,以此类推,实际上可以到达的核心点被认为是属于同一个簇。此外,任何在其ϵ-邻域中少于MinPts的点,但可以从核心点直接到达的点,属于与核心点相同的簇。这些位于簇边缘的点被称为边界点。任何既不是核心点也不是边界点的点被称为噪声点。
优点和局限性
-
DBSCAN 算法不需要指定簇的数量,可以从数据中自动找到它。
-
DBSCAN 可以找到各种形状和大小的簇。
-
DBSCAN 具有内置的鲁棒性以应对噪声,并可以从数据集中找到异常值。
-
DBSCAN 在识别点和将其分类为边界或核心时并不完全确定,这取决于数据处理顺序。
-
选择如欧几里得距离的距离度量通常会影响性能,这是由于维度的诅咒。
-
当存在密度变化大的簇时,{MinPts, ϵ*}*的静态选择可能是一个很大的限制。
均值漂移
均值漂移是许多基于图像、视频和运动检测数据集的有效聚类算法(参考文献 [11])。
输入和输出
在均值漂移算法中,只接受数值特征作为数据输入。核的选择和核带宽是用户驱动的选择,这些选择会影响性能。均值漂移生成数据点的模式并在模式周围聚类数据。
如何工作?
均值漂移基于统计概念核密度估计(KDE),这是一种概率方法,用于从样本中估计潜在的数据分布。
对于给定带宽h的核K(x)的核密度估计由以下公式给出:
对于具有d维度的n个点。均值漂移算法通过将每个数据点移动到局部密度增加的方向来工作。为了估计这个方向,将梯度应用于核密度估计,梯度具有以下形式:
这里 g(x)= –K'(x)是核的导数。向量,m(x),被称为均值漂移向量,它用于将点移动到局部密度增加的方向。
x^((t+1)) = x^t + m(x)
此外,当密度函数的梯度为零时,它保证收敛。最终位于相似位置的点被标记为属于同一区域的簇。
优点和局限性
-
均值漂移是非参数的,不对数据分布做出任何假设。
-
它可以找到形状和大小各异的非复杂簇。
-
没有必要显式给出簇的数量;带宽参数的选择,该参数用于估计,隐式地控制簇。
-
均值漂移对于给定的带宽参数没有局部最优解,因此它是确定性的。
-
由于核密度估计(KDE),均值漂移对异常值和噪声点具有鲁棒性。
-
均值漂移算法计算缓慢,并且在大数据集上扩展性不好。
-
带宽选择应谨慎进行;否则可能会导致模式合并,或者出现额外的浅层模式。
期望最大化(EM)或高斯混合模型(GMM)
GMM 或 EM 是一种基于概率划分的方法,它使用基于概率分布的技术将数据划分为 k 个聚类(参考文献 [13])。
输入和输出
只允许在 EM/GMM 中使用数值特征。模型参数是混合成分的数量,由 k 给定。
如何工作?
GMM 是一种生成方法,它假设存在 k 个高斯成分,每个高斯成分有一个均值 µ[i] 和协方差 Ʃ[i]。以下表达式表示给定 k 个高斯成分的数据集的概率:
对于每个高斯成分,找到均值 {µ[1], µ[2], …µ[k]} 的两步任务,使得分配给每个数据点的概率最大化,这是通过期望最大化(EM)过程完成的。
迭代过程可以定义为 E 步,在迭代 i 中计算每个数据点的期望簇:
M 步最大化计算给定属于簇的数据点的 µt+1:
EM 过程可能导致 GMM 收敛到局部最优。
优点和局限性
-
与任何特征都配合得很好;对于分类数据,计算离散概率,而对于数值数据,则估计连续概率函数。
-
它具有计算可扩展性问题。它可能导致局部最优。
-
k 个高斯成分的值必须先验地给出,类似于 k-Means。
层次聚类
层次聚类是一种基于连接性的聚类方法,广泛用于分析和探索数据,而不仅仅用作聚类技术(参考文献 [12])。其思路是迭代地构建二叉树,从顶部或底部开始,使得相似点聚集在一起。树的每一层都提供了数据的有趣总结。
输入和输出
层次聚类通常基于基于相似性的转换,因此接受分类数据和连续数据。层次聚类只需要相似度或距离度量来计算相似度,不需要像 k-means 或 GMM 那样需要聚类数量。
如何工作?
层次聚类有许多变体,但我们将讨论聚合聚类。聚合聚类首先将所有数据元素放入它们自己的组中。然后,它根据使用的相似度度量迭代合并组,直到只剩下一个组。树的每一层或分组提供了数据的独特分割,分析师需要选择适合问题域的正确层。聚合聚类通常使用树状图进行可视化,该图显示了在相似性处的数据点合并。常用的相似度方法选择包括:
-
单链接:相似性是点群之间的最小距离:
-
完全链接:相似性是点群之间的最大距离:
-
平均链接:点群之间的平均相似性:
优点和局限性
-
即使数据中可能没有这样的结构,层次聚类也会在数据上施加层次结构。
-
相似度度量的选择可能导致合并和树状图的大幅不同,因此它对用户输入有很大的依赖性。
-
层次聚类在数据点增加时容易受到可扩展性的影响。根据使用的距离度量,它可能对噪声和异常值敏感。
自组织映射(SOM)
SOM 是一种基于神经网络的算法,可以被视为降维、流形学习或聚类技术(参考文献 [17])。神经生物学研究表明,我们的大脑将不同的功能映射到不同的区域,称为拓扑图,这是该技术的基础。
输入和输出
在 SOM 中仅使用数值特征。模型参数包括距离函数(通常使用欧几里得距离)以及以宽度和高度或晶格中的单元格数量表示的晶格参数。
如何工作?
SOM,也称为 Kohonen 网络,可以被视为一个双层神经网络,其中每个输出层是一个二维晶格,按行和列排列,每个神经元都与输入层完全连接。
与神经网络类似,权重最初使用随机值生成。该过程有三个不同的训练阶段:
-
竞争阶段:在这个阶段,神经元根据判别值进行竞争,通常基于神经元权重与输入向量的距离;这样,两个神经元之间的最小距离决定了输入被分配给哪个神经元。使用欧几里得距离,输入 xi 与晶格位置 (j, i) 的神经元之间的距离由 w[ji] 给出:
-
合作阶段:在这个阶段,获胜神经元在其拓扑邻域中找到最佳空间位置。对于给定神经元 (j, i),获胜神经元 I(x) 的拓扑邻域,距离 S[ij],邻域大小为 σ,定义为:
邻域大小以某种已知衰减函数(如指数函数)随时间减少的方式定义:
-
自适应阶段:在这个阶段,获胜神经元及其邻域神经元的权重被更新。权重的更新通常使用以下方式完成:
在这里,学习率 n(t) 再次定义为与邻域大小类似的指数衰减。
使用统一距离矩阵(U-Matrix)的 SOM 可视化创建了一个衡量神经元权重与其邻居之间平均距离的单个度量,然后可以通过不同的颜色强度进行可视化。这有助于识别邻域中的相似神经元。
优点和局限性
-
SOM 的最大优点是它易于理解,并且使用 U-matrix 可视化对数据进行二维聚类可以非常有效地理解模式。
-
相似性/距离函数的选择对聚类有巨大影响,必须由用户仔细选择。
-
SOM 的计算复杂度使得它无法在大于几千个数据集上使用。
谱聚类
谱聚类是一种基于图理论的分区聚类技术(参考文献 [15])。它将数据集转换为连通图,并进行图分区以找到聚类。这是图像处理、运动检测和一些基于非结构化数据领域的流行方法。
输入和输出
谱聚类仅使用数值特征。模型参数,如核的选择、核参数、要选择的特征值数量以及分区算法(如 k-Means)必须正确定义以实现最佳性能。
如何工作?
以下步骤描述了该技术在实践中的应用:
-
给定数据点,使用高斯核等平滑核函数计算亲和度(或邻接)矩阵:
对于较近的点,
而对于较远的点,
-
下一步是使用各种归一化方法计算图拉普拉斯矩阵。所有拉普拉斯矩阵方法都使用对角度矩阵 D,它测量图中每个节点的度:
简单的拉普拉斯矩阵是 L = D (度矩阵) – A(亲和度矩阵)。
-
从特征值问题或广义特征值问题中计算前 k 个特征值。
-
使用分区算法,如 k-Means,在 k 维子空间中进一步分离聚类。
优点和局限性
-
当聚类形状或大小不规则且非凸时,谱聚类工作得非常好。谱聚类有太多的参数选择和调整,以获得良好的结果是一项相当复杂的任务。
-
理论上已经证明,在存在噪声数据的情况下,谱聚类具有更好的稳定性。当聚类没有很好地分离时,谱聚类表现良好。
亲和传播
亲和传播可以被视为 K-medoids 方法的扩展,因为它与从数据中挑选示例相似(参考文献 [16])。亲和传播使用距离或相似度矩阵的图,并选择训练数据中的所有示例作为示例。作为数据点之间 亲和度 的迭代消息传递自动检测聚类、示例,甚至聚类数量。
输入和输出
通常,除了最大迭代次数,这是大多数算法的共同点,不需要其他输入参数。
如何工作?
我们将首先解释数据点之间交换的两种类型的信息:
-
责任 r(i,k):这是从数据点到候选示例的消息。这提供了一个度量,说明与其它示例相比,该示例对该数据点的适应性如何。更新责任规则的规则如下:
其中 s(i, k) = 数据点 i 和 k 之间的相似度。
a(i, k) = 示例 k 对 i 的可用性。
-
可用性 a(i,k):这是从候选示例到数据点的消息。这提供了一个度量,表示在考虑其他数据点的情况下,示例对数据点的支持有多好。这可以被视为软聚类分配。更新可用性的规则如下:
图 4:亲和传播中使用的消息类型
算法可以总结如下:
-
初始化
-
对于所有增量i到n:
-
结束。
-
对于所有满足*(r(i,i) + a(i,i) > 0)*的x[i]
-
x[i]是示例。
-
所有非示例x[j]都使用相似度度量*s(i, j)*分配到最近的示例。
-
-
结束。
优点和局限性
-
相似性传播是一个确定性算法。k-means 或 K-medoids 对初始点的选择很敏感,这通过将每个点视为示例来克服。
-
聚类的数量不必指定,并且通过过程自动确定。
-
它适用于非度量空间,并且不需要距离/相似度来具有约束性质,例如三角不等式或对称性。这使得算法可以在具有分类和文本数据等多种数据集上使用:
-
由于其更新方法,该算法可以轻松并行化,并且具有快速的训练时间。
聚类验证和评估
聚类验证和评估是确定算法有用性的最重要的机制之一(参考文献 [18])。这些主题可以大致分为两类:
-
内部评估指标:在这种情况下,指标使用数据本身的一些聚类质量,而不需要访问真实值。
-
外部评估指标:在这种情况下,指标使用一些外部信息,例如已知的真实值或类别标签。
内部评估指标
内部评估仅使用聚类和数据信息来收集有关聚类结果好坏的指标。应用程序可能对指标的选择有一定的影响。一些算法对特定的评估指标有偏见。因此,在选择合适的指标、算法和参数时必须谨慎,基于这些考虑:
-
紧凑性:使用不同策略测量的聚类方差用于给出紧凑性值;方差越低,聚类越紧凑。
-
分离性:聚类之间分离得有多好?
符号
下面是对以下内容中使用的符号的简要解释:所有数据元素的数据集=D,数据元素数量=n,每个数据元素的维度或特征=d,整个数据集的中心D = c,聚类数量=NC,第i个聚类=C[i],第i个聚类中的数据数量=n[i],第i个聚类的中心=c[i],第i个聚类的方差=σ(C[i]),两点x和y之间的距离=d (x,y)。
R-Squared
目标是使用聚类之间的平方和总和与整个数据上的总平方和的比率来衡量聚类之间的差异程度。公式如下:
Dunn 的指数
目标是识别密集且分离良好的聚类。该度量由以下公式的最大值给出:
Davies-Bouldin 指数
目标是识别具有低簇内距离和高簇间距离的聚类:
轮廓指数
目标是测量簇间和簇内距离的成对差异。它还用于通过最大化指数来找到最佳聚类数量。公式如下:
这里和
。
外部评估度量
聚类的外部评估度量与使用混淆矩阵元素或使用数据和标签的信息论度量分类度量相似。以下是一些最常用的度量方法。
兰德指数
兰德指数使用以下公式衡量聚类算法做出的正确决策:
F-Measure
F-Measure 结合了在聚类中应用的精确度和召回度度量,如下公式所示:
在这里,n[ij]是聚类j中类别i的数据元素数量,n[j]是聚类j中的数据数量,n[i]是类别i中的数据数量。F-Measure 越高,聚类质量越好。
归一化互信息指数
NMI 是应用于聚类的许多基于熵的度量之一。与聚类C相关的熵是关于簇随机选择数据元素的不确定性的度量。
其中
是元素在聚类Ci 中被选中的概率。
两个聚类之间的互信息由以下公式给出:
这里,这是元素被聚类C和*C^'*同时选中的概率。
归一化互信息(NMI)有多种形式;其中一种如下所示:
异常值或异常检测
格鲁布斯在 1969 年给出了定义,“一个异常值,或称为异常值,是看起来明显偏离其所在样本中其他成员的观察值”。
霍金斯在 1980 年将异常值或异常定义为“一个与其他观察值差异如此之大,以至于引起怀疑它是由不同机制生成的观察”。
巴内特和刘易斯在 1994 年将其定义为“一个(或一组)观察值,似乎与该数据集的其余部分不一致”。
异常值算法
异常值检测技术根据不同的方法来分类,这些方法定义了异常值,即根据某些属性将数据集中的某些对象与其他对象区分开来:
-
基于统计的:根据选择的分布来看,这是不可能的
-
基于距离的:根据选择的距离度量,与邻居孤立,并且阈值距离内的邻居比例
-
基于密度的:与邻居相比,它与其邻居相比更加孤立
-
基于聚类的:这是相对于其他簇孤立存在的簇,或者不是任何簇的成员
-
基于高维度的:这是在数据投影到低维度后,通过常规技术识别出的异常值,或者通过选择一个适合高维度的适当度量
基于统计的方法
使用参数方法进行异常值检测的基于统计的技术假设对数据分布的一些了解(参考文献 [19])。从观察中,估计模型参数。在模型中概率低于阈值值的数据点被认为是异常值。当分布未知或没有合适的假设时,使用非参数方法。
输入和输出
用于异常值检测的统计方法与实值数据集一起工作。在假设多元分布的参数方法中,距离度量的选择可能是一个用户选择的输入。在基于频率直方图的非参数方法中,使用用户定义的阈值频率。在核密度估计技术中,核方法和带宽的选择也是用户决定的。基于统计的方法的输出是一个表示异常程度的分数。
如何工作?
大多数基于统计的异常值检测要么假设一个分布,要么将分布拟合到数据中,以概率方式检测从分布中生成的最不可能的数据。这些方法有两个不同的步骤:
-
训练步骤:在这里,执行拟合数据的模型估计
-
测试步骤:在每个实例上,基于模型和特定实例执行拟合优度检验,得到一个分数和异常值程度
基于参数的方法假设一个分布模型,如多元高斯分布,并且训练通常涉及使用诸如**最大似然估计(MLE)**等技术来估计均值和方差。测试通常包括均值-方差或箱线图测试等技术,并伴随假设“如果超出三个标准差,则视为异常值”。
一个正常的多元分布可以被估计为:
使用均值 µ 和协方差 Ʃ。
马氏距离可以是数据点从由方程 给出的分布的估计。当马氏距离受到异常值影响时,也会使用一些变体,例如最小协方差行列式(MCD)。
非参数方法涉及诸如使用频率或宽度方法为每个特征构建直方图等技术。当某个箱子中的数据与直方图平均值的比率低于用户定义的阈值时,这样的箱子被称为稀疏。特征的低概率会导致更高的异常值得分。总异常值得分可以计算如下:
在这里,w[f] 是赋予特征 f 的权重,p[f] 是测试数据点中特征值的概率,F 是特征集权重的总和。核密度估计也用于使用用户定义的核和带宽的非参数方法。
优点和局限性
-
当模型拟合或数据分布已知时,这些方法非常高效,因为你不需要存储整个数据,只需存储进行测试所需的关键统计数据。
-
然而,分布的假设在参数方法中可能是一个大问题。大多数使用核密度估计的非参数方法在大数据集上扩展性不好。
基于距离的方法
基于距离的算法在一般假设下工作,即正常数据有其他数据点更接近它,而异常数据与其邻居很好地隔离(参考文献 [20])。
输入和输出
基于距离的技术需要将原生数值或分类特征转换为数值。基于距离的方法的输入包括使用的距离度量、距离阈值 ϵ 和 π,以及阈值分数 π,它们共同决定一个点是否是异常值。对于 KNN 方法,选择 k 是一个输入。
如何工作?
基于距离的异常值有很多种变体,我们将从高层次上讨论它们各自的工作原理:
-
DB (ϵ, π*) 算法:给定半径 ϵ 和阈值 π,如果一个数据点的 π 百分比的距离小于 ϵ,则该数据点被认为是异常值。还有进一步的变体,使用嵌套循环结构、基于网格的结构和基于索引的结构来执行计算。
-
基于 KNN 的方法也非常常见,其中异常值得分是通过计算点到 KNN 的距离或从 {1NN,2NN,3NN…KNN} 到点的平均距离来计算的。
优点和局限性
-
基于距离的算法的主要优点是它们是非参数的,不对分布和模型拟合方式做出假设。
-
距离计算很简单,可以并行计算,有助于算法在大数据集上扩展。
-
基于距离的方法的主要问题是第一章中讨论的维度诅咒;对于高维数据,稀疏性可能导致异常值噪声。
基于密度的方法
基于密度的方法通过不仅测量给定点的局部密度,还测量其邻域点的局部密度来扩展基于距离的方法。因此,添加的相对因子使其在寻找更复杂的局部或全局异常值方面具有优势,但这也增加了计算成本。
输入和输出
基于密度的算法必须提供输入半径 ϵ 中心对象的最小点数 MinPts,以确定它是一个簇的核心对象。
它是如何工作的?
我们将首先讨论 局部异常因子(LOF)方法,然后讨论 LOF 的某些变体 [21]。
给定 MinPts 作为参数,数据点的 LOF 为:
这里 |N [MinPts] (p)| 是点 p 邻域中的数据点数量,lrd [MinPts] 是点的局部可达密度,定义为:
这里 是点的可达性,定义为:
LOF 的一个缺点是它可能会错过那些其邻域密度接近其邻域密度的异常值。使用从数据点起源的基于集合的最近路径和基于集合的最近轨迹的连通性异常值(COF)被用来改进 LOF。COF 对低密度区域和孤立区域的处理不同,克服了 LOF 的缺点:
LOF 的另一个缺点是当簇在变化密度且未分离时,LOF 将生成反直觉的分数。克服这一点的办法之一是使用基于 KNN 和其反向 KNN 或 RNN 的点的影响空间(IS)。RNN 将给定点作为其 K 个最近邻之一。点的异常性称为受影响异常值或 INFLO,其值为:
这里,den(p) 是 p 的局部密度:
图 5:基于密度的异常值检测方法特别适合寻找局部和全局异常值
优点和局限性
-
已证明基于密度的方法比基于距离的方法更有效。
-
基于密度的异常值检测计算成本高,且通常可解释性较差。
基于聚类的算法
一些认为,旨在找到位于一起的数据点群体的聚类技术,在某种程度上与异常或异常值检测问题相对立。然而,作为一种高级无监督学习技术,聚类分析提供了几种方法来找到位于其他簇较远或根本不在任何簇中的有趣簇组。
输入和输出
如前所述,聚类技术适用于实值数据,尽管可以容忍一些转换为数值的类别值。在 k-Means 和 k-Medoids 的情况下,输入值包括簇的数量k和距离度量。变体可能需要阈值得分来识别异常值组。对于使用 EM 的 Gaussian Mixture Models,必须由用户提供混合成分的数量。当使用 CBLOF 时,期望两个用户定义的参数:小簇的大小和大簇的大小。根据使用的算法,单个对象或对象组作为异常值输出。
它是如何工作的?
如我们在聚类章节中讨论的,存在各种类型的聚类方法,我们将给出一些聚类算法如何扩展用于异常值检测的例子。
k-Means 或 k-Medoids 及其变体通常将数据元素聚在一起,并受异常值或噪声的影响。而不是通过删除或转换预处理这些数据点,这些削弱簇“紧密性”的点被视为异常值。通常,异常值通过先运行聚类算法然后评估某种形式的异常值得分来揭示,该得分衡量点与质心的距离。此外,许多变体将小于阈值大小的簇视为异常值组。
高斯混合模型(GMM)使用期望最大化(EM)是另一种著名的基于聚类的异常值检测技术,其中属于某个簇的概率较低的数据点成为异常值,异常值得分成为 EM 概率输出得分的倒数。
基于簇的局部异常因子(CBLOF)使用两阶段过程来寻找异常值。首先,聚类算法将数据划分为各种大小的簇。使用两个用户定义的参数,大簇的大小和小簇的大小,形成两套簇集:
优点和局限性
-
由于基于聚类的技术已被充分理解,结果更具可解释性,并且有更多工具可用于这些技术。
-
许多聚类算法仅检测簇,与给出得分、排名或其他识别异常值的异常值算法相比,在无监督技术中效果较差。
基于高维的方法
距离、密度或甚至基于聚类的几种方法的关键问题之一是维度诅咒。随着维度的增加,距离之间的对比度减小,邻域的概念变得不那么有意义。在这种情况下,正常点看起来像是异常值,并且错误正例的数量大幅增加。我们将讨论一些解决这个问题的最新方法。
输入和输出
将数据投影到低维子空间中的算法可以很好地处理缺失数据。在这些技术中,如 SOD,ϕ,每个维度的范围数量成为输入(参考文献 [25])。当使用进化算法时,具有最低稀疏系数的单元格数量是算法的另一个输入参数。
如何工作?
解决高维异常值问题的广泛思路是:
-
或者将鲁棒的距离度量与所有先前技术相结合,以便可以在完整维度中识别异常值
-
或者将数据投影到较小的子空间中,并在较小的子空间中找到异常值
基于角度的异常值度(ABOD)方法使用这样一个基本假设:如果一个高维数据点是异常值,那么从它出发指向最近数据点的所有向量在或多或少的同一方向上。
图 6:区分异常值和内点的 ABOD 方法
给定点 p 和任意两点 x 和 y,这两点与 p 之间的角度由以下公式给出:
作为 ABOD 分数使用的方差度量由以下公式给出:
ABOD 值越小,角度谱中的方差度量越小,点成为异常值的可能性就越大。
另一种在高维数据中非常有用的方法是使用子空间异常值检测(SOD)方法(参考文献 [23])。其想法是将高维空间划分为每个维度中范围数量相等的区域,例如在 d 个维度中都有 ϕ 个范围。然后,通过在每个 d 维度中选择一个范围形成的单元格 C 的稀疏系数如下测量:
在这里,n 是数据点的总数,N(C) 是单元格 C 中数据点的数量。通常,位于具有负稀疏系数的单元格中的数据点被认为是异常值。
优点和局限性
-
ABOD 方法的时间复杂度为 O(n³)*,与数据点的数量成正比,因此在大数据集上变得不切实际。
-
子空间中的稀疏系数方法需要高效地在低维中进行搜索,问题变得 NP-Hard,因此采用了某种形式的进化或启发式搜索。
-
稀疏系数方法由于是 NP-Hard,可能会导致局部最优。
一类 SVM
在许多领域,存在一个特定的感兴趣类或类别,而“其余”则无关紧要。找到围绕这个感兴趣类的边界是一类别 SVM(参考文献 [26])背后的基本思想。基本假设是正类(感兴趣类)的所有点都聚集在一起,而其他类的元素则散布开来,我们可以在聚集实例周围找到一个紧密的超球体。SVM,具有强大的理论基础和在二类别分类中的应用,被重新公式化以解决一类别 SVM。以下图示说明了如何使用一类别 SVM 和松弛项简化非线性边界,以避免过度拟合复杂函数:
图 7:一类别 SVM 用于非线性边界
输入和输出
数据输入通常是数值特征。许多 SVM 可以接受名义特征并对它们应用二进制转换。还需要标记感兴趣类的类别,SVM 超参数,如核选择、核参数和成本参数等。输出是一个可以预测实例是否属于感兴趣类的 SVM 模型。这与我们之前看到的评分模型不同。
如何工作?
输入是训练实例{x[1],x[2]…x[n]},其中某些实例被标记为属于+1 类,其余属于-1 类。
SVM 的输入也需要一个核,它将输入空间转换为特征空间的变换 ϕ 如 使用:
使用 SVM 重新公式化的方程创建一个界定类的超球体:
如此+
,
R 是以c为中心的超球体的半径,ν ∈ (0,1] 表示异常值数据所占分数的上限。
正常 SVM 一样,我们通过二次规划进行优化,以获得决策边界的解。
优点和局限性
-
使用一类别 SVM 的关键优势——正如二类别 SVM 一样——是许多关于误差和泛化界限的理论保证。
-
高维数据可以轻松地在一类别 SVM 中映射。
-
带核的非线性 SVM 甚至可以找到非球形的形状来界定数据的簇。
-
随着数据量的增加,训练成本在空间和内存中增加。
-
参数调整,尤其是核参数和未标记数据的成本参数调整,是一个巨大的挑战。
异常值评估技术
以标签、排名和分数来衡量异常值是一个活跃的研究领域。当标签或真实标签已知时,由于已知异常值类别,评估的想法变得容易得多,可以采用标准指标。但是,当真实标签未知时,评估和验证方法非常主观,并且没有明确定义、严格的统计过程。
监督评估
在已知真实标签的情况下,对异常值算法的评估基本上是寻找异常值分数(基于评分的异常值)的最佳阈值。
在减少假阳性并提高真阳性之间的平衡是关键概念,并且精度-召回曲线(在第二章 Chapter 2 中描述,《面向现实世界监督学习的实用方法)被用来找到最佳最优阈值。在监督学习中,置信度分数、预测和实际标签被用来绘制 PR 曲线,而在这里,不是使用置信度分数,而是对异常值分数进行排序并使用。ROC 曲线和曲线下的面积也被广泛应用于评估阈值。当已知真实标签时,比较两个或多个算法并选择最佳算法也可以使用曲线下的面积指标来完成。
无监督评估
在大多数现实世界的案例中,知道真实标签是非常困难的,至少在建模任务期间是这样的。霍金斯以非常高的水平描述了这种情况下的评估方法,将其称为“包含异常值的样本将显示出'异常'和'内含'观察值之间的大差距以及异常值与内含组之间的偏差,这些偏差是在某些适当标准化的尺度上测量的”。
当不知道真实标签时,在评估异常值时使用的通用技术是:
-
异常值分数直方图:一种基于可视化的方法,其中异常值分数被分组到预定义的箱中,用户可以根据异常值计数、分数和阈值来选择阈值。
-
评分归一化和距离函数:在这种技术中,进行某种形式的归一化以确保所有产生分数的异常值算法具有相同的范围。使用某种形式的距离或相似性或相关性的方法来找到不同算法之间异常值的共性。这里的总体直觉是:越多的算法将数据点视为异常值,该点实际上为异常值的概率就越高。
现实世界案例研究
在这里,我们提供了一个案例研究,说明了如何使用本章中描述的聚类和异常值技术,通过开源 Java 框架和知名图像数据集在现实世界中应用。
工具和软件
现在我们将介绍本章实验中使用的两种新工具:SMILE 和 Elki。SMILE 提供了一个 Java API,用于展示使用 PCA、随机投影和 IsoMap 进行特征降维。随后,Elki 的图形界面被用来执行无监督学习——具体来说,是聚类和异常值检测。Elki 附带了一组丰富的聚类分析和异常值检测算法,包括大量可供选择的模型评估器。
备注
了解更多关于 SMILE 的信息:haifengl.github.io/smile/,以及更多关于 Elki 的信息,请访问:elki.dbs.ifi.lmu.de/。
商业问题
识别字符是许多商业领域遇到的问题,例如,医疗报告和医院图表的翻译,邮政服务中的邮政编码识别,零售银行的支票存款服务,以及其他一些领域。人类手写体在个体之间可能有很大的差异。在这里,我们专门关注手写数字,即 0 到 9。由于某些数字集合(如 1/2/7 和 6/9/0)之间的相似性,这个问题变得很有趣。在本章的实验中,我们使用了几种不同的算法进行聚类和异常值分析,以展示这些方法的相对优势和劣势。鉴于这些技术在数据挖掘应用中的广泛应用,我们的主要目标是深入了解数据和算法以及评估措施;我们不对测试数据进行预测。
机器学习映射
如章节标题所示,我们的实验旨在通过忽略数据集中识别数字的标签来展示无监督学习。从数据集中学习后,聚类和异常值分析可以提供关于数据中模式的有价值信息,并且通常用于探索这些模式和相互关系,而不仅仅是预测未见数据的类别。在本章描述的实验中,我们关注的是描述和探索,而不是预测。当外部评估措施可用时,使用标签,正如这些实验中一样。
数据收集
这已经为我们准备好了。关于数据收集的详细信息,请参阅:MNIST 数据库:yann.lecun.com/exdb/mnist/。
数据质量分析
数据点中的每个特征都是 784 个像素中的一个的灰度值。因此,所有特征的类型都是数值型;除了类别属性是 0 到 9 范围内的数字之外,没有其他分类类型。此外,数据集中没有缺失数据元素。以下是几个像素的一些基本统计信息的表格。图像在 28 x 28 的框中预先居中,因此在大多数例子中,框边沿的数据是零:
| 特征 | 平均值 | 标准差 | 最小值 | 最大值 |
|---|---|---|---|---|
| pixel300 | 94.25883 | 109.117 | 0 | 255 |
| pixel301 | 72.778 | 103.0266 | 0 | 255 |
| pixel302 | 49.06167 | 90.68359 | 0 | 255 |
| pixel303 | 28.0685 | 70.38963 | 0 | 255 |
| pixel304 | 12.84683 | 49.01016 | 0 | 255 |
| pixel305 | 4.0885 | 27.21033 | 0 | 255 |
| pixel306 | 1.147 | 14.44462 | 0 | 254 |
| pixel307 | 0.201667 | 6.225763 | 0 | 254 |
| pixel308 | 0 | 0 | 0 | 0 |
| pixel309 | 0.009167 | 0.710047 | 0 | 55 |
| pixel310 | 0.102667 | 4.060198 | 0 | 237 |
表 1:预处理前原始数据集特征摘要
混合国家标准与技术研究院(MNIST)数据集是用于评估无监督学习方法的常用数据集。MNIST 数据集之所以被选中,主要是因为高维数据中的簇没有很好地分离。
原始 MNIST 数据集来自 NIST 的黑白图像。它们被归一化以适应 20 x 20 像素的框,同时保持宽高比。通过计算质心并将其平移到 28 x 28 维网格的中心,图像被定位在 28 x 28 图像的中心。
每个像素的强度基于 0 到 255 的范围。784 个像素值被展平,成为每个图像的高维特征集。以下图展示了数据中的一个样本数字 3,以及映射到网格中,每个像素都有一个从 0 到 255 的整数值。
本节中描述的实验旨在展示无监督学习技术在知名数据集上的应用。正如在第二章中所述,使用监督学习技术进行“现实世界监督学习的实用方法”,进行了多个实验,使用了多种聚类和异常值方法。每个选定方法的有无特征减少的实验结果都进行了展示,随后对结果进行了分析。
数据采样和转换
由于我们的重点是使用各种无监督技术探索数据集,而不是预测方面,所以我们在这里不关心训练、验证和测试样本。相反,我们使用整个数据集来训练模型以执行聚类分析。
在异常值检测的情况下,我们创建了一个仅包含两个数据类别的样本,即 1 和 7。选择具有相似形状的数字数据集是为了设置一个问题空间,在这个空间中,各种异常检测技术的判别能力将更加突出。
特征分析和降维
我们使用 SMILE 机器学习工具包的 Java API 展示了不同的特征分析和降维方法——PCA、随机投影和 IsoMap。
图 8:显示数字 3,像素值分布在 0 到 254 的 28 x 28 矩阵中。
加载数据集和读取值的代码在此处给出,并带有内联注释:
//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
以下代码片段说明了使用 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);
图 9:MNIST 上的 PCA – 在左侧,我们看到超过 90%的数据方差由原始特征数量的一半以下解释;在右侧,使用前两个主成分表示数据。
表 2:PCA 后 11 个随机特征的汇总
PCA 计算将特征数量减少到 274。在下面的表中,您可以看到随机选择的一组特征的基本统计信息。特征数据作为 PCA 的一部分进行了归一化:
| 特征 | 平均值 | 标准差 | 最小值 | 最大值 |
|---|---|---|---|---|
| 1 | 0 | 2.982922 | -35.0821 | 19.73339 |
| 2 | 0 | 2.415088 | -32.6218 | 31.63361 |
| 3 | 0 | 2.165878 | -21.4073 | 16.50271 |
| 4 | 0 | 1.78834 | -27.537 | 31.52653 |
| 5 | 0 | 1.652688 | -21.4661 | 22.62837 |
| 6 | 0 | 1.231167 | -15.157 | 10.19708 |
| 7 | 0 | 0.861705 | -6.04737 | 7.220233 |
| 8 | 0 | 0.631403 | -6.80167 | 3.633182 |
| 9 | 0 | 0.606252 | -5.46206 | 4.118598 |
| 10 | 0 | 0.578355 | -4.21456 | 3.621186 |
| 11 | 0 | 0.528816 | -3.48564 | 3.896156 |
表 2: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);
图 10:PCA 和随机投影 – 使用 Smile API 在二维中的表示
ISOMAP
此代码片段说明了使用 Isomap 转换的 API 的用法:
//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();
图 11:IsoMap – 使用 Smile API 在 k = 10 的情况下在二维中的表示
特征分析和降维观察
我们可以从图中显示的结果中得出以下观察:
-
主成分分析(PCA)的方差和维度数量图清晰地显示,大约有 100 个线性组合的特征在数据中的表示或方差与原始的 784 个特征相似(> 95%)。这是任何无监督特征降维分析的关键第一步。
-
即使是两个维度而不是之前描述的 100 个维度,PCA 也能在散点图可视化中显示出一些真正有价值的见解。显然,数字 2、8 和 4 彼此之间非常清晰地分开,这很合理,因为它们彼此之间写得很清晰。在低维空间中,如{1,7}、{3,0,5}和{1,9}这样的数字要么重叠,要么紧密聚集。这表明仅用两个特征是无法有效区分的。这也表明在这些类别之间存在着特征或属性的重叠。
-
下一个图表比较了主成分分析(PCA)与随机投影在低维 2 维空间下的结果,显示两者输出之间有很多共同之处。它们在区分不同类别方面与之前在 PCA 中描述的相似。值得注意的是,PCA 在区分数字{8,9,4}等方面比随机投影做得更好。
-
Isomap 的下一个图表显示了良好的区分度,类似于 PCA。主观上,它似乎比随机投影更好地分离数据。例如,在 Isomap 中,{3,0,5}比在 PCA 中分离得更好。
聚类模型、结果和评估
使用 MNIST-6000 数据集进行了两组实验。该数据集包含 6,000 个示例,每个示例代表一个手写数字,以 28 x 28 像素方格的灰度值表示。
首先,我们运行了一些聚类技术来识别数字的 10 个聚类。在本案例研究的这部分实验中,我们使用软件 Elki。
在第一组实验中,没有涉及特征降维。所有 28x28 像素都被使用。使用了包括 k-Means、EM(对角高斯模型工厂)、DBSCAN、层次结构(HDBSCAN 层次提取)以及亲和传播在内的聚类技术。在每种情况下,我们使用两个内部评估器的指标:戴维斯-博尔丁和影子系数,以及几个外部评估器:精确度、召回率、F1 度量以及兰德指数。
图 12:K-Means – 使用平方和误差(SSE)找到最优k,即聚类数量。曲线中的肘部,通常用于选择最优 k 值,在图表中并不特别明显。
在 k-Means 的情况下,我们使用一系列 k 值进行了多次运行。图表显示,随着 k 值的增加,平方和误差(SSE)指标逐渐降低。
表格显示了k=10的结果,每个结果对应的排名在括号中:
| 算法 | 影子系数 | 戴维斯-博尔丁指数 | 精确度 | 召回率 | F1 | 兰德指数 |
|---|---|---|---|---|---|---|
| K-Means Lloyd | +-0.09 0.0737 (1) | 2.8489 (3) | 0.4463 (3) | 0.47843 (3) | 0.4618 (1) | 0.8881 (3) |
| EM(对角高斯模型工厂) | NaN | 0 (1) | 0.1002 (6) | 1 (1) | 0.1822 (4) | 0.1003 (5) |
| DBSCAN | 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) |
| 层次结构(简化层次提取) | NaN | 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 个特征的所得数据,与第一个实验中相同的算法一起使用。结果如表所示:
| 算法 | 影子系数 | 戴维斯-博尔丁指数 | 精确度 | 召回率 | F1 | Rand |
|---|---|---|---|---|---|---|
| K-Means Lloyd | +-0.14 0.0119 | 3.1830 | 0.3456 | 0.4418 | 0.3878 (1) | 0.8601 |
| EM(对角高斯模型工厂) | +-0.16 -0.0402 | 3.5429 | 0.1808 | 0.3670 | 0.2422 | 0.7697 |
| DBSCAN | +-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) |
| 子空间(DOC) | +-0.00 0.0 | 0 (1) | 0.1003 | 1 | 0.1823 | 0.1003 |
表 4. PCA 后 MNIST 数据聚类算法的评估
观察和聚类分析
如表 2.1 和表 2.2 所示,在聚类章节中讨论的不同算法使用不同的评估度量进行比较。
通常,根据技术、领域和业务需求比较不同的内部和外部度量标准非常重要。当数据集中有标签或结果时,使用外部度量标准成为一个更容易的选择。当没有标记数据时,通常使用内部度量标准,并对每个度量进行一些排名,然后查看所有度量之间的比较排名。在这个阶段,会做出一些重要且通常有趣的观察:
-
使用如平方和误差等度量评估 k-Means 的 k 值(如图所示),是查看“最优性”的聚类数量的基本步骤。图清楚地表明,随着 k 的增加,分数提高,聚类分离度提高。
-
当我们分析表 2.1 时,其中使用了所有 784 个特征,并显示了不同算法的所有评估度量,一些关键点脱颖而出:
-
k-Means 和相似传播在标准差和平均值方面在影子系数指标上都有很大的重叠(k-Means +-0.09 0.0737;相似传播 +-0.07 0.04690)。因此,很难在这个指标上分析它们。
-
在 DB Index(最小值越好)、Rand Index(越接近 1 越好)等度量中,我们可以看到相似传播和层次聚类显示出非常好的结果。
-
在考虑标签的度量中,层次聚类、DBSCAN 和 EM 要么具有高精确度,要么具有高召回率,因此 F1 度量较低。当考虑精确度和召回率时,k-Means 给出了最高的 F1 度量。
-
-
在表 2.2 中,使用 PCA 保留 95%方差减少的 273 个特征的数据集通过相同的算法运行并通过相同的度量进行评估,我们得出以下有趣的观察:
减少特征会对某些算法的每个度量指标产生负面影响;例如,k-Means 的所有度量指标都会降低。例如,亲和传播算法在减少特征时影响非常小,在某些情况下甚至有积极的影响。与使用所有特征的结果相比,AP 显示出相似的 Rand 指数和 F1,更好的召回率、DB 索引和轮廓度量,以及精度的小幅变化,显示出明显的鲁棒性。
层次聚类在更好的 DB 索引和 Rand 指数方面显示出与之前相似的结果,并且在 Rand 指数上的得分接近 AP。
异常值模型、结果和评估
对于异常值检测技术,我们使用了包含所有数字 1 示例和数字 7 示例的子集,以及数字 7 示例的欠采样子集。其想法是这两个数字的形状相似性会导致数字 7 示例被识别为异常值。
使用的模型来自 Angular、基于距离的聚类、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) |
| LOF | 0.4577 (6) | 0.0499 (6) | 0.08 (6) | 0.0934 (6) |
| LOF(ALOKI) | 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-精度和平均精度等重要指标中排名很高,位居第一。
-
1-Class SVM 使用非线性 RBF 核在大多数指标上表现一致良好,即在 ROC 面积、R-Precision、平均精度和最大 F1 上排名第二。线性 SVM(在大多数排名中大约排名第五)和 1-Class SVM(排名第二)之间的差异表明,问题在本质上确实是非线性的。一般来说,当维度较高(784)且异常值非线性且稀有时,带有核的 1-Class SVM 表现确实很好。
-
基于局部异常值(LOF)及其变体的技术几乎在所有指标中排名都较低。这表明异常值问题可能不是局部的,而是全局的。基于距离的算法(KNN 和局部隔离)在 ROC 曲线下的面积和局部异常值算法相比表现更好,尽管使用基于距离的度量可以得出问题确实是全局性的,适合使用基于距离的度量。
表 1:预处理前原始数据集特征摘要
摘要
监督学习和无监督学习方法在处理噪声数据、高维度以及随着数据规模增长对内存和时间的需求方面存在共同关注的问题。由于缺乏真实情况,无监督学习特有的其他问题是关于模型评估的主观性、模型的可解释性、聚类边界的影响等问题。
特征降维是一个重要的预处理步骤,它减轻了可扩展性问题,同时还具有其他优势。线性方法,如 PCA、随机投影和 MDS,各自具有特定的优点和局限性,我们必须意识到每个方法中固有的假设。非线性特征降维方法包括 KPCA 和流形学习。
在聚类算法中,k-Means 是一种基于质心的技术,通过选择聚类数量进行初始化,它对质心的初始选择敏感。DBSCAN 是密度基于算法之一,不需要初始化聚类数量,对噪声和异常值具有鲁棒性。在基于概率的技术中包括均值漂移,它是确定性的且对噪声鲁棒,以及 EM/GMM,它在所有类型的特征上表现良好。均值漂移和 EM/GMM 都倾向于存在可扩展性问题。
层次聚类是一种强大的方法,涉及构建二叉树,迭代地将数据点分组,直到达到相似性阈值。对噪声的容忍度取决于使用的相似性度量。SOM 是一个双层神经网络,允许在二维网格中可视化聚类。谱聚类将数据集视为一个连通图,通过图划分来识别聚类。亲和传播是另一种基于图的技巧,它使用数据点之间的消息传递作为亲和力来检测聚类。
使用各种验证和评估度量来证明聚类算法的有效性和实用性。内部度量无法访问真实标签;当标签可用时,可以使用外部度量。内部度量的例子有轮廓指数和 Davies-Bouldin 指数。Rand 指数和 F 度量是外部评估度量。
异常检测和异常检测是无监督学习的一个重要领域。技术被分为基于统计、基于距离、基于密度、基于聚类、高维和单类 SVM。异常评估技术包括有监督评估,其中已知真实标签,和无监督评估,当真实标签未知时。
使用 SMILE Java API 和 Elki 工具包进行的实验说明了在 MNIST6000 手写数字数据集上使用各种聚类和异常检测技术。不同评估技术的结果被展示和比较。
参考文献
-
K. Pearson (1901). 关于空间中点系统的最接近拟合的线和面. 哲学杂志,第 2 卷:559–572。
-
A. D. Back (1997). "独立成分分析在从股票回报中提取结构中的应用",神经系统,第 8 卷,第 4 期,第 473–484 页。
-
Tipping ME,Bishop CM (1999). 概率主成分分析. 英国皇家统计学会会刊,系列 B,第 61 卷,第 3 期:611–622. 10.1111/1467-9868.00196
-
Sanjoy Dasgupta (2000). 随机投影实验. 在第十六届不确定人工智能会议(UAI'00)论文集中,由 Craig Boutilier 和 Moisés Goldszmidt(编者). Morgan Kaufmann Publishers Inc.,旧金山,加利福尼亚州,美国,第 143-151 页。
-
T. Cox 和 M. Cox (2001). 多维尺度. Chapman Hall,博卡拉顿,第 2 版。
-
Bernhard Schoelkopf,Alexander J. Smola 和 Klaus-Robert Mueller (1999). 核主成分分析. 在核方法进展,麻省理工学院出版社,剑桥,马萨诸塞州,美国 327-352。
-
Tenenbaum, J.B.; De Silva, V.; & Langford, J.C (2000).全局非线性降维的几何框架. 科学. 第 290 卷,第 5500 期,第 2319-2323 页
-
M. Belkin and P. Niyogi (2003). 拉普拉斯特征映射用于降维和数据表示. 神经计算,第 15 卷,第 6 期:1373–1396。
-
S. Roweis and L. Saul (2000). 局部线性嵌入进行非线性降维. 科学,第 290 期:2323–2326。
-
Hartigan, J. and Wong, M (1979). 算法 AS136:k 均值聚类算法. 应用统计学,第 28 卷,第 100-108 页。
-
Dorin Comaniciu 和 Peter Meer (2002). 均值漂移:一种稳健的特征空间分析方法. IEEE Transactions on Pattern Analysis and Machine Intelligence,第 24 卷,第 603-619 页。
-
层次聚类 Jain, A. and Dubes, R (1988). 数据聚类算法. Prentice-Hall,恩格尔伍德克利夫斯,新泽西州。
-
Mclachlan, G. and Basford, K (1988). 混合模型:推理及其在聚类中的应用. Marcel Dekker,纽约,纽约州
-
Ester, M., Kriegel, H-P., Sander, J. 和 Xu, X (1996). 在大型空间数据库中带有噪声的发现聚类的一个基于密度的算法. 在第 2 届 ACM SIGKDD 会议的论文集中,第 226-231 页,俄勒冈州波特兰.
-
Y. Ng, M. I. Jordan, 和 Y. Weiss (2001). 关于谱聚类:分析和算法, 在神经信息处理系统进展中。麻省理工学院出版社,第 849–856 页.
-
Delbert Dueck 和 Brendan J. Frey (2007). 非度量亲和传播用于无监督图像分类. 在 IEEE 国际计算机视觉会议(ICCV)中,第 1–8 页.
-
Teuvo Kohonen (2001). 自组织映射. Springer, Berlin, Heidelberg. 1995. 第三版,扩展版.
-
M. Halkidi, Y. Batistakis, 和 M. Vazirgiannis (2001). 关于聚类验证技术, 智能信息系统杂志,第 17 卷,第 107–145 页.
-
M. Markou, S. Singh (2003). 新颖性检测:综述 – 第一部分:统计方法, 信号处理 83 (12) 2481–2497
-
Byers, S. D. 和 Raftery, A. E (1998). 空间点过程特征估计中的最近邻杂波去除. 美国统计学会杂志 93, 577–584.
-
Breunig, M. M., Kriegel, H.-P., Ng, R. T., 和 Sander, J (1999). Optics-of: 识别局部异常值. 在第三届欧洲数据挖掘和知识发现原则会议的论文集中,Springer-Verlag,第 262–270 页.
-
Brito, M. R., Chavez, E. L., Quiroz, A. J., 和 yukich, J. E (1997). 聚类和异常值检测中互为 k 近邻图的连通性. 统计概率信函 35, 1, 33–42.
-
Aggarwal C 和 Yu P S (2000). 高维数据中的异常值检测. 在 ACM SIGMOD 国际数据管理会议(SIGMOD)的论文集中,德克萨斯州达拉斯.
-
Ghoting, A., Parthasarathy, S., 和 Otey, M (2006). 基于距离的高维空间中快速挖掘异常值 在 SIAM 国际数据挖掘会议(SDM)的论文集中,Bethesda, ML. 在 SIAM 国际数据挖掘会议(SDM)的论文集中,Bethesda, ML.
-
Kriegel, H.-P., Schubert, M., 和 Zimek, A (2008). 基于角度的异常值检测, 在 ACM SIGKDD 国际知识发现和数据挖掘会议(SIGKDD)的论文集中,内华达州拉斯维加斯. 在 ACM SIGKDD 国际知识发现和数据挖掘会议(SIGKDD)的论文集中,内华达州拉斯维加斯.
-
Schoelkopf, B., Platt, J. C., Shawe-Taylor, J. C., Smola, A. J., 和 Williamson, R. C (2001). 估计高维分布的支持. 神经计算 13, 7, 1443–1471.
-
F Pedregosa, 等人. Scikit-learn: Python 中的机器学习. 机器学习研究杂志,第 2825-2830 页.