计算和通信的结合建立了一个以信息为基础的新领域。但绝大多数信息尚处于原始状态,即以数据的形式存在的状态。假如我们将数据定义为被记录下的事实,那么信息就是在这些记录事实的数据中所隐藏的一系列模式或预期。在数据库中蕴藏了大量具有潜在重要性的信息,这些信息尚未被发现和利用,我们的任务就是将这些数据释放出来。
数据挖掘是将隐含的、尚不为人知的同时又是潜在有用的信息从数据中提取出来。为此我们编写计算机程序,自动在数据库中筛选有用的规律或模式。假如能发现一些明显的模式,则可以将其归纳出来以对未来的数据进行准确预测。当然,数据挖掘结果中肯定会出现一些问题,比如许多模式可能是不言自明的或者没有实际意义的。另一些还有可能是虚假的,或者由于某些具体数据集的偶然巧合而产生的。在现实世界中,数据是不**的:有些被人为篡改,有些会丢失。我们所观察到的所有东西都不是完全**的:任何规律都有例外,并且总会出现不符合任何一个规律的实例。算法必须具有足够的健壮性以应付不**的数据,并能提取出不**但有用的规律。
机器学习为数据挖掘提供了技术基础,可用其将信息从数据库的原始数据中提取出来,以可以理解的形式表达,并可用做多种用途。这是一种抽象化过程:如实地全盘接收现有数据,然后在其基础上推导出所有隐藏在这些数据中的结构。本书将介绍在数据挖掘实践中,用以发现和描述数据中的结构模式而采用的机器学习工具和技术。
就像所有新兴技术都会受到商界的强烈关注一样,关于数据挖掘应用的报道正淹没在那些技术类或大众类出版社的大肆宣扬中。夸张的报道向人们展示了通过设立学习算法就能从浩瀚的数据汪洋中发现那些神秘的规律。但机器学习中绝没有什么魔法,没有什么隐藏的力量,也没有什么巫术,有的只是一些能将有用信息从原始数据中提取出来的简单和实用的技术。本书将介绍这些技术并展示它们是如何工作的。
我们将机器学习理解为从数据样本中获取结构描述的过程。这种结构描述可用于预测、解释和理解。有些数据挖掘应用侧重于预测:从数据所描述的过去预测将来在新情况下会发生什么,通常是猜测新的���本分类。但同样令我们感兴趣也许更感兴趣的是,“学习”的结果是一个可以用来对样本进行分类的真实结构描述。这种结构描述不仅支持预测,也支持解释和理解。根据我们的经验,在绝大多数数据挖掘实践应用中,用户*感兴趣的莫过于掌握样本的本质。事实上,这是机器学习优于传统统计模型的一个主要优点。
本书向我们诠释多种机器学习方法。其中一部分出于方便教学的目的而仅仅罗列一些简单方案,以便清楚解释基本思想如何实现。其他则考虑到具体实现而列举很多应用于实际工作中的真实系统。很多都是近几年发展起来的新方法。
我们创建了一套综合的软件资源以说明本书中的思想。软件名称是怀卡托智能分析环境(Waikato Environment for Knowledge Analysis,Weka Weka(发音与Mecca类似)是一种天生充满好奇心的不会飞的鸟,这种鸟仅在新西兰的岛屿上出现过。),它的Java源代码可以在网站中得到。Weka几乎可以完善地实现本书中包含的所有技术。它包括机器学习方法的说明性代码以及具体实现。针对一些简单技术,它提供清楚而简洁的实现,以帮助理解机器学习中的相关机制。Weka还提供一个工作平台,完整、实用、高水准地实现了很多流行的学习方案,这些方案能够运用于实际的数据挖掘项目或学术研究中。*后,本书还包括一个形如Java类库的框架,这个框架支持嵌入式机器学习的应用,乃至新的学习方案的实现。
本书旨在介绍用于数据挖掘领域的机器学习工具和技术。读完本书后,你将对这些技术有所了解并能体会到它们的功效和实用性。如果你希望用自己的数据进行实验,用Weka就能轻易地做到。
提供数据挖掘案例研究的商业书籍中往往涉及一些非常具有实用性的方法,这些方法与当前机器学习教材中出现的更理论化、原则化的方法之间存在巨大鸿沟,本书跨越了这个鸿沟(关于本书的一些简介将出现在后面第1章的末尾)。这个鸿沟相当大,为了让机器学习技术应用富有成果,需要理解它们是如何工作的。这不是一种可以先盲目应用而后期待好结果出现的技术。不同的问题需要不同的技术来解决。但是如何根据实际问题来选择合适的技术并不是那么容易的事情:你需要知道到底有多少可能的解决方案。我们在本书中所论及的技术范围相当广泛,这是因为和其他商业书籍不同,本书无意推销某种特定的商业软件或方案。我们列举大量实例,但为展示实例所采用的数据集却小得足以让你搞清楚实例的整个过程。真实的数据集太大,不能做到这一点(而真实数据集的获取常受限于商业机密)。我们所选择的数据集并不是用来说明那些拥有大型数据的真实问题,而是帮助你理解不同技术的作用,它们是如何工作的,以及它们的应用范围是什么。
本书面向对实际数据挖掘技术所包含的原理和方法感兴趣的“技术敏感型”普通读者。本书同样适用于需获得这方面新技术的信息专家,以及所有希望了解机器学习领域技术细节的人。本书也是为有着一般兴趣的信息系统实际工作者所写的,如程序员、咨询顾问、开发人员、信息技术管理员、规范编写者、专利审核者、业余爱好者,以及学生和专家教授。他们需要拥有这样一本书:拥有大量实例且简单易读,向读者阐释与机器学习相关的主要技术是什么、做什么、如何运用它们,以及它们是如何工作的。本书面向实际,告诉读者“如何去做”,同时包括许多算法、代码以及具体实例的实现。所有在实际工作中进行数据挖掘的读者将直接得益于书中叙述的技术。本书旨在帮助那些希望找到掩藏在天花乱坠广告宣传下的机器学习真谛的人们,以及帮助那些需要实际可行的、非学术的、值得信赖的方案的人们。我们避免对特定的理论或数学知识做过分要求。在某些涉及特定知识的地方,我们会将相关文本框起来,这些内容是可选部分,通常是为照顾对理论和技术感兴趣的读者,跳过这部分内容不会对整体的连贯性有任何影响。
本书分为几个层次,不管你是想走马观花地浏览基本概念,还是想深入详尽地掌握技术细节,阅读本书都可以满足你的要求。我们相信机器学习的使用者需要更多地了解他们运用的算法如何工作。我们常常可以发现,**的数据模型是与它的诠释者分不开的,诠释者需要知道模型是如何产生的,并且熟悉模型的长处和局限性。当然,并不要求所有的用户都对算法的细节有深入理解。
根据上述考量,我们将对机器学习方法的描述分为几个彼此承接的层次。本书共分为三部分,**部分是关于数据挖掘的介绍,读者将在这一部分学习数据挖掘的基本思想,这一部分包括书中的前五章。第1章通过实例说明机器学习是什么,以及能用在什么地方,并附带提供一些实际应用。第2、3章给出不同的输入和输出,或者称为知识表达(knowledge representation)。不同的输出要求不同的算法。第4章介绍机器学习的基本方法,这些方法都以简化形式出现以方便读者理解。其中的相关原理通过各种具体算法来呈现,这些算法并未包含复杂细节或精妙的实现方案。为从机器学习技术的应用升级到解决具体的数据挖掘问题,必须对机器学习的效果有一个评估。第5章可以单独阅读,它帮助读者评估从机器学习中得到的结果,解决性能评估中出现的某些复杂问题。
第二部分介绍数据挖掘的一些**技术。在*低同时也是*详细的层次上,第6章详尽揭示实现整系列机器学习算法的步骤,以及在实际应用中为更好工作所必需的、较为复杂的部分(但忽略某些算法对复杂数学原理的要求)。尽管有些读者也许想忽略这部分的具体内容,但只有到这一层,才能涉及完整、可运作并经过测试的机器学习的Weka实现方案。第7章讨论一些涉及机器学习输入/输出的实际问题,例如,选择属性和离散化属性。第8章主要介绍“集成学习”技术,这种技术综合来自不同学习技术的输出。第9章展望发展趋势。
本书阐述了在实际机器学习中所使用的大多数方法,但未涉及强化学习(reinforcement learning),因为它在实际数据挖掘中极少应用;未包含遗传算法(genetic algorithm),因为它仅仅是一种优化技术;同样,也没有包含关系学习(relational learning)和归纳逻辑程序设计(inductive logic programming),因为它们很少被主流数据挖掘应用所采纳。
第三部分介绍Weka数据挖掘平台,它提供在**部分和第二部分中所描述的几乎所有思想的实例。我们将那些概念性的材料从如何使用Weka的实际操作材料中清楚地分离出来。在**、二部分每一章的结尾会给出指向第三部分中相应Weka算法的索引。读者可以忽略这些部分,或者如果你急于分析你的数据并且不愿意纠结于说明算法的技术细节,可以直接跳到第三部分。选定Java来实现本书的机器学习技术,是因为作为面向对象的编程语言,它允许通过统一的界面进行学习方案和方法的前期和后期处理。用Java取代C++、Smalltalk或者其他面向对象的语言,是因为用Java编写的程序能运行在大部分计算机上而不需要重新进行编译,不需要复杂的安装过程,甚至不需要修改源代码。Java程序编译成字节码后,能运行于任何安装了适当解释器的计算机上。这个解释器称为Java虚拟机。Java虚拟机和Java编译器能免费用于所有重要平台上。
在当前所有的可能选择中,能得到广泛支持的、标准化的、拥有详尽文档的编程语言,Java似乎是*佳选择。但是,由于在执行前要通过虚拟机将字节码编译为机器代码,所以Java程序的运行速度比用C或C++语言编码的相应程序慢。这个缺陷在过去看来很严重,但在过去二十年间,Java的执行效率有了大幅度提升。依我们的经验,如果Java虚拟机采用即时编译器,那么Java运行慢这个因素几乎可以忽略不计。即时编译器将整个字节码块翻译成机器代码,而不是一个接一个地翻译字节码,所以它的运行速度能够得到大幅度的提高。如果对你的应用来说,这个速度依然很慢,还可以选择采用某些编译器,跳过字节码这一步,直接将Java程序转换成机器代码。当然这种代码不能跨平台使用,这样牺牲了Java的一个*大优势。
更新与修改
1999年,我们完成本书的第1版,2005年初完成第2版,经过我们精心修改润色的本书第3版在2011年同读者见面。这个世界过去二十年间可谓是沧海桑田!在保留前版基本核心内容的同时,我们增加了很多新内容,力图使本书与时俱进。本书第3版较前版接近翻倍的文字量可以反映出这种变化。当然,我们也对前版中出现的错误进行了校正,并将这些错误集中放到我们的公开勘误文件里。
第2版
本书第2版中*主要的改变是增加了一个专门的部分来介绍Weka机器学习工作平台。这样做可以将书中的主要部分独立于工作平台呈现给读者,我们将在第3版中沿用这个方法。在第1版中广为使用和普及的Weka工作平台在第2版中已经改头换面,增加了新的图形用户界面或者说是三个独立的交互界面,这使读者使用起来更得心应手。其中*基本的界面是Explorer界面,通过该界面,所有Weka的功能都可以经由菜单选择和表单填写的方式完成;另一个界面称为Knowledge Flow界面,它允许对流数据处理过程进行设置;第三个界面是Experimenter界面,可以使用它对某一语料库设置自动地运行选定的机器学习算法,这些算法都带有不同的参数设置,Experimenter界面可以收集性能统计数据,并在所得实验结果的基础上进行有意义的测试。这些界面可以降低数据挖掘者的门槛。第2版中包括一套如何使用它们的完整介绍。
此外,第2版还包括如下我们前面曾大致提及的新内容。我们对介绍规则学习和成本敏感评估的章节进行了扩充。为了满足普遍需求,我们增加了一些有关神经网络方面的内容:感知器及相关的Winnow算法,以及多层感知器和BP算法,Logistic回归也包含在内。我们介绍如何利用核感知器和径向基函数网络来得到非线性决策边界,还介绍用于回归分析的支持向量机。另外,应读者要求和Weka新特性的加入,我们还融入了有关贝叶斯网络的新章节,其中介绍如何基于这些网络来学习分类器以及如何利用AD树来**地应用这些分类器。
在过去的五年(1999—2004)中,文本数据挖掘得到极大的关注,这样的趋势反映在以下方面:字符串属性在Weka中的出现、用于文本分类的多项式贝叶斯以及文本变换。我们还介绍用以搜寻实例空间的**数据结构:为**寻找*近邻以及加快基于距离的聚类而采用的kD树和球形树。我们给出新的属性选择方案(如竞赛搜索和支持向量机的使用),以及新组合模型技术(如累加回归、累加Logistic回归、Logistic模型树以及选择树等),还讨论利用无标签数据提高分类效果的*新进展,包括协同训练(co-training)和co-EM方法。
第3版
第3版在第2版基础上进行彻底革新,大量新方法、新算法的引入使本书在内容上与时俱进。我们的基本理念是将本书和Weka软件平台更紧密地融合。Weka现在的版本已经涵盖本书前两部分绝大多数思想的实现,同时你也能通过本书获取关于Weka的几乎所有信息。第3版中,我们还添加了大量文献的引用:引用数量达到第1版的3倍多。
Weka在过去十年中变得焕然一新,也变得易于使用,并且在数据挖掘功能方面有很大提高。它已经集成了无比丰富的机器学习算法和相关技术。Weka的进步部分得益于数据挖掘领域的近期进展,部分受惠于用户引导以及需求驱动,它使我们对用户的数据挖掘需求了若指掌,充分地借鉴发展中的经验又能很好地选择本书内容。
如前文所述,新版本分为三个部分,其中章节内容有部分调整。更重要的是,增加了很多新内容,以下列举部分重要的改动:
第1章包含了一小节有关Web挖掘的内容,并且从道德角度探讨据称是匿名数据中的个体再识别问题。另外一个重要的补充是关于多实例学习(multi-instance learning),这方面内容出现在两个新增小节中:4.9节介绍基本方法,6.10节介绍一些更**的算法。第5章包含有关交互式成本-收益分析(interactive cost-benefit analysis)的新内容。第6章也有大量新增内容:成本-复杂度剪枝(cost-complexity pruning)、**关联规则算法(这种算法利用扩展前缀树将压缩版本的数据集存储到主存)、核岭回归(kernel ridge regression)、随机梯度下降(stochastic gradient descent),以及层次聚类方法(hierarchical clustering method)。旧版中关于输入/输出的章节被分为两章:第7章讲述数据转换(主要与输入有关),第8章是集成学习(输出)。对于前者,我们增加了偏*小二乘回归(partial least-squares regression)、蓄水池抽样算法(reservoir sampling)、一分类学习(one-class learning)——将多分类问题分解为集成嵌套二分法问题,以及校准类概率(calibrating class probabilities)。对于后者,我们增加了新内容以比较随机方法与装袋算法和旋转森林算法(rotation forest)。而关于数据流学习和Web挖掘的内容则增添到第二部分的*后一章。
第三部分主要介绍Weka数据挖掘工作平台,也加入大量新内容。Weka中添入多种新的过滤器、机器学习算法、属性选择算法、如多种文件格式转换器一样的组件以及参数优化算法。实际上,第3版中介绍的新版本Weka比第2版中的Weka增加了50%的算法。所有这些变化都以文档形式保存。为了满足一些常见要求,我们给出关于不同分类器输出的细节并解释这些输出所揭示的意义。另一个重要的变化是我们新增了一个崭新的章节——第17章,在这一章中给出一些关于Weka Explorer界面的辅导练习(其中的部分练习颇具难度),这些练习我们建议Weka新用户都能尝试着做一遍,这有助于你了解Weka究竟能做些什么。