机器学习系统设计 (图灵程序设计丛书)-[美]Willi Richert & Luis Pedro Coelho
在线阅读 百度网盘下载(4nzi)
书名:机器学习系统设计 (图灵程序设计丛书)
作者:[美]Willi Richert & Luis Pedro Coelho
格式:EPUB, HTMLZ, PDF
书号:9787115356826
路径:点击打开
出版:人民邮电出版社
排序作者:Richert, Willi & Coelho, Luis Pedro
排序书名:机器学习系统设计 (图灵程序设计丛书)
日期:09 12月 2018
uuid:23e2c847-5d77-4a60-badb-666d3d7a1a14
id:517
出版日期:7月 2014
修改日期:09 12月 2018
大小:7.38MB
语言:中文
如果你手里(或者你的电子阅读器里)有这本书,可以说,这是一个幸运的巧合。毕竟,每年有几百万册图书印刷出来,供数百万读者阅读,而你恰好选择了这一本。可以说,正是机器学习算法引领你来阅读这本书(或者说是把这本书引领到你面前)。而我们作为本书的作者,很高兴看到你愿意了解更多的“怎么做”和“为什么”。
本书大部分内容都将涉及“怎么做”。例如,怎么处理数据才能让机器学习算法最大限度地利用它们?怎么选择正确的算法来解决手头的问题?
我们偶尔也会涉及“为什么”。例如,为什么正确评估很重要?为什么在特定情形下一个算法比另一个算法的效果更好?
我们知道,要成为该领域的专家还有很多知识要学。毕竟,本书只介绍了一些“怎么做”和极小一部分“为什么”。但在最后,我们希望这些内容可以帮你“启航”,然后快速前行。
恭喜你!你刚刚学到了两件重要的事情。其中最重要的是,你要明白,作为一名典型的机器学习践行者,你会在理解和提炼数据上花费大部分精力——这正是我们在第一个微小的机器学习示例中所做的。我们希望这个例子可以帮你把精力从算法转移到数据上来。在这之后,我们还一起了解了一下正确设置实验的重要性,其中至关重要的是,不要把训练数据和测试数据混在一起。
诚然,使用多项式拟合并不是机器学习领域最酷的事情。这个例子只是为了让你明白,不要让一些“闪闪发光”的算法分散你的注意力。这里包含上面总结的最重要的两点。
所以,让我们开始学习第2章的内容。我们将深入探究Scikit-learn这个令人惊奇的机器学习工具箱,并概述不同类型的学习算法,同时向你展示特征工程的美妙之处。
从某种意义上说,这是很理论化的一章,因为我们用简单示例介绍了很多一般性概念。让我们重温一下在一个经典数据集上的处理过程。到现在为止,这只是一个规模很小的问题。然而,它的优点在于能让我们把它画出来,看到我们具体在做什么。当我们换一个维度高、样本多的问题时,这一优点就不见了。但我们在这里获得的直观认识依然是有效的。
分类意味着对样本进行归纳,从而构建出一个模型(这是一个能够自动对新的、未分类的数据进行分类的规则)。这是机器学习的一个基础工具,我们在后面的几章中将会看到更多的示例。
我们还学习到,对于模型效果,训练误差是一个有误导性的、过于乐观的估计。相反,我们必须使用未用于训练的测试数据来评估效果。为了在测试中不浪费过多的样本,交叉验证计划可以帮我们兼得两者的优势(以更多的计算作为代价)。
我们还探究了一下特征工程问题。特征并不是天生就为你预备的,但选择和设计特征却是设计机器学习流程的一个组成部分。事实上,这通常是一个能够获得最大正确率提升的地方,这是因为更好的特征数据往往可以击败更漂亮的方法。在计算机视觉和基于文本分类等章中,我们将看到具体问题的相应示例。
在本章中,我们编写了自己的代码(当然,使用NumPy的时候除外)。在后面几章中将不会这样,但我们仍然需要用简单示例建立一个直觉印象,来阐明这些基本概念。
下一章,我们来看当数据中没有预设的类别信息时应当如何处理。
从聚类上的预处理,到把有噪文本转化为有意义的简洁向量表示的解决方案,这是一个艰难的过程。回头看一下我们为最终能够聚类所做的工作,它占了整个任务的一半还多。但是在这个过程中,我们学习到了很多关于文本处理的知识,以及简单词频统计在有噪声的真实数据上可以带你走得很远的原因。
由于Scikit有极其强大的程序包,这个过程已经相当平缓。不过仍有很多东西可以探索。本章中我们只抓住了它的表面功能。在下一章里我们将会看到它更大的威力。
主题模型最初是在文本处理中开发出来的,可以说是简单易懂。但在第10章中,我们将会看到这些技术还可以用于图像。在绝大多数现代计算机视觉研究中,主题模型都是非常重要的。事实上,与前面几章不同,本章非常接近于机器学习算法研究的最前沿。原始的LDA算法是2003年在一个学术期刊上发表出来的。gensim所使用的对维基百科进行处理的方法,是在2010年开发出来的。而HDP算法始于2011年。这个领域的研究一直在进行,你可以发现它有很多变种,以及有着美妙名字的模型,例如印度自助餐过程(Indian buffet process,注意不要跟中国餐馆过程——Chinese restaurant process——混淆,它们是不同的模型),或者弹球盘分配(Pachinko allocation;弹球盘是一款日本游戏,它是老虎机和弹球的杂合)。当前,这些工作尚处于研究阶段。几年之后,它们才可能用于解决实际问题。
现在,我们已经重温了一些主流机器学习模型,例如分类、聚类和主题模型。在下一章中,我们将会回到分类问题,探索一些高级算法和方法。
我们做成了!针对一个十分嘈杂的数据集,构建了一个分类器,然后达到我们的部分目标。当然,我们需要实事求是,把初始的目标调整到可以达成的地方。但是在这个过程中,我们了解到了最邻近和逻辑回归算法的强项和弱点。我们学到了如何提取特征,例如LinkCount、NumTextTokens、NumCodeLines、AvgSentLen、AvgWordLen、NumAllCaps、NumExclams和NumImages,以及如何分析它们对分类器性能的影响。
但更有价值的是,我们掌握了一个调试效果较差分类器的好方法。这在未来将帮助我们更快地构建有效的系统。
在深入了解最邻近和逻辑回归算法之后,在下一章里我们将会进一步学习另一个简单而强大的分类算法:朴素贝叶斯。在这个过程中,我们还会学到如何使用Scikit-learn里一些更便捷的工具。
恭喜你,和我们一起坚持到了最后!我们了解了朴素贝叶斯是如何工作的,以及它为何并不是那么朴素。针对没有足够数据去学习类别概率空间中所有位置的训练集合,朴素贝叶斯的泛化能力非常出色。我们知道了如何把它应用到推文上,而且它对清洗粗糙的推文文本很有帮助。最后,在体验了SentiWordNet之后,我们发现“作一点弊”也是可以的(在进行了不少工作之后),特别是当它能对分类器的效果有额外提升的时候。
本章,我们从一个古老技巧(普通最小二乘法)开始介绍;这种方法有时表现得依然很好。然而,我们还看到了更多能够避免过拟合的现代方法,它们可以带来更好的结果。我们使用了岭回归、Lasso法和弹性网,它们都是最前沿的回归方法。
我们再一次看到依赖训练误差估计泛化能力的危险:这是一个过于乐观的估计,模型的训练误差可以为0,但我们知道这样的模型可能毫无用处。在深入思考这些问题之后,我们被引导至双层交叉验证。它很重要,该领域里还有很多东西没有完全内部化。在这期间,我们依赖scikit-learn的支持,实现了所有期望的操作,包括一种实现正确交叉验证的简单方式。
在本章的最后,我们开始转换方向,了解了一下推荐问题。现在,我们是通过一些已知的工具解决这个问题的:惩罚式回归。在下一章里,对于这个问题,我们将会看到新式的、更好的工具。它们将进一步提升效果。
这种推荐方式也有一个缺点,那就是要求用户对物品必须给出一个数字形式的评分。但在实际生活中,只有部分用户会给出评分。其实,还有另外一类比较容易获得的信息可以利用:哪些物品被一起购买。在下一章里,我们将会看到如何在一个框架中应用这一信息,这个框架叫做购物篮分析(basket analysis)。
本章开始于改进前一章中的评分预测。我们看到了一些不同的方式,然后通过学习一组权重把它们组合到一起,得到一个单独的预测。这种技术叫做集成学习或栈式学习。它是一个在很多情况下都可以使用的通用技术,并不只是在回归问题里起作用。这种方式允许你把不同的想法融合到一起,即使它们的内部机制完全不同;你可以把它们的最终输出组合起来。
在8.2节,我们改弦更张,转向另一种推荐方法:购物篮分析或关联规则挖掘。在这个模式下,我们尝试(基于概率)发掘形如“购买了X的客户可能对Y也感兴趣”这样的关联规则。这种方式充分利用了交易信息本身的数据,而不需要让用户对商品用数字打分数。scikit-learn里没有这种方法,所以我们用自己的代码实现了一个。
使用关联规则挖掘需要谨慎,不能简单为每个用户推荐热销商品。(否则,个性化在哪里?)要达到这个目标,我们学习了如何利用规则提升度来衡量规则的价值。在下一章,我们将构建一个音乐体裁分类器。
在本章里,构建音乐体裁分类器的时候,我们已经从舒适区域走了出来。在刚开始并没有深入理解音乐理论的情况下,我们用FFT训练分类器来预测歌曲体裁,却没有获得一个合格的正确率。但之后我们用MFC特征构建出的分类器,就显示出了真正可用的效果。
在这两种情况下,我们只知道如何把这些特征放入分类器以及放在哪里。结果一个失败了,而另一个成功了。它们之间的差异在于,在第二种情况下,我们所依赖的是由这个领域的专家所构建的特征。
这是完全可以的。如果我们主要是对结果感兴趣,那么有时可以简单采取这种捷径——不过必须确保这些捷径来自于特定领域的专家。由于已经学过如何正确评估多分类问题的性能,因此我们对于采用这种捷径是有信心的。
下一章介绍如何把学到的技术应用到特定类型的数据上。我们将学习如何使用mahotas计算机视觉包里的传统图像处理函数,以便对图像进行预处理。
我们学习了在机器学习范畴下,通过把几百万像素归约到一些维度上,用基于特征的经典方法来处理图像的内容。我们在其他章中学过的所有技术,都可以直接用于图像问题。这包括分类(当输入是图像的时候,这通常又叫做模式识别)、聚类或维度归约(甚至主题模型也可以用于图像,经常可以得到很有趣的结果)。
我们还学习了如何在一个词袋模型中使用局部特征进行分类。这是一个在计算机视觉中非常前沿的方法,可以得到很好的效果。在很多与图像分类无关的方面,它都具有健壮性,例如不同明暗程度的图像,以及同一个图像内不均匀的光照情况等。我们还把聚类当做分类的一个有用的中间步骤,而不是把它本身当做结果。
我们重点关注了mahotas,它是基于Python的一个主流计算机视觉库。同时,还有一些其他的库也同样被很好地维护着。Skimage(Scikit-image)在原理上相似,但拥有不同的特征集合。OpenCV是一个非常优秀的C++库,提供Python接口。所有这些都可以和NumPy数组协同工作,并可以混合搭配来自于不同库的函数,以构建复杂系统。
在下一章,你将会接触另一种形式的机器学习:维度归约。正如我们在之前几章里所看到的,包括在本章里使用图像的时候,生成很多特征是非常容易的。但是,为了速度、可视化或效果提升,我们通常希望减少特征的个数。在下一章,我们将了解如何做到这一点。
在这一章中,我们知道有时可以用特征选择法删减特征。我们还看到,在一些情况下仅仅删减特征还不够,还要使用特征抽取法揭示数据里的真实低维结构,使模型更容易处理。
我们只是浅显探讨了现有的大量降维方法。我们仍然希望你可以对这个领域感兴趣,还有很多其他方法等你去发现。最后,特征选择和抽取更像是一门艺术,就跟选择正确学习方法或训练模型一样。
下一章将涉及Jug的使用,Jug是一个利用多核或多主机进行计算的小型Python框架。另外,我们还会介绍AWS——亚马逊云。我们看到了如何使用Jug——一个小型Python框架——来管理那些利用了多核或多主机的计算。尽管这个框架是通用的,但它是特地为解决其作者(也是本书作者之一)的数据分析需求而构建的。因此,它有一些方面很适合Python机器学习环境。
我们还学习了AWS——亚马逊云。使用云计算通常会比构建内部计算环境能更有效地利用资源。如果需求不是固定的而是变化的,那更是如此。starcluster甚至允许集群在你开启更多作业的时候自动扩展,在它们终止的时候收缩。
这是本书的结尾,我们已经走了很长一段路。我们了解到当有标注数据的时候如何进行分类,以及当没有的时候如何进行聚类。我们学习了关于降维和主题模型的知识,它们对大规模数据集是有意义的。在本书的最后几章,我们看了一些具体应用,例如音乐体裁分类和计算机视觉。对于实现,我们主要依赖于Python。这个语言拥有一个建立在NumPy之上的,不断增长的数值计算程序包扩展生态系统。在任何可能的时候,我们都会使用Scikit-learn,但也会在必要的时候使用其他程序包。基于它们都使用相同基础数据结构的事实,我们可以无缝混合来自于不同包的功能。所有在本书里使用的程序包都是开源的,可以用于任何项目。
自然,我们无法涵盖机器学习的所有话题。所以,在附录里,我们提供了一系列精选资源,帮助读者学习更多机器学习方面的知识。
来源:我是码农,转载请保留出处和链接!
本文链接:http://www.54manong.com/?id=1180