Java机器学习(txt+pdf+epub+mobi电子书下载)

作者:(美)乌黛·卡马特(Uday Kamath),(美)克里希纳·肖佩拉(Krishna Choppella)

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Java机器学习

Java机器学习试读:

前言

关于机器学习有许多著名的书籍,有的是从数据中学习的理论教材;有的是某个特定领域的标准参考书,例如聚类、离群值检测或概率图建模;有的是操作指导,提供使用某种编程语言及相应的工具和库函数进行实践的示例。其中那些对理论涵盖面比较广的书,对细节的阐述有所欠缺,而那些专注于某个课题或工具的书也有短板,例如,可能解释了很多在流环境和在批处理环境中的方法有什么不同之处。另外,对于一些有机器学习方面的经验,而且喜欢用Java工具的读者,若他们希望通过某本书来拓展他们的知识,从本质上获得提升,那么合适的书籍尤其凤毛麟角。

在一本书中,他们希望找到:

·各种不同技术之间的差别,对于不同场景中的数据——有标签数据和无标签数据、数据流或批处理、本地数据或者分布式存储的数据、结构化的或非结构化的数据,每种技术有哪些长处和短处。

·应用某种机器学习理论的成熟的方法示例,使用最合适的技术,包括该理论最重要的数学表达式,以及这些技术如何能够最大限度地发挥该理论的优势。

·对成熟的基于Java的框架、库、可视化工具的描述性的介绍,以及如何把这些技术应用到实践中。

据我们所知,目前为止,这样的书一本也没有。

鉴于以上情况,本书的核心思想就是要填补这个空白,力图在理论和实践中取得平衡:一方面使用概率论、统计学、基础线性代数、初等微积分等解释机器学习的理论;另一方面强调方法论、实例研究、工具和代码示例,作为实践的支撑。

根据KDnuggets 2016年的软件调查报告显示,在机器学习使用的编程语言中,有16.8%的人投了Java一票,它是第二受欢迎的语言,仅次于Python。更重要的是,比起2015年,Java的受欢迎程度提高了19%!显然,在建立和部署与机器学习相关的系统方面,Java仍然是一种重要且高效的工具,偶尔的支持率下降也不影响大局。在本书中,我们的目标是让有一定Java编程经验和机器学习基础知识的读者,成为该领域中既专业又热情的爱好者。本书的目的就是铺一条阳光大道,以便读者向成为资深的数据科学工作者这个方向迈进。为使读者的进阶之路更加顺利,本书囊括了一个名副其实的机器学习技术弹药仓库,包括数据分析方法、学习算法、模型性能评估以及更多的监督学习和无监督学习、聚类和异常检测、半监督学习和主动学习等相关的内容。读者可能对其中一些已十分熟悉,对另一些没那么熟悉,而只是粗略地了解。本书还讲述了一些特别的话题,例如概率图模型、文本挖掘和深度学习。鉴于如今企业级别的系统越来越受重视,本书也涵盖了这方面的独特挑战,包括从数据流中学习、可应用于实时系统的工具和技术,以及大数据世界的必要架构:

·机器学习如何在大规模分布式环境下工作?

·在上述条件下有哪些必要的权衡?

·算法需要做哪些必要的调整?

·上述这类系统如何与强大的Hadoop生态系统的其他技术交互操作?

本书将会解释如何把机器学习应用到真实世界的数据和相关领域中,并提供了正确的方法论、流程、应用软件以及分析。每一章都包含了案例研究,介绍如何使用最合适的开源Java工具来应用本章所学的技术。本书介绍了超过15种开源Java工具,广泛支持各种技术,既有代码示例,也有使用实践。所有的代码、数据和配置,读者都可以下载并进行实验。我们还展示了超过10个真实世界的机器学习案例,演示了数据科学家的工作流程。每个案例都有以下实验步骤的细节:数据提取、数据分析、数据清理、特征降维/选择、映射到机器学习、模型训练、模型选择、模型进化以及结果分析。读者可以将此作为实践指导,学习如何将各章介绍的工具和方法论用于解决手头的业务问题。主要内容

第1章介绍了机器学习的基本概念和技术。读者在Packt的其他类似书籍中也可以看到这些内容,例如《Learning Machine Learning in Java》等。本章涉及的概念有:数据、数据转换、采样和偏移、特征及其重要性、监督学习、无监督学习、大数据学习、数据流和实时学习、概率图模型,以及半监督学习。

第2章单刀直入地展示了监督学习的广泛场景及其相关技术的全景,还涵盖了特征选择和降维、线性建模、逻辑模型、非线性模型、SVM和核函数、集成学习技术(例如装袋算法和提升算法)、验证技术和评价指标,还有模型选择。本章的案例研究使用了Weka和RapidMiner,包括从数据分析到模型性能分析的所有步骤。和其他各章一样,案例研究是作为示例来帮助读者理解本章介绍的技术是如何应用到真实生活中的。这个案例研究所使用的数据集来自UCI Horse Colic。

第3章展示了多种先进的聚类和离群值技术及其应用。本章涵盖的主题包括无监督数据的特征选择和降维、聚类算法、聚类的模型评估,以及使用统计学方法、距离和分布式技术做异常检测。在本章末尾,我们展示了一个案例研究,使用一组真实世界的图像数据集MNIST进行聚类和离群值检测。另外,使用Smile API完成特征降维,使用ELKI进行学习。

第4章讲述了当只有少量的标签数据可以使用时,学习的算法和技术的细节。本章涵盖的主题包括自训练、生成模型、转导SVM算法、协同训练、主动学习和多视角学习。案例研究使用了两种学习系统,基于UCI威斯康星乳腺癌数据集来展开。本章介绍的工具有JKernelMachines、KEEL和JCLAL。

第5章涵盖了对实时呈现的独特环境下的数据流进行数据学习的问题。本章涉及的内容有:流机器学习和应用、监督的流学习、无监督聚类流学习、无监督离群值学习、流学习的评估技术以及评估使用的指标。本章末尾的详细案例研究说明了如何使用MOA框架。使用的数据集是Electricity(ELEC)。

第6章展示了对多维空间中的复合关联概率分布进行编码,可以有效地表示许多现实问题。概率图模型提供了一个框架来表示、绘制推断,并在这种情况下有效地学习。本章大体上涵盖概率概念、PGM、贝叶斯网络、马尔可夫网络、图结构学习、隐马尔可夫模型和推断。本章末尾会使用真实的数据集进行详细的案例研究。案例研究中使用的工具有OpenMarkov和Weka的贝叶斯网络。数据集是UCI Adult(Census Income)。

第7章介绍深度学习。如果今天在大家的想象中有一个机器学习的超级明星,那一定是深度学习,它已经在解决最复杂的AI问题的技术中占据了主导地位。本章的主题广泛地涵盖了神经网络、神经网络中的问题、深度信念网络、受限玻耳兹曼机、卷积网络、长短期记忆单元、降噪自动编码器、循环网络等。我们提供了一个详细的案例研究来展示如何实现深度学习网络、调整参数和执行学习。本章使用了DeepLearning4J和MNIST图像数据集。

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

第9章讨论了当今最重要的挑战。当数据很大或者以非常高的速率增加时,可以使用哪些学习方案?如何处理可扩展性?主题涵盖了大数据集群部署框架、大数据存储选项、批数据处理、批数据机器学习、实时机器学习框架和实时流学习。在批量和实时大数据的案例研究中,我们选择了UCI Covertype数据集和机器学习库H2O、Spark MLlib和SAMOA。

附录A涵盖了线性代数的概念,作为一个简单的复习。它的覆盖范围一定不是完整的,但是它粗略地包含了一些与本书所述的机器学习技术相关的重要概念。包括向量、矩阵、基本矩阵运算和属性、线性变换、矩阵逆、特征分解、正定矩阵和奇异值分解。

附录B提供了一个概率论的简要介绍。包括概率公理、贝叶斯定理、概率密度估计、平均值、方差、标准差、高斯标准差、协方差、相关系数、二项分布、泊松分布、高斯分布、中心极限定理和误差传播。必备知识

本书假设你有一些Java编程经验,并对机器学习概念有基本的了解。如果你既没有经验也不太了解机器学习,但是你很好奇并且是一个自我激励的人,那么不要担心,继续阅读吧!对于那些有一定相关背景的人来说,意味着熟悉简单的数据统计分析以及监督和无监督学习所涉及的概念。那些可能没有所需的必要数学技能或者必须唤醒他们遥远的记忆来重新记起那些奇怪的公式或有趣的符号的人,请不要沮丧。如果你是一个喜欢挑战的人,附录中的入门知识可能就是你启动引擎所需要的一切。一点点忍耐就能让你坚持下去!对于那些从未接触过机器学习的人来说,第1章就是为你和需要复习的人写的。这就是你的初学者工具包,先跳进去,然后找出它的全部内容。你可以尽可能地使用在线资源来扩充你的基础知识。最后,对于那些对Java没有感觉的人,有一个秘密是:本书中描述的许多工具都有强大的GUI(图形用户界面)。有一些包括类似向导的界面,使得它们可以非常易于使用,并且不需要任何Java知识。所以如果你是Java新手,只需跳过需要编码的例子,学习使用基于GUI的工具!读者对象

本书的主要读者对象是负责处理数据的专业人士,其职责可能包括数据分析、数据可视化或转换、机器学习模型的训练、验证、测试和评估。大体是使用Java或基于Java的工具执行预测、描述或规范分析。Java的选择可能意味着个人偏好,也可能意味着以前有Java编程经验。另一方面,工作环境或公司政策也许限制了第三方工具的使用,所以只能使用Java和其他几种语言编写的工具。在第二种情况下,预期的读者可能没有Java编程经验。本书对待这类读者就像对待他们的同事——Java专家(最先提出策略的人)一样公平。

第二类读者可以通过具有两个属性的一类形象来定义:对机器学习具有求知欲的读者和对概念、实践技术和工具综合有期望的读者。这类读者可以选择略过数学和工具介绍,专注于学习最常见的监督和无监督机器学习算法。另一个可行建议是略读第1章、第2章、第3章和第7章,跳过所有其他的部分,然后直接阅读工具部分。如果你想快速分析客户所说的随时会出现的数据集,并给客户一个令人满意的分析,这是一种非常有建设性的办法。重要的是,通过重现本书中的实验所得到的一些实践经验,会让你提出只有大师才会问的正确问题!或者,你也许希望使用本书作为参考,以快速查找有关AP聚类算法(仿射传播)的详细信息(第3章),或者通过简要回顾原理图来回忆LSTM架构(第7章),或者要标记在基于流学习的异常值检测中基于距离的聚类方法的优缺点列表(第5章)。本书适用于所有读者,并且每个人都会发现很多可供学习的内容。用户支持

本书的示例源码可以从http://www.packtpub.com通过个人账号下载,也可以访问华章图书官网http://www.hzbook.com,通过注册并登录个人账号下载。

GitHub上也提供了本书的代码,网址是https://github.com/PacktPublishing/Practical-Predictive-Analytics。作者简介

Uday Kamath博士是BAE系统应用智能公司的首席数据科学家,专门研究可扩展机器学习,并在反洗钱AML、金融犯罪欺诈检验、网络空间安全和生物信息学领域拥有20年的研究经验。Kamath博士负责BAE系统应用智能公司AI部门核心产品的研究分析,这些产品涉及的领域有行为科学、社交网络和大数据机器学习方面。在Kenneth De Jong博士的指导下,他获得了乔治梅森大学的博士学位,他的论文研究聚焦于大数据和自动化序列挖掘的机器学习领域。

我要感谢我的朋友Krishna Choppella接受合著本书的邀请,在这漫长而令人满意的写作之旅中,他真是一个能干的搭档。

衷心感谢本书的审校者,尤其是Samir Sahli博士,感谢他提供的宝贵意见、建议并对各章节进行了深入的审校。感谢Carlotta Domeniconi教授,她的建议和意见帮助我们润色了本书的各个章节。还要感谢所有Packt的工作人员,尤其是Divya Poojari、Mayur Pawanikar和Vivek Arora,他们帮助我们按时完成了撰写任务。这本书需要在很多方面做出个人牺牲,我要感谢我的妻子Pratibha、我们的保姆Evelyn对我无条件的支持。最后,感谢我所有敬爱的老师和教授,他们不仅授业,还给我灌输了学习的乐趣。

KrishnaChoppella在BAE系统应用智能公司的角色是作为解决方案架构师,构建工具和客户解决方案。他有20年的Java编程经验,主要兴趣是数据科学、函数编程和分布式计算。审校者简介

Samir Sahli于2004年获得法国Nice Sophia-Antipolis大学应用数学和信息科学的学士学位,还分别于2008年和2013年获得加拿大拉瓦尔大学和魁北克大学物理学(光学/光子学/图像科学)的硕士学位和博士学位。在其研究生学习期间,他曾与加拿大国防研究和发展部门(Defence Research and Development Canada,DRDC)合作研究了航拍图像的自动检测和目标识别,特别是在不可控环境和非最佳图像捕获条件情况下。自2009年以来,他一直在欧洲和北美洲的几家公司中担任顾问,专门从事智能、监视和侦察(Intelligence,Surveillance,and Reconnaissance,ISR)以及遥感领域的工作。

Sahli博士于2013年作为博士后研究员加入McMaster光子学研究院(McMaster Biophotonics)。他的研究领域是光学、图像处理和机器学习。期间参与了几个项目,如新一代胃肠道成像装置的研发,用于个体化放疗的皮肤红斑高光谱成像研发,使用荧光寿命成像显微技术与多光子显微技术,自动检测癌症前期Barrett食道细胞的研发。

Sahli博士于2015年加入BAE系统应用智能公司。他此后作为一名数据科学家,利用机器学习、统计和社会网络分析工具开发分析模型,以检测针对保险、银行和政府客户的复杂的欺诈模式和洗钱计划。

Prashant Verma于2011年在电信领域的爱立信(Ericsson)公司,作为Java开发者开始了他的IT职业生涯。在拥有数年Java EE经验后,他转向了大数据领域,使用过几乎所有的大数据流行技术,如Hadoop、Spark、Flume、Mongo、Cassandra等,也使用过Scala。他在QA Infotech公司作为首席数据工程师,负责通过分析和机器学习解决电子学习问题。

Prashant先后在多家公司任职,如Ericsson和QA Infotech,拥有电信和电子学习的领域知识。他在业余时间也从事过自由职业顾问。

我想感谢Packt出版社给了我审校本书的机会,同时感谢我的老板和家人,当我忙于此书时,他们付出了足够的耐心。第1章机器学习回顾

近年来,无论是在学术界还是产业界,人工智能(Artificial Intelligence,AI)和机器学习都在强势复兴。过去的10年,由于人工智能最初的承诺目标变得相对衰退,直到最近几年人工智能卷土重来,该领域才在其中异军突起而取得了巨大的成功。

在很大程度上,使这些成功成为可能的是,处理大量的不断增长的数据所需的动力,在深度学习中困惑研究人员的关键算法的研究进展,以及由摩尔定律驱动的原始计算能力的必然增长。在人工智能引领的复苏领域中,机器学习已经取得了惊人的进展,并且继续在一系列领域中发掘出了最广泛的适用性。机器学习助力于在顶级商业中制定复杂决策,与此同时,它在提高日常应用的准确性方面也取得了巨大的成功,如搜索、语音识别和手机私人助理方面,与它在家用空间和证券交易经纪人行情室中的影响也一样司空见惯。不断涌现出的宣传深度学习影响力的文章,不仅可以在今天的科技科普的报刊中找到,也出现在主流媒体中,如《纽约时报》(The New York Times)和《赫芬顿邮报》(The Huffington Post)。机器学习确实在相当短暂的时间内变得无所不在了。

普通用户在他们日常活动中的方方面面都会遇到机器学习。大多数的电子邮件供应商,包括雅虎和Gmail,将用户的邮件按标题自动排序和分类为如垃圾邮件、无用信息、促销广告等,这些可以使用机器学习的分支文本挖掘来实现。在电子商务网站(如https://www.amazon.com/)在线购物时,或者从内容供应商如Netflix那观看电影时,它们会提供产品和内容推荐,即所谓的推荐系统,该系统可以作为一种保留客户的有效方式,是机器学习的另一个分支。

可以说,天气预报、预估房产价格、预测投票率,甚至是选举结果,都使用了某种形式的机器学习来预见未来。

不断增长的数据可用性以及通过数据学习使我们的生活丰富多彩的系统愿景,使得社会对数据科学领域本已为数不多的专业人员的技能,出现了日益增长的需求。特别是对于训练有素的专家的需求尤为紧迫,这些专家懂得使用更流行的语言开拓机器学习技术的发展前景,如Java、Python、R以及日益增长的Scala。幸运的是,感谢开源社区中成千上万的贡献者,每一种这些语言都有一套丰富且快速增长的库、框架和教程。这些库、框架和教程使用了最先进的技术,并且利用互联网和电脑,几乎任何一个人都能访问它们。由于成熟且稳定的企业级部署以及便携式的JVM平台,Java成了传播工具和技术的重要编程语言,特别是在大规模机器学习项目中,更不用说现有多年以来使用Java的大量专业程序员。因此,掌握如今行业人员中缺乏的技能,可以帮助任何有抱负的专业人士进入机器学习领域,并在这一市场上具备明显的竞争优势。

也许你已经在所在的专业中应用了机器学习技术,或者对于机器学习技术你只是带有一点业余爱好者的兴趣。如果阅读本书时,你可能已经可以随心所欲地使用Java,这当然很好,不过你现在又觉得已经准备好深入挖掘和学习,如何在你接下来的数据科学项目中使用最优秀的开源ML(机器学习)Java架构。如果刚好这就是你所想要的,那么更巧的则是,本书中的所有章节都是为了做到这一点而设计的。

精通一门学科,尤其是机器学习这样有如此明显适用性的学科,需要的不仅仅是理解它的核心概念,熟悉它的数学基础。本书不是机器学习的入门书籍,而是旨在帮助你掌握这个学科必须关注的实际方面的应用,此外还引入了更进一步的主题,扩大介绍资料的范围。为了在开始加强技能之前预热,我们会用这一章快速复习已知的机器学习内容。对于在此之前很少或者根本没有接触过这一学科的跃跃欲试的初学者(仍然想要从本书中获得最大收益),以下是我们的建议:确保不要跳过本章的其他部分。相反,要把这些内容作为深入探索不熟悉的概念的跳板,根据需要来寻找外部资源。到维基百科去搜索,再返回来继续阅读。

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

·机器学习的历史和定义

·哪些不属于机器学习

·机器学习的概念和术语

·机器学习的重要分支

·机器学习中不同的数据类型

·机器学习的应用

·在机器学习中面临的问题

·在大多数机器学习项目中运用的元过程

·我们在本书中使用的一些众所周知的工具、API和资源1.1 机器学习历史和定义

很难给出有关机器学习的确切历史,但是今天我们所用的机器学习的定义,早在19世纪60年代就有使用了。在勒内·笛卡尔(Rene Descartes)的《方法论》中,他提到了自动机(Automata)并说道:

我们可以很容易地了解一台机器的组成,结果是机器可以说话,甚至可以对一个有形实物做出的反应而有所动作,从而带来一些结构上的改变。例如,如果触碰一个特定的部分,机器可能会问我们想对它说什么;如果触碰另外一个部分,机器可能会惊呼它正受到伤害,等等。http://www.earlymoderntexts.com/assets/pdfs/descartes1637.pdf

https://www.marxists.org/reference/archive/descartes/1635/discourse-method.htm

艾伦·图灵(Alan Turing)在他的著作《计算机器与智能》(Computing Machinery and Intelligence)中,通过提出“机器能思考吗?”这一问题,对机器学习的目标有了初步认识。http://csmt.uchicago.edu/annotations/turing.htm

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

亚瑟·塞缪尔(Arthur Samuel)在1959年曾写道:“机器学习是一个研究领域,它使得计算机在没有明确编程的情况下,也具有学习的能力。”

汤姆·米切尔(Tom Mitchell)近期给出了一个机器学习的更确切定义:“在给定某个任务T和某种性能指标P时,如果由性能指标P来衡量一段计算机代码在任务T上的性能,是随着经验E的增加而不断被改善的,这就被称为机器学习。”

机器学习与以下几个领域都有着密切的关联:

·统计数据:使用了如数据采样、评估、假设检验、学习理论和基于统计建模等基本原理。

·算法与计算:采用搜索、遍历、并行化、分布式计算等基础计算机科学的基本概念。

·数据库与知识发现:具有以各种格式存储、检索和访问信息的能力。

·模式识别:能够从数据中寻找有意义的模式,从而进行探索、可视化和预测。

·人工智能:虽然机器学习被认为是人工智能的一个分支,但它与其他分支也有关联,如启发式算法、优选法、演化计算等。1.2 哪些不属于机器学习

认清那些与机器学习有关系但又不属于机器学习的领域,是非常重要的。有的学科和机器学习可能或多或少会有重叠的部分,但是机器学习的底层原理和那些学科却截然不同:

·商业智能(BI)和报告:报告关键绩效指标(Key Performance Indicator,KPI),查询OLAP(在线分析处理),进行数据的切片、切块、钻取,以及数据展示板等,形成的是商业智能的核心组件而不是机器学习的。

·存储和ETL:数据存储和ETL是任何一个机器学习过程中的关键元素,但是它们并不能算是机器学习。

·信息检索、搜索和查询:根据搜索标准或搜索索引来检索数据或文档的能力,这是信息检索的基础,并不是真正的机器学习。机器学习的许多形式,如半监督学习,可以通过搜索相似数据来进行建模,但是搜索并不能算是机器学习。

·知识表示和推理:知识表示用于执行复杂的任务,如本体论、专家系统和语义网,它们也不能算是机器学习。1.3 机器学习概念和术语

本节将描述常用于机器学习的各种概念和术语。

·数据或者数据集:机器学习的本质要依赖于对数据的理解。数据或者数据集通常指的是用于机器学习的可获取的结构化或非结构化的信息。结构化的数据集具有特定的格式,非结构化的数据集常常是以未加工过的文本形式出现。数据可以通过各种存储媒介或存储格式来访问。在结构化数据中,如我们知道的实例或样例或行,每一个元素都遵照预定义的结构。数据能按照大小进行分类:小的或中等规模的数据包含数百或数千个实例,而大数据涉及大规模的数据量,通常是十万或百万量级的规模,用常见的设备存储访问,或者是加载到设备内存,都是不可能的。

·特征、属性、变量或维度:正如之前所提到的,在结构化的数据集中,预定义的元素都有其自己的语义和数据类型,这些元素就是所谓的特征、属性、度量、指示器、变量或者维度。

·数据类型:在许多机器学习算法或技术中,预先定义好的特征还需要按某种形式归类,常见的数据类别有以下几种:

·已分类的或字面上可区分的:这一类型是指数据集中已经定义好的类别或者值。如瞳孔颜色(黑色、蓝色、棕色、绿色、灰色)、文档类型(文本、图片、视频)。

·连续的或数值的:这一类型表示数据字段的数值本质,如用浴室的体重计称得的体重,通过传感器读取的温度,或者是信用卡账户里每月的余额。

·序数型:这一类型表示数据能以某种方法排序。比如衣服尺寸(小、中、大)、拳击等级(重量级、轻重量级、中量级、轻量级、羽量级)。

·目标或标签:在数据集中,用于从训练数据中学习以及在未知数据集中进行预测的特征或者特征集就是所谓的目标或者标签。“正确标注”这个词也被用于某些领域。如前面所说的,标签可以是任何一种形式,即分类型、连续型或序数型。

·机器学习模型:每一种机器学习算法通过从数据集中所学到的内容,维护其在预测中的学习状态,从而预测未来或是给未知数据集一个预判。这就被称为机器学习模型。

·采样:数据采样是机器学习中的一个基本步骤。采样是指从总量中选取一个样例子集,使得抽取的小样本集合具有同总量集合相同的行为模式。为了使采样的样本集能代表总量集合,必须注意选取合适的采样方法。通常,总量集合中的每一个样例都共享一些在问题领域内有意义的属性,比如在大选中的所有合法选民,或者是在未来四年内潜在的汽车购买者。由于搜集所有样本数据通常是被禁止的(或是不可能的),所以只能精挑细选出能满足分析目的的子集合。在采样过程中,对总样本来说,需要认真考虑的地方是采样样本是无偏的。以下列举了基于概率的采样方法。

·统一随机采样:在统一分布的总体数据上进行采样,即每一个对象都有相同的概率被选中。

·分层随机采样:当数据被分为多个类别时所用的采样方法。在这种情况下,为了保证所有类别的数据都能出现在采样集合中,所有数据都会根据类别分成独立的层,每一层又按这一层在总量中的份量,按比例进行采样。当总体数据密度随着种类不同而改变时,常常采用分层采样法,用统计的方法来比较这些类别尤为重要。政治性民意检测,不同人群的投票结果大相径庭,这种情况经常会用到分层采样法。在随机采样中,没有对每一个群体按比例抽取,将会导致错误的投票结果。当我们控制了人口统计数据,就可以避免在投票高的群体上过采样。

·整群采样:有时我们研究的总体是由若干个有着自然界限和代表性的子群组成的。比如跨多个地理区域的数据。应用整群采样时,先随机抽取若干个子群,然后再从抽取的子群中随机抽取若干个个体。由于这种采样方法不会影响真实的总体分布情况,从而降低了数据收集的成本。

·系统采样:当采样结构(目标的有限集作为总体和采样的数据源,比如,维基百科语料库是按标题字母顺序排列的)呈现一定的顺序时,会采用系统采样或间隔采样。随机抽取一个个体作为开始,然后依次间隔k个采样对象来抽取下一个个体,这种方法称为系统采样,k值是总体与样本大小的比值。

·模型评估指标:评估模型的性能时,不同的学习方法有不同的评估指标。在分类上,这里仅仅举几个例子,常用指标有准确率、受试者操作特征(ROC)曲线、训练速度、内存要求和假阳率等(见第2章)。对于聚类,发现的聚类数量、紧凑度和分离度等组成了常用指标(见第3章)。对于流式学习,除了早期提到的标准指标之外,还有一些传统的评估学习器性能的常规指标,如自适应性、学习速度和容突然变化性(见第5章)。

为了更好地解释以上概念,下面给出一个具体例子,其数据来源于常用的样本天气数据集,每行数据包含一组天气状况和一个标签,标签表示对象是否决定在当天打网球。

该数据集的格式是ARFF(属性-关系文件格式)。它由两部分组成:一是文件头,文件头描述特征的信息或属性的数据类型;二是数据,数据部分以@data开始,实例的各属性值用逗号隔开。数据集有5种特征:天气概况(outlook)、温度(temperature)、湿度(humidity)、是否有风(windy)、是否打网球(play)。天气概况、是否有风是类别特征,而湿度和温度是连续特征。是否打网球是目标值,而且是类别特征。1.4 机器学习类型及其子类

现在,我们来详谈有关机器学习的各种子类或者分支。虽然以下列表不够全面,但它涵盖了所有知名的机器学习类型。

·监督学习:这是机器学习中应用最广的一个分支,与标签数据学习有关。如果标签的数据类型是类别型的,那么它就是一个分类问题;如果标签的数据类型是数字型的,那么它就是一个回归问题。例如,如果使用数据集的目的是检查舞弊行为,数据集按类别有真假之分,我们处理的就是分类问题。另一方面,如果目标是预测出一套住房的最佳销售价格,即一个美元数值,我们处理的就是其中一种回归问题。图1-1和图1-2给出了标记数据的示例,当存在一条可以清楚地区分两类数据的直线时(对于高维线性可分的数据,叫做分割超平面),这些标记数据能够保证分类技术的应用,如适合线性可分离数据的逻辑回归分类技术。图1-1 线性可分数据图1-2 非线性可分数据集示例

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

·无监督学习:在不提供标签的情况下理解数据并探索建立机器学习模型,称为无监督学习。聚类、流式学习以及离群值检测是无监督学习所涉及的技术,这些技术会在第3章中详细讨论。需要利用无监督学习的问题示例有很多。其中一个示例是,根据客户的购买行为进行客户分类。对于生物数据的情况,利用无监督学习技术,根据相似的基因表达值,组织样本可以被聚类。

图1-3展示的是具有内在结构的数据,可以使用无监督学习技术,如k均值,显示成不同的聚类。

用不同的技术来检测全局离群值和局部离群值,全局离群值即某些有关整个数据集的异常示例,局部离群值即某些和相邻数据格格不入的异常示例。图1-4中通过一个两组特征数据集来说明局部离群值和全局离群值的概念。图1-3 数据中的聚类图1-4 局部离群值和全局离群值

·半监督学习:数据集只有部分标记数据,而大量的数据未被标记时,从这样的数据集中学习就称为半监督学习。例如,在以检测欺诈为目的处理财务数据时,可能存在大量未被标记的数据,并且只有少量的已知欺诈交易和非欺诈交易。在这种情况下,可以应用半监督学习。

·图形挖掘:挖掘的数据呈现的是图形结构,则称为图形挖掘。它是不同的生物信息学、Web挖掘以及社区挖掘应用的社交网络分析与结构分析的基础。

·概率图建模及推断:学习和利用出现在特征之间的条件依赖关系,并且这些特征表现为一种基于图的模型,构成了概率图建模的分支。贝叶斯网络和马尔可夫的随机场就是这种模型的其中两个类型。

·时间序列预测:时间序列预测指的是一种学习方式,数据具有明显的时间行为,并且与时间的关系建立了模型。一个常见的示例是财务预测,某个领域的股票表现可能就是这个预测模型的目标。

·关联分析:关联分析是一种学习方式,数据以项目集或者市场购物篮的形式出现,并且对关联规则进行建模,来探索和预测项目之间的关系。关联分析中的一个常见示例是,学习被顾客从杂货店里买走的最常见的物品之间的关系。

·强化学习:强化学习是一种学习方式,基于从环境中接收的奖励或惩罚的反馈,最大限度地提高机器学习的性能。最近的一个使用强化学习以及其他技术的著名示例是,由Google开发,于2016年3月一举击败世界围棋冠军李世石的AlphaGo。使用奖励和惩罚机制,该模型首先要基于成千上万的围棋板上棋子的位置,在监督学习阶段接受训练,然后在强化学习阶段自训,最终变得足够强大,战胜了人类的最佳棋手。http://www.theatlantic.com/technology/archive/2016/03/the-invisible-opponent/475611/

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

·流式学习或增量学习:从实时的或伪实时的流数据中通过一种监督、无监督或者半监督的方式来学习,称为流式学习或增量学习。从不同类型的工业系统中学习传感器的行为,将其分类为正常的行为和异常的行为,就是一种需要实时提供和实时检测的应用。1.5 用于机器学习的数据集

为了从数据中学习,我们必须能够理解和管理各种形式的数据。数据来自多种多样的数据源,因此,数据集可能在结构上有很大的不同,或者很少或根本没有数据结构。本节我们会展示一个高级的分类数据集以及一些常见的示例。

基于这些数据集的结构,或者干脆连结构也没有,数据集可以分为以下几类。

·结构化数据:结构化数据的数据集更适合作为大多数机器学习算法的输入。数据通过记录或行的形式出现,按照一种容易理解的格式,特征以表格中的列,或者用分隔符、标记来分隔的字段出现。记录和实例之间没有明确的关系。这样的数据集通常存在于平面文件或关系数据库中。表1-1所示的银行金融交易记录是结构化数据的一个示例。表1-1 带有欺诈标签的金融卡交易数据

·交易或市场数据:这是结构化数据的一种特殊形式,在这样的结构化数据中,每个条目对应着一个项目的集合。市场数据集的示例是不同的顾客在杂货店购买的物品条目或者顾客看过的电影清单,如表1-2所示:表1-2 从杂货店购买的商品条目的市场数据集

·非结构化数据:非结构化数据和结构化数据不一样,它通常不具备已知的格式。文本数据、图像和视频数据都是不同格式的非结构化数据。通常需要通过某种形式的转换,将这些形式的数据中的特征提取到一个结构化的数据集中,从而可以应用传统的机器学习算法。

文本数据样本没有明显的结构,所以是非结构化的。从正常的信息(ham)中分离出的垃圾信息(spam)是一个二值分类问题。这个示例中,真阳性(spam)和真阴性(ham)通过各自的标签来区分,也就是每一条数据的第二个标记。SMS垃圾收集数据集(UCI机器学习库),来源:圣卡洛斯(Sao Carlos)联邦大学的Tiago A.Almeida。

·序列数据:序列数据有一种有关“顺序”的明确概念。顺序可以是时间序列数据中特征和时间变量之间的某些关系,也可以是基因数据集中按某种形式重复出现的符号。关于序列数据的两个示例是气象数据和基因序列数据。图1-5显示了天气,时间和传感器之间的关系。图1-5 来自传感器数据的时间序列

在三组基因序列中,都展示了重复出现的CGGGT和TTGAAAGTGGTG,如图1-6所示。图1-6 DNA基因序列作为一组符号序列

·图形数据:图形数据的特征是数据中的实体之间存在的关系形成了一个图形结构。图形数据集可以是结构化的记录格式,也可以是非结构化的格式。通常,关系图必须从数据集中挖掘而来。保险行业中的理赔可以被视为结构化记录,其中包含和理赔人有关的地址、电话号码等相关的理赔详情。这些可以在图形结构中查看。以万维网为例,我们有可以作为非结构化数据的网页,这些网页包含链接,以及使用Web链接构建Web页面之间的关系图,从而产生了一些当下被最广泛挖掘的图形数据集,如图1-7所示。图1-7 保险理赔数据转变成一个图形结构,展示车辆、驾驶员、保单和地址之间的关系1.6 机器学习的应用

考虑在人类所努力钻研的不同领域中,机器学习的用途正在快速增长,任何把典型应用置于使用某些机器学习形式的各行各业中的尝试,必定是不完整的。不过,在本节中,按应用领域和使用的机器学习类型来分门别类,我们列出了一套广泛的机器学习应用示例,如表1-3所示。表1-3 机器学习的应用1.7 机器学习中的实际问题

处理需要机器学习来解决的问题时,必须认识到约束条件和潜在的次优化条件的性质类型。对这些问题的性质属性的理解、它们存在的影响以及处理这些问题的方法会在之后的章节中讨论。现在简要介绍一下我们会面临的实际问题。

·数据质量和噪声:构建机器学习模型时,缺少的值、重复的值、由于人为的或者仪器记录错误而产生的不正确的值以及不正确的数据格式,都是需要考虑的重要问题。处理不好数据质量问题会导致不正确的或者不完整的模型。在第2章中,我们将重点介绍其中的一些问题及通过数据清理来克服这些问题的策略。

·不平衡数据集:在很多实际的数据集中,训练数据的标签之间存在不平衡。数据集中的这种不平衡影响了机器学习的选型、算法选择的过程、模型评估与验证。如果不采用正确的技术,模型会产生较大的偏差,并且机器学习的效果也不明显。接下来的几章会详细介绍使用元学习过程的技术,如成本敏感学习、集成学习、离群值检测等,这些技术都可以运用到存在不平衡数据集的情况中。

·数据规模、速度以及可扩展性:大规模的数据通常以原始形式存在,或者作为高速的实时流数据存在。无论是由于算法或者硬件固有的约束,还是由于算法加硬件组合的约束,基于整体数据的机器学习会变得不可行。为了减少数据集的数量以适应现有的可用资源,则必须进行数据采样。数据采样可以通过多种方式进行,并且每一种采样方式都会引入偏差。对样本偏差进行模型验证必须采用各种技术,如分层采样、改变样本大小和增加不同集合上的实验规模。使用大数据机器学习也可以克服数据规模和采样偏差的问题。

·过拟合:预测模型中的一个核心问题是,模型不够广泛全面,而该模型对给定的训练数据却拟合得很好。这会导致模型在被应用到不可见数据时表现不佳。之后的章节中会描述克服这些问题的各种技术。

·维数灾难:处理高维数据,也就是处理具有大量特征的数据集时,机器学习算法的可扩展性成了一个严重的问题。向数据添加更多的特征所带来的其中一个问题是稀疏性,也就是说,现在每个特征空间的单位平均数据点较少,除非特征数量的增长伴随着训练实例数量的指数性增长。这会影响许多方法的性能,如基于距离的算法。添加更多的特征也会降低学习器的预测能力,如图1-8所示。在这种情况下,需要一个更合适的算法,或者必须减少数据的维数(特征)。图1-8 在分类学习中表现出的维数灾难,添加更多的特征会降低分类器的性能1.8 机器学习角色与过程

任何将机器学习应用于大型问题的尝试都需要多种角色的协同努力,每一个角色都要遵循一套严格、高效以及强健的系统流程。以下角色和流程确保了努力的目标在一开始就已明确,以及在数据分析、数据采样、模型选择、部署和性能评估时能够采用正确的方法,即对于一个可以进行一致性分析以及可重复性分析的综合框架来说,所有这些阶段都属于这个框架的组成之一。1.8.1 角色

参与者在每个步骤中扮演特定的角色。这些职责在以下四个角色中体现出来。

·业务领域专家:具有问题领域知识的主题专家

·数据工程师:参与数据收集、转换和清理

·项目经理:流程进度平稳开展的监督人员

·数据科学家或机器学习专家:负责应用描述性或预测性分析技术1.8.2 过程图1-9 迭代过程

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

·识别业务问题:理解项目或流程的目的以及最终的目标是第一步。通常是由业务领域专家联合项目经理和机器学习专家一起执行。在数据可用性、数据格式、数据规范、数据集合、数据投资回报率(ROI)、数据商业价值、数据可交付方面的最终目标是什么?所有这些问题都会在流程的这一阶段中讨论。清楚地识别目标,并尽可能用可量化的方式,如节省的美元数值,找到预定义的离群值或者聚类数量,或者预测出定额的假阳数量等,就是这一阶段的重要目标。

·机器学习映射:下一步是将业务问题映射到在上一节中讨论过的一种或多种机器学习类型上。这一步通常由机器学习专家来执行。在这一步中,要决定我们是否应该只使用一种机器学习形式(例如监督、无监督、半监督),或者是否使用混合形式更适合于该项目。

·数据收集:以一致认可的数据格式和规范,为后续的流程获取原始数据。这一步通常由数据工程师来执行,可能需要处理一些最基本的ETL(Extract,Transform,Load,提取、转换和加载)步骤。

·数据质量分析:在这一步中,我们对缺失的值、重复的值等数据进行分析,对分类和连续类型进行基本的统计分析,还要做类似的工作来评估数据的质量。数据工程师和数据科学家可以共同完成这项工作。

·数据采样和转换:确定数据是否需要被划分成多个样本,并完成各种规格的数据采样来进行样本培训、样本验证或样本测试,这些都是在这一步中所做的工作。它包括采用不同的采样技术,如训练数据集的过度采样和随机采样,从而有效地让算法学习,特别是在标签数据特别不平衡的情况下。这项工作由数据科学家负责。

·特征分析和选择:这是一个迭代的过程,在很多任务中会与建模相结合,以确保针对特征辨别值或特征的有效值,对特征进行分析。在建模过程之前,会涉及寻找新的特征、转换现有特征、处理之前提到的数据质量问题以及选择特征的一个子集等。通常由数据科学家承担这项工作。

·机器学习建模:这是一个迭代过程,用来处理基于数据特性和学习类型的不同算法。它涉及多个步骤,如生成假设、选择算法、调整参数以及从评估到找到符合标准的模型以获得结果。由数据科学家来完成该项工作。

·模型评估:虽然某种程度上,这一步和所有之前的步骤都有关系,但是它和业务理解阶段以及机器学习映射阶段的联系更密切。评估标准必须以某种方式映射为业务问题或目标。每一个问题/项目都有自己的目标,要么是提高真阳性数,减少假阳性数,发现异常聚类或行为,要么是分析不同聚类的数据。隐式或显式地测量这些目标的不同技术,会基于机器学习技术来使用。通常由数据科学家和业务领域专家参与这一步。

·模型选择和部署:根据评估指标,选择一个或多个、独立的或者作为一个集成的模型。部署模型通常需要解决几个问题:运行时的可扩展性措施、环境的执行规范以及审计信息,在此仅列举小部分问题。获取基于机器学习关键参数的审计信息是该过程的重要组成部分。它可以确保模型的性能能够被追踪和被比较,以检查模型衰退或老化。保存关键信息,如训练数据规模、日期、数据质量分析等,和学习类型无关。监督学习可能包括保存混淆矩阵、真阳性率、假阳性率、ROC曲线下面积、精确率、召回率、错误率等。无监督学习可能涉及聚类或离群值的评估结果、聚类统计等。这是数据科学家以及项目经理负责的范围。

·模型性能监测:这项工作包括根据模型定期跟踪模型性能,根据标准对模型进行评估,如预测结果真阳性率、预测结果假阳性率、性能速度、内存分配等。相对于对训练模型的性能所做的持续评估中的指标,我们必须对以上列举的指标和持续评估的指标间的偏差进行度量。偏移中的偏差和公差可以决定,随着时间的推移,应该重复该过程还是重新调整该模型。数据科学家会负责这个阶段的工作。

从之前的图表可以看出,整个过程是迭代的。部署了模型或模型集之后,业务因素和环境因素可能会改变影响方案性能的方式,需要重新评估业务目标和成功标准。这就又把我们带回到这个过程的循环中。1.9 机器学习工具和数据集

机器学习中,成功完成任何规模或复杂性的项目所需掌握的必备技术是,通过对广泛使用的数据集进行实验,亲自熟悉可用的工具和框架,常见的Java工具和框架如下所示:

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

·授权许可证:GPL(社区版)和Commercial(企业版)

·网站:https://rapidminer.com/

·Weka:Weka是一个全面的开源Java工具集,利用自身可公开的数据集,完成数据挖掘和构建机器学习应用。

·授权许可证:GPL

·网站:http://www.cs.waikato.ac.nz/ml/weka/

·Knime:KNIME(强烈建议字母k不发音,念作“naime”)Analytics Platform是一个Java构建的分析平台,它提供了一个集成的工具集、一组丰富的算法以及一个用作分析的可视化工作流,不需要比如Java、Python以及R之类的标准编程语言。不过,使用者可以用Java和其他语言写脚本来实现KNIME原本不具备的功能。

·授权许可证:GNU GPL v3

·网站:https://www.knime.org/

·Mallet:Mallet是一个针对自然语言处理(NLP)的Java库。它提供了文档分类、序列标记、主题建模以及其他机器学习基于文本的应用,还有一个任务管道的API。

·授权许可证:通用公共许可证(Common Public License)1.0版(CPL-1)

·网站:http://mallet.cs.umass.edu/

·Elki:Elki是一个研究型的Java软件,主要针对无监督算法的数据挖掘。它使用数据索引结构来实现高性能和可伸缩的数据挖掘,该结构提高了多维数据的访问性能。

·授权许可证:AGPLv3

·网站:http://elki.dbs.ifi.lmu.de/

·JCLAL:JCLAL是一个主动学习的Java类库,也是一种开发主动学习方法的开源框架,这是处理学习预测模型的其中一个领域,源自标记过的和未标记的混合数据(半监督学习是另外一个领域)。

·授权许可证:GNU通用公共许可证(General Public License)3.0版(GPLv3)

·网站:https://sourceforge.net/projects/jclal/

·KEEL:KEEL是一个针对设计实验而用Java写的开源软件,主要适用于处理数据挖掘问题中的进化学习和基于软计算技术的实现。

·授权许可证:GPLv3

·网站:http://www.keel.es/

·DeepLearning4J:DeepLearning4J是一个Java和Scala的分布式深度学习库。它与Spark和Hadoop集成在一起。异常检测和推荐系统都是通过深度学习技术,充分利用所生成的模型的用例。

·授权许可证:Apache License 2.0

·网站:http://deeplearning4j.org/

·Spark-MLlib:(包含在Apache Spark分布版本中)MLlib是涵盖在Spark中,主要使用Scala和Java编写的机器学习库。在Spark的数据帧介绍中,spark.ml包写在数据帧之上,在原来的spark.mllib包中

试读结束[说明:试读内容隐藏了图片]

下载完整电子书

若在网站上没有找合适的书籍,可联系网站客服获取,各类电子版图书资料皆有。

客服微信:xzh432

登入/注册
卧槽~你还有脸回来
没有账号? 忘记密码?