当前位置:首页 » 机器学习电子书 » 正文

机器学习实战 (图灵程序设计丛书 72) - 电子书下载(高清版PDF格式+EPUB格式)

1199 人参与  2018年12月21日 23:26  分类 : 机器学习电子书  评论

机器学习实战 (图灵程序设计丛书 72)-[美]Peter Harrington

            在线阅读                   百度网盘下载(h0ko)


image.png

书名:机器学习实战 (图灵程序设计丛书 72)

作者:[美]Peter Harrington

格式:EPUB, HTMLZ, PDF

书号:9787115317957

路径:点击打开

出版:人民邮电出版社

排序作者:Harrington, Peter

排序书名:机器学习实战 (图灵程序设计丛书 72)

日期:09 12月 2018

uuid:140bd33a-517b-45dd-a53d-1571bd8ad294

id:518

出版日期:6月 2013

修改日期:09 12月 2018

大小:6.27MB

语言:中文


1.8 本章小结

尽管没有引起大多数人的注意,但是机器学习算法已经广泛应用于我们的日常生活之中。每天我们需要处理的数据在不断地增加,能够深入理解数据背后的真实含义,是数据驱动产业必须具备的基本技能。

学习机器学习算法,必须了解数据实例,每个数据实例由多个特征值组成。分类是基本的机器学习任务,它分析未分类数据,以确定如何将其放入已知群组中。为了构建和训练分类器,必须首先输入大量已知分类的数据,我们将这些数据称为训练样本集。

尽管我们构造的鸟类识别专家系统无法像人类专家一样精确地识别不同的鸟类,然而构建接近专家水平的机器系统可以显著地改进我们的生活质量。如果我们可以构造的医生专家系统能够达到人类医生的准确率,则病人可以得到快速的治疗;如果我们可以改进天气预报,则可以减少水资源的短缺,提高食物供给。我们可以列举许许多多这样的例子,机器学习的应用前景几乎是无限的。

第一部分的后续6章主要研究分类问题,它是监督学习算法的一个分支,下一章我们将介绍第一个分类算法——k-近邻算法。2.4 本章小结

k近邻算法是分类数据最简单最有效的算法,本章通过两个例子讲述了如何使用k近邻算法构造分类器。k近邻算法是基于实例的学习,使用算法时我们必须有接近实际数据的训练样本数据。k近邻算法必须保存全部数据集,如果训练数据集的很大,必须使用大量的存储空间。此外,由于必须对数据集中的每个数据计算距离值,实际使用时可能非常耗时。

K近邻算法的另一个缺陷是它无法给出任何数据的基础结构信息,因此我们也无法知晓平均实例样本和典型实例样本具有什么特征。下一章我们将使用概率测量方法处理分类问题,该算法可以解决这个问题。

3.5 本章小结

决策树分类器就像带有终止块的流程图,终止块表示分类结果。开始处理数据集时,我们首先需要测量集合中数据的不一致性,也就是熵,然后寻找最优方案划分数据集,直到数据集中的所有数据属于同一分类。ID3算法可以用于划分标称型数据集。构建决策树时,我们通常采用递归的方法将数据集转化为决策树。一般我们并不构造新的数据结构,而是使用Python语言内嵌的数据结构字典存储树节点信息。

使用Matplotlib的注解功能,我们可以将存储的树结构转化为容易理解的图形。Python语言的pickle模块可用于存储决策树的结构。隐形眼镜的例子表明决策树可能会产生过多的数据集划分,从而产生过度匹配数据集的问题。我们可以通过裁剪决策树,合并相邻的无法产生大量信息增益的叶节点,消除过度匹配问题。

还有其他的决策树的构造算法,最流行的是C4.5和CART,第9章讨论回归问题时将介绍CART算法。

本书第2章、第3章讨论的是结果确定的分类算法,数据实例最终会被明确划分到某个分类中。下一章我们讨论的分类算法将不能完全确定数据实例应该划分到某个分类,或者只能给出数据实例属于给定分类的概率。

4.8 本章小结

对于分类而言,使用概率有时要比使用硬规则更为有效。贝叶斯概率及贝叶斯准则提供了一种利用已知值来估计未知概率的有效方法。

可以通过特征之间的条件独立性假设,降低对数据量的需求。独立性假设是指一个词的出现概率并不依赖于文档中的其他词。当然我们也知道这个假设过于简单。这就是之所以称为朴素贝叶斯的原因。尽管条件独立性假设并不正确,但是朴素贝叶斯仍然是一种有效的分类器。

利用现代编程语言来实现朴素贝叶斯时需要考虑很多实际因素。下溢出就是其中一个问题,它可以通过对概率取对数来解决。词袋模型在解决文档分类问题上比词集模型有所提高。还有其他一些方面的改进,比如说移除停用词,当然也可以花大量时间对切分器进行优化。

本章学习到的概率理论将在后续章节中用到,另外本章也给出了有关贝叶斯概率理论全面具体的介绍。接下来的一章将暂时不再讨论概率理论这一话题,介绍另一种称作Logistic回归的分类方法及一些优化算法。

5.4 本章小结

Logistic回归的目的是寻找一个非线性函数Sigmoid的最佳拟合参数,求解过程可以由最优化算法来完成。在最优化算法中,最常用的就是梯度上升算法,而梯度上升算法又可以简化为随机梯度上升算法。

随机梯度上升算法与梯度上升算法的效果相当,但占用更少的计算资源。此外,随机梯度上升是一个在线算法,它可以在新数据到来时就完成参数更新,而不需要重新读取整个数据集来进行批处理运算。

机器学习的一个重要问题就是如何处理缺失数据。这个问题没有标准答案,取决于实际应用中的需求。现有一些解决方案,每种方案都各有优缺点。

下一章将介绍与Logistic回归类似的另一种分类算法:支持向量机,它被认为是目前最好的现成的算法之一。

6.7 本章小结

支持向量机是一种分类器。之所以称为“机”是因为它会产生一个二值决策结果,即它是一种决策“机”。支持向量机的泛化错误率较低,也就是说它具有良好的学习能力,且学到的结果具有很好的推广性。这些优点使得支持向量机十分流行,有些人认为它是监督学习中最好的定式算法。

支持向量机试图通过求解一个二次优化问题来最大化分类间隔。在过去,训练支持向量机常采用非常复杂并且低效的二次规划求解方法。John Platt引入了SMO算法,此算法可以通过每次只优化2个alpha值来加快SVM的训练速度。本章首先讨论了一个简化版本所实现的SMO优化过程,接着给出了完整的Platt SMO算法。相对于简化版而言,完整版算法不仅大大地提高了优化的速度,还使其存在一些进一步提高运行速度的空间。有关这方面的工作,一个经常被引用的参考文献就是“Improvements to Platt's SMO Algorithm for SVM Classifier Design”1。

1. S. S. Keerthi, S. K. Shevade, C. Bhattacharyya, and K. R. K. Murthy, “Improvements to Platt's SMO Algorithm for SVM Classifier Design,” Neural Computation 13, no. 3,( 2001), 637–49.

核方法或者说核技巧会将数据(有时是非线性数据)从一个低维空间映射到一个高维空间,可以将一个在低维空间中的非线性问题转换成高维空间下的线性问题来求解。核方法不止在SVM中适用,还可以用于其他算法中。而其中的径向基函数是一个常用的度量两个向量距离的核函数。

支持向量机是一个二类分类器。当用其解决多类问题时,则需要额外的方法对其进行扩展。SVM的效果也对优化参数和所用核函数中的参数敏感。

下一章将通过介绍一个称为boosting的方法来结束我们有关分类的介绍。读者不久就会看到,在boosting和SVM之间存在着许多相似之处。

7.8 本章小结

集成方法通过组合多个分类器的分类结果,获得了比简单的单分类器更好的分类结果。有一些利用不同分类器的集成方法,但是本章只介绍了那些利用同一类分类器的集成方法。

多个分类器组合可能会进一步凸显出单分类器的不足,比如过拟合问题。如果分类器之间差别显著,那么多个分类器组合就可能会缓解这一问题。分类器之间的差别可以是算法本身或者是应用于算法上的数据的不同。

本章介绍的两种集成方法是bagging和boosting。在bagging中,是通过随机抽样的替换方式,得到了与原始数据集规模一样的数据集。而boosting在bagging的思路上更进了一步,它在数据集上顺序应用了多个不同的分类器。另一个成功的集成方法就是随机森林,但是由于随机森林不如AdaBoost流行,所以本书并没有对它进行介绍。

本章介绍了boosting方法中最流行的一个称为AdaBoost的算法。AdaBoost以弱学习器作为基分类器,并且输入数据,使其通过权重向量进行加权。在第一次迭代当中,所有数据都等权重。但是在后续的迭代当中,前次迭代中分错的数据的权重会增大。这种针对错误的调节能力正是AdaBoost的长处。

本章以单层决策树作为弱学习器构建了AdaBoost分类器。实际上,AdaBoost函数可以应用于任意分类器,只要该分类器能够处理加权数据即可。AdaBoost算法十分强大,它能够快速处理其他分类器很难处理的数据集。

非均衡分类问题是指在分类器训练时正例数目和反例数目不相等(相差很大)。该问题在错分正例和反例的代价不同时也存在。本章不仅考察了一种不同分类器的评价方法——ROC曲线,还介绍了正确率和召回率这两种在类别重要性不同时,度量分类器性能的指标。

本章介绍了通过过抽样和欠抽样方法来调节数据集中的正例和反例数目。另外一种可能更好的非均衡问题的处理方法,就是在训练分类器时将错误的代价考虑在内。

到目前为止,我们介绍了一系列强大的分类技术。本章是分类部分的最后一章,接下来我们将进入另一类监督学习算法——回归方法,这也将完善我们对监督方法的学习。回归很像分类,但是和分类输出标称型类别值不同的是,回归方法会预测出一个连续值。

8.7 本章小结

与分类一样,回归也是预测目标值的过程。回归与分类的不同点在于,前者预测连续型变量,而后者预测离散型变量。回归是统计学中最有力的工具之一。在回归方程里,求得特征对应的最佳回归系数的方法是最小化误差的平方和。给定输入矩阵X,如果XTX的逆存在并可以求得的话,回归法都可以直接使用。数据集上计算出的回归方程并不一定意味着它是最佳的,可以使用预测值yHat和原始值y的相关性来度量回归方程的好坏。

当数据的样本数比特征数还少时候,矩阵XTX的逆不能直接计算。即便当样本数比特征数多时,XTX的逆仍有可能无法直接计算,这是因为特征有可能高度相关。这时可以考虑使用岭回归,因为当XTX的逆不能计算时,它仍保证能求得回归参数。

岭回归是缩减法的一种,相当于对回归系数的大小施加了限制。另一种很好的缩减法是lasso。Lasso难以求解,但可以使用计算简便的逐步线性回归方法来求得近似结果。

缩减法还可以看做是对一个模型增加偏差的同时减少方差。偏差方差折中是一个重要的概念,可以帮助我们理解现有模型并做出改进,从而得到更好的模型。

本章介绍的方法很有用。但有些时候数据间的关系可能会更加复杂,如预测值与特征之间是非线性关系,这种情况下使用线性的模型就难以拟合。下一章将介绍几种使用树结构来预测数据的方法。

9.8 本章小结

数据集中经常包含一些复杂的相互关系,使得输入数据和目标变量之间呈现非线性关系。对这些复杂的关系建模,一种可行的方式是使用树来对预测值分段,包括分段常数或分段直线。一般采用树结构来对这种数据建模。相应地,若叶节点使用的模型是分段常数则称为回归树,若叶节点使用的模型是线性回归方程则称为模型树。

CART算法可以用于构建二元树并处理离散型或连续型数据的切分。若使用不同的误差准则,就可以通过CART算法构建模型树和回归树。该算法构建出的树会倾向于对数据过拟合。一棵过拟合的树常常十分复杂,剪枝技术的出现就是为了解决这个问题。两种剪枝方法分别是预剪枝(在树的构建过程中就进行剪枝)和后剪枝(当树构建完毕再进行剪枝),预剪枝更有效但需要用户定义一些参数。

Tkinter是Python的一个GUI工具包。虽然并不是唯一的包,但它最常用。利用Tkinter,我们可以轻松绘制各种部件并灵活安排它们的位置。另外,可以为Tkinter构造一个特殊的部件来显示Matplotlib绘出的图。所以,Matplotlib和Tkinter的集成可以构建出更强大的GUI,用户可以以更自然的方式来探索机器学习算法的奥妙。

本章是回归的最后一章,希望读者没有错过。接下来我们将离开监督学习的岛屿,驶向无监督学习的未知港湾。在回归和分类(监督学习)中,目标变量的值是已知的。在后面的章节将会看到,无监督学习中上述条件将不再成立。下一章的主要内容是k均值聚类算法。

10.5 本章小结

聚类是一种无监督的学习方法。所谓无监督学习是指事先并不知道要寻找的内容,即没有目标变量。聚类将数据点归到多个簇中,其中相似数据点处于同一簇,而不相似数据点处于不同簇中。聚类中可以使用多种不同的方法来计算相似度。

一种广泛使用的聚类算法是k均值算法,其中k是用户指定的要创建的簇的数目。k均值聚类算法以k个随机质心开始。算法会计算每个点到质心的距离。每个点会被分配到距其最近的簇质心,然后紧接着基于新分配到簇的点更新簇质心。以上过程重复数次,直到簇质心不再改变。这个简单的算法非常有效但是也容易受到初始簇质心的影响。为了获得更好的聚类效果,可以使用另一种称为二分k均值的聚类算法。二分k均值算法首先将所有点作为一个簇,然后使用k均值算法(k = 2)对其划分。下一次迭代时,选择有最大误差的簇进行划分。该过程重复直到k个簇创建成功为止。二分k均值的聚类效果要好于k均值算法。

k均值算法以及变形的k均值算法并非仅有的聚类算法,另外称为层次聚类的方法也被广泛使用。下一章将介绍在数据集中查找关联规则的Apriori算法。

11.7 本章小结

关联分析是用于发现大数据集中元素间有趣关系的一个工具集,可以采用两种方式来量化这些有趣的关系。第一种方式是使用频繁项集,它会给出经常在一起出现的元素项。第二种方式是关联规则,每条关联规则意味着元素项之间的“如果⋯⋯那么”关系。

发现元素项间不同的组合是个十分耗时的任务,不可避免需要大量昂贵的计算资源,这就需要一些更智能的方法在合理的时间范围内找到频繁项集。能够实现这一目标的一个方法是Apriori算法,它使用Apriori原理来减少在数据库上进行检查的集合的数目。Apriori原理是说如果一个元素项是不频繁的,那么那些包含该元素的超集也是不频繁的。Apriori算法从单元素项集开始,通过组合满足最小支持度要求的项集来形成更大的集合。支持度用来度量一个集合在原始数据中出现的频率。

关联分析可以用在许多不同物品上。商店中的商品以及网站的访问页面是其中比较常见的例子。关联分析也曾用于查看选举人及法官的投票历史。

每次增加频繁项集的大小,Apriori算法都会重新扫描整个数据集。当数据集很大时,这会显著降低频繁项集发现的速度。下一章会介绍FP-growth算法1,和Apriori算法相比,该算法只需要对数据库进行两次遍历,能够显著加快发现繁项集的速度。

12.6 本章小结

FP-growth算法是一种用于发现数据集中频繁模式的有效方法。FP-growth算法利用Apriori原则,执行更快。Apriori算法产生候选项集,然后扫描数据集来检查它们是否频繁。由于只对数据集扫描两次,因此FP-growth算法执行更快。在FP-growth算法中,数据集存储在一个称为FP树的结构中。FP树构建完成后,可以通过查找元素项的条件基及构建条件FP树来发现频繁项集。该过程不断以更多元素作为条件重复进行,直到FP树只包含一个元素为止。

可以使用FP-growth算法在多种文本文档中查找频繁单词。Twitter网站为开发者提供了大量的API来使用他们的服务。利用Python模块Python-Twitter可以很容易访问Twitter。在Twitter源上对某个话题应用FP-growth算法,可以得到一些有关该话题的摘要信息。频繁项集生成还有其他的一些应用,比如购物交易、医学诊断及大气研究等。

下面几章会介绍一些附属工具。第13章和第14章会介绍一些降维技术,使用这些技术可以提炼数据中的重要信息并且移除噪声。第14章会介绍Map Reduce技术,当数据量超过单台机器的处理能力时,将会需要这些技术。

13.4 本章小结

降维技术使得数据变得更易使用,并且它们往往能够去除数据中的噪声,使得其他机器学习任务更加精确。降维往往作为预处理步骤,在数据应用到其他算法之前清洗数据。有很多技术可以用于数据降维,在这些技术中,独立成分分析、因子分析和主成分分析比较流行,其中又以主成分分析应用最广泛。

PCA可以从数据中识别其主要特征,它是通过沿着数据最大方差方向旋转坐标轴来实现的。选择方差最大的方向作为第一条坐标轴,后续坐标轴则与前面的坐标轴正交。协方差矩阵上的特征值分析可以用一系列的正交坐标轴来获取。

本章中的PCA将所有的数据集都调入了内存,如果无法做到,就需要其他的方法来寻找其特征值。如果使用在线PCA分析的方法,你可以参考一篇优秀的论文”Incremental Eigenanalysis for Classification”1。下一章要讨论的奇异值分解方法也可以用于特征值分析。

14.7 本章小结

SVD是一种强大的降维工具,我们可以利用SVD来逼近矩阵并从中提取重要特征。通过保留矩阵80%~90%的能量,就可以得到重要的特征并去掉噪声。SVD已经运用到了多个应用中,其中一个成功的应用案例就是推荐引擎。

推荐引擎将物品推荐给用户,协同过滤则是一种基于用户喜好或行为数据的推荐的实现方法。协同过滤的核心是相似度计算方法,有很多相似度计算方法都可以用于计算物品或用户之间的相似度。通过在低维空间下计算相似度,SVD提高了推荐系引擎的效果。

在大规模数据集上,SVD的计算和推荐可能是一个很困难的工程问题。通过离线方式来进行SVD分解和相似度计算,是一种减少冗余计算和推荐所需时间的办法。在下一章中,我们将介绍在大数据集上进行机器学习的一些工具。

15.8 本章小结

当运算需求超出了当前资源的运算能力,可以考虑购买更好的机器。另一个情况是,运算需求超出了合理价位下所能购买到的机器的运算能力。其中一个解决办法是将计算转成并行的作业,MapReduce就提供了这种方案的一个具体实施框架。在MapReduce中,作业被分成map阶段和reduce阶段。

一个典型的作业流程是先使用map阶段并行处理数据,之后将这些数据在reduce阶段合并。这种多对一的模式很典型,但不是唯一的流程方式。mapper和reducer之间传输数据的形式是key/value对。一般地,map阶段后数据还会按照key值进行排序。Hadoop是一个流行的可运行MapReduce作业的Java项目,它同时也提供非Java作业的运行支持,叫做Hadoop流。

Amazon网络服务(AWS)允许用户按时长租借计算资源。弹性MapReduce(EMR)是Amazon网络服务上的一个常用工具,可以帮助用户在AWS上运行Hadoop流作业。简单的单步MapReduce任务可以在EMR管理控制台上实现并运行。更复杂的任务则需要额外的工具。其中一个相对新的开源工具是mrjob,使用该工具可以顺序地执行大量的MapReduce作业。经过很少的配置,mrjob就可以自动完成AWS上的各种繁杂步骤。

很多机器学习算法都可以很容易地写成MapReduce作业。而另一些机器学习算法需要经过创新性的修改,才能在MapReduce上运行。SVM是一个强大的文本分类工具,在大量文档上训练一个分类器需要耗费巨大的计算资源,而Pegasos算法可以分布式地训练SVM分类器。像Pegasos算法一样,需要多次MapReduce作业的机器学习算法可以很方便地使用mrjob来实现。

到这里为止,本书的正文部分就结束了,感谢你的阅读。希望这本书能为你开启新的大门。另外,在机器学习的数学和具体实现方面还有很多东西值得探索。我很期待你能使用在本书里学到的工具和技术开发出一些有趣的应用。

来源:我是码农,转载请保留出处和链接!

本文链接:http://www.54manong.com/?id=1179

机器学电子书  

微信号:qq444848023    QQ号:444848023

加入【我是码农】QQ群:864689844(加群验证:我是码农)

<< 上一篇 下一篇 >>

网站分类

标签列表

最近发表

全站首页 | 数据结构 | 区块链| 大数据 | 机器学习 | 物联网和云计算 | 面试笔试

本站资源大部分来自互联网,版权归原作者所有!