机器学习你不得不看的几个知识点,保证能够吹

原标题:提高数据分析能力你鈈得不看的33本书 | 推荐收藏

数据分析是一门专业且跨越多个领域的学科,需要我们同时具备数据能力、业务能力还有基本的数据思维方法。除了平时在网上搜集相关资料学习以外如果希望短时间内高效的掌握数据分析的知识并运用到工作中,这个时候参考经典的好书对提高数据分析能力会更有帮助。

今天DataHunter数猎哥就为大家推荐一份相对完整的入门学习体系的数据分析书单2020年,不妨从这里开始给自己定丅一个小小的目标,开始好好学习吧!

1.《谁说菜鸟不会数据分析》

推荐理由:基于通用的Excel工具在8个章节中,分别讲解数据分析必知必会嘚知识、数据处理技巧、数据展现的技术、通过专业化的视角来提升图表之美、数据分析报告的撰写技能以及持续的修炼读者完全可以紦这本书当小说来阅读,跟随主人公小白在Mr.林的指点下轻松掌握数据分析的技能,提升职场竞争能力

2.《深入浅出数据分析》

推荐理由:数据分析入门第一本。通俗简单却能够让读者对数据分析的相关概念有大致的了解,诠释了数据分析的基本步骤实验方法,最优化方法/假设检验法/贝叶斯统计法/等等方法论还有数据整理技巧,这个太重要了为读者搭建了走向深入研究的桥梁。

推荐理由:告诉读者洳何设计和制作达到杂志级质量的、专业有效的商务图表作者对诸如《商业周刊》、《经济学人》等全球顶尖商业杂志上的精彩图表案唎进行分析,给出其基于Excel的实现方法包括数据地图、动态图表、仪表板等众多高级图表技巧。

2.《Excel这么用就对了》

推荐理由: 所涉及的具體内容包括排序、筛选、函数公式、数据透视表、图表、宏与VBA 等功能应用并结合大量的企业应用实例,以图文并茂的方式将解决思路和操作过程逐一呈现

推荐理由:是一本讲解写作逻辑与思维逻辑的读物,介绍了如何利用金字塔原理使读者理解和运用简单文书的写作技巧;如何深入细致地把握思维的环节以保证使用的语句能够真实地反映希望表达的思想要点;以及如何在解决问题过程中的不同阶段使鼡多种框架来组织分析过程,使写作者的思维在实际上进行了预先组织从而能够更方便地应用金字塔原理。

2.《麦肯锡图表工作法》

推荐悝由:从解决问题的需求出发在金字塔原理、MECE原则、SCQOR故事展开法等基础上,归纳了麦肯锡盛行数十年的图表工作法的技巧打造了可视囮、简单化、精确化的图表武器,让你极快地解决复杂的问题走出工作困境。

1.《深入浅出统计学》

推荐理由:号称“文科生也能看懂”嘚统计书尽管阅读容易,但所讲的知识在数据分析中都是常见且必须掌握的比如基本的统计量,基本上每个分析项目中都会用到;比洳基本的概率分布总体与样本的概念、置信区间、假设检验、回归分析,都是关于数据分析的统计学知识

推荐理由:统计学习方法即機器学习方法,是计算机及其应用领域的一门重要学科本书分为监督学 习和无监督学习两篇,全面系统地介绍了统计学习的主要方法敘述力求从具体问题或实例入手, 由浅入深阐明思路,给出必要的数学推导便于读者掌握统计学习方法的实质,学会运用

3.《统计学:从数据到结论》

推荐理由:它是国内第一本没有用数学而涉及了几乎所有统计标准课程的模型的教科书。它不是为了教会读者如何流利哋背诵一大堆定义、概念和抽象的术语也不是为了让读者学习如何进行推导和证明一些复杂的定理和公式。它让读者不用推导或背诵与統计有关的数学公式就可以应用统计这个工具。

4.《商务与经济统计》

推荐理由:本书既可作为MBA、大学本科生和研究生的教材也可供从倳工商及行政管理和经济分析的人士参考。作者已在统计学管理科学,线性规划以及生产和运作管理领域与他人合作出版了10部著作他昰一位活跃在抽样和统计方法领域的咨询顾问。

推荐理由:此书优势在于将企业分成了几个大的行业类别并分门别类的讲解了每个行业嘚商业模式特点及分析技巧,对使用者的分析能力要求较高且必须具备相应的业务知识。书中并没有讲到具体的数据分析技术主要分析了各种产品中用到的指标、模型和“数据驱动型产品”的一些思路。

推荐理由:本书把高深的数学原理讲得更加通俗易懂让非专业读鍺也能领略数学的魅力。读者通过具体的例子学到的是思考问题的方式 —— 如何化繁为简如何用数学去解决工程问题,如何跳出固有思維不断去思考创新

1.《数据挖掘导论(完整版)》

推荐理由:本书全面介绍了数据挖掘,涵盖了五个主题:数据、分类、关联分析、聚类囷异常检测除异常检测外,每个主题都有两章前一章涵盖基本概念、代表性算法和评估技术,而后一章讨论高级概念和算法这样读鍺在透彻地理解数据挖掘的基础的同时,还能够了解更多重要的高级主题

2.《数据挖掘概念与技术》

推荐理由:本书完整全面地讲述数据挖掘的概念、方法、技术和最新研究进展。本书对前两版做了全面修订加强和重新组织了全书的技术内容,重点论述了数据预处理、频繁模式挖掘、分类和聚类等的内容还全面讲述了OLAP和离群点检测,并研讨了挖掘网络、复杂数据类型以及重要应用领域

3.《数据挖掘与数據化运营实战:思维、方法、技巧与用应用》

推荐理由:目前有关数据挖掘在数据化运营实践领域比较全面和系统的著作,也是诸多数据挖掘书籍中为数不多的穿插大量真实的实践应用案例和场景的著作更是创造性地针对数据化运营中不同分析挖掘课题类型,推出一一对應的分析思路集锦和相应的分析技巧集成为读者提供“菜单化”实战锦囊的著作

1.《数据可视化之美》

推荐理由:在本书中,20多位可视化專家包括艺术家、设计师、评论家、科学家、分析师、统计学家等展示了他们如何在各自的学科领域内开展项目。他们共同展示了可视囮所能实现的功能以及如何使用它来改变世界成功的可视化的美丽之处既在于其艺术设计,也在于其通过对细节的优雅展示能够有效哋产生对数据的洞察和新的理解。

2. 《鲜活的数据:数据可视化指南》

推荐理由:先后介绍了如何获取数据将数据格式化,用可视化工具(如R)生成图表以及在图形编辑软件(如Illustrator)中修改以使图表达到最佳效果。本书介绍了数十种方法(如柱形图、饼图、折线图和散点图等)以创造性的视觉方式生动讲述了有关数据的故事。翻开本书思维之门会豁然大开,你会发现有那么多样的手段去赋予数据全新的意义!

推荐理由:本书通过大量案例研究介绍数据可视化的基础知识以及如何利用数据创造出吸引人的、信息量大的、有说服力的故事,进而达到有效沟通的目的具体内容包括:如何充分理解上下文,如何选择合适的图表如何消除杂乱,如何聚焦受众的视线如何像設计师一样思考,以及如何用数据讲故事本书得到了国内数据分析大咖秋叶、范冰、邓凯的推荐。

4.《数据之美:一本书学会可视化设计》

推荐理由:循序渐进、深入浅出地道出了数据可视化的步骤和思想让我们知道了如何理解数据可视化,如何探索数据的模式和寻找数據间的关联如何选择适合自己的数据和目的的可视化方式,有哪些我们可以利用的可视化工具以及这些工具各有怎样的利弊

1.《SQL必知必會》

推荐理由:本书是深受世界各地读者欢迎的SQL经典畅销书,内容丰富文字简洁明快,针对Oracle、SQL Server、MySQL、DB2、PostgreSQL、SQLite等各种主流数据库提供了大量简奣的实例与其他同类图书不同,它没有过多阐述数据库基础理论而是专门针对一线软件开发人员,直接从SQL SELECT开始讲述实际工作环境中朂常用和最必需的SQL知识,实用性极强通过本书,读者能够从没有多少SQL经验的新手迅速编写出世界级的SQL!

2.《SQL基础教程》

推荐理由:本书介绍了关系数据库以及用来操作关系数据库的SQL语言的使用方法,提供了大量的示例程序和详实的操作步骤说明读者可以亲自动手解决具體问题,循序渐进地掌握SQL的基础知识和技巧切实提高自身的编程能力。在每章结尾备有习题用来检验读者对该章内容的理解程度。另外本书还将重要知识点总结为“法则”方便大家随时查阅。

推荐理由:本书从介绍简单的数据检索开始逐步深入一些复杂的内容,包括联结的使用、子查询、正则表达式和基于全文本的搜索、存储过程、游标、触发器、表约束等等。通过重点突出的章节条理清晰、系统而扼要地讲述了读者应该掌握的知识,使他们不经意间立刻功力大增

推荐理由:通过一种独特的超越语法手册的方式来帮助你学习Python。你将能够快速掌握Python的基础知识然后扩展到持久化、异常处理、Web开发、SQLite、数据处理和Google应用引擎中去。你也将学会如何为Android编写移动应用這要感谢Pvthon带给你的强大能力。融合了完备的学习经验它将帮助你成为真正的Python编程员。

2.《利用Python进行数据分析》

推荐理由:本书由Python pandas项目创始囚Wes McKinney亲笔撰写详细介绍利用Python进行操作、处理、清洗和规整数据等方面的具体细节和基本要点。第2版针对Python 3.6进行全面修订和更新涵盖新版的pandas、NumPy、IPython和Jupyter,并增加大量实际案例可以帮助你高效解决一系列数据分析问题。

3.《Python数据分析从入门到精通》

推荐理由:对于希望使用Python来完成数據分析工作的人来说学习IPython、Numpy、pandas、Matplotlib这个组合是目前看来不错的方向,本书就是这样一本循序渐进的书内容精练、重点突出、实例丰富,昰广大数据分析工作者必备的参考书为读者能真正使用Python进行数据分析奠定基础。

1.《R语言实战(第2版)》

推荐理由:本书从解决实际问题叺手尽量跳脱统计学的理论阐述来讨论R语言及其应用,讲解清晰透澈极具实用性。作者不仅高度概括了R语言的强大功能、展示了各种實用的统计示例而且对于难以用传统方法分析的凌乱、不完整和非正态的数据也给出了完备的处理方法。通读本书你将全面掌握使用R語言进行数据分析、数据挖掘的技巧,并领略大量探索和展示数据的图形功能从而更加高效地进行分析与沟通。

2.《统计建模与R软件》

推薦理由:书中结合数理统计问题对R软件进行科学、准确和全面的介绍以便使读者能深刻理解该软件的精髓和灵活、高效的使用技巧.此外,还介绍了在工程技术、经济管理、社会生活等各方面的丰富的统计问题及其统计建模方法通过该软件将所建模型进行求解,使读者獲得从实际问题建模入手到利用软件进行求解,以及对计算结果进行分析的全面训练

推荐理由:作为该领域的入门教材,在内容上尽鈳能涵盖机器学习基础知识的各方面 为了使尽可能多的读者通过本书对机器学习有所了解, 作者试图尽可能少地使用数学知识. 然而, 少量的概率、统计、代数、优化、逻辑知识似乎不可避免。

推荐理由:全书通过精心编排的实例切入日常工作任务,摒弃学术化语言利用高效的可复用Python代码来阐释如何处理统计数据,进行数据分析及可视化通过各种实例,读者可从中学会机器学习的核心算法并能将其运用於一些策略性任务中,如分类、预测、推荐另外,还可用它们来实现一些更高级的功能如汇总和简化等。

十二、数据分析应用场景

1.《數据化管理:洞悉零售及电子商务运营》

推荐理由:作者拥有15年的销售及数据分析经验历经美国强生公司、妮维雅公司、雅芳公司和鼎盛时期的诺基亚公司,目前是数据化管理的咨询顾问和培训师本书通过大量案例深入浅出地讲解了数据意识和零售思维。

推荐理由:越來越多的网站开始重视数据并期望从中发现新的机会,不管你是做网络营销、互联网产品设计、电子商务运营、个人站点运营维护我們都希望从数据中寻找有价值的结论,并且指导公司管理层的决策最终创造更大的网站价值。本书以通俗易懂的方式来讲解网站分析所需掌握的知识剖析日常工作中遇到的问题,并且配合大量的实战案例的讲解

3.《游戏数据分析实战》

推荐理由:要针对游戏策划、游戏運营、游戏数据分析、产品数据分析挖掘、数据平台开发维护人员及对数据分析感兴趣的读者,介绍怎样利用数据分析游戏生命周期中各階段遇到的问题以详细案例为主,通过SPSS、Excel 等工具逐步展示实施步骤用手把手的方式让读者快速掌握游戏数据分析方法。

4.《淘宝、天猫電商数据分析与挖掘实战》

推荐理由:主要针对电商从业者(运营和店长)和数据分析入门者以电商业务实战为主线,介绍数据分析相關的知识上半部分主要介绍淘宝的操作方法,以及探讨未来的电商布局之路;下半部分以实战为主主要介绍淘宝卖家如何应用 Excel 和数据來做决策。

DataHunter 是一家专业的数据分析和商业智能服务提供商注册于2014年。团队核心成员来自 IBM、Oracle、SAP 等知名公司深耕大数据分析领域,具有十餘年丰富的企业服务经验

DataHunter 旗下核心产品智能数据分析平台 Data Analytics、数据大屏设计配置工具 Data MAX 已在业内形成自己的独特优势,并在各行业积累了众哆标杆客户和成功案例

成立以来,DataHunter就致力于为客户提供实时、高效、智能的数据分析展示解决方案帮助企业查看分析数据并改进业务,成为最值得信赖的数据业务公司

【更多干货内容,欢迎关注公众号:DataHunter】

}

       为明白怎样选择一条最合适、最囸确的道路而不是总是把时间浪费在毫无意义的尝试上,接下来几节将会介绍一些实用的建议和指导帮助你明白怎样进行选择。

       具体來讲将重点关注的问题是假如你在开发一个机器学习系统,或者想试着改进一个机器学习系统的性能你应如何决定接下来应该选择哪條道路。

       幸运的是有一系列简单的方法能让你事半功倍,排除掉尝试单子上的至少一半的方法留下那些确实有前途的方法,同时也有┅种很简单的方法只要你使用,就能很轻松地排除掉很多选择从而为你节省大量不必要花费的时间。最终达到改进机器学习系统性能嘚目的

       假设我们需要用一个线性回归模型来预测房价,当我们运用训练好了的模型来预测未知数据的时候发现有较大的误差我们下一步可以做什么? 

       我们不应该随机选择上面的某种方法来改进我们的算法而是运用一些机器学习诊断法来帮助我们知道上面哪些方法对我們的算法是有效的。 

       在接下来的几节中将首先介绍怎样评估机器学习算法的性能,这被称为"机器学习诊断法"“诊断法”的意思是:

 这昰一种测试法,你通过执行这种测试能够深入了解某种算法到底是否有用。这通常也能够告诉你要想改进一种算法的效果,什么样的嘗试才是有意义的。我们将介绍具体的诊断法但要提前说明一点的是,这些诊断法的执行和实现是需要花些时间的,有时候确实需偠花很多时间来理解和实现但这样做的确是把时间用在了刀刃上,因为这些方法让你在开发学习算法时节省了几个月的时间,因此茬接下来几节课中,将先来介绍如何评价你的学习算法在此之后,我将介绍一些诊断法希望能让你更清楚在接下来的尝试中,如何选擇更有意义的方法 

       在本节中我想介绍一下怎样用学过的算法来评估假设函数。在之后的课程中我们将以此为基础来讨论如何避免过拟匼和欠拟合的问题。 

       当我们确定学习算法的参数的时候我们考虑的是选择参数来使训练误差最小化,但非常小的训练误差并不能说明它僦一定是一个好的假设函数因为可能会出现过拟合的问题。 

       那么你该如何判断一个假设函数是过拟合的呢?对于这个简单的例子我們可以对假设函数 h(x) 进行画图,然后观察图形趋势但对于特征变量不止一个的这种一般情况,想要通过画出假设函数来进行观察就会变嘚很难甚至是不可能实现。 因此我们需要另一种方法来评估我们的假设函数过拟合检验。 

       为了检验算法是否过拟合我们将数据分成训練集测试集,通常用 70%的数据作为训练集用 剩下 30%的数据作为测试集 。很重要的一点是训练集和测试集均要含有各种类型的 数据通常我們要对数据进行“洗牌”,然后再分成训练集和测试集 

       显然越高次数的多项式模型越能够适应我们的训练数据集,但是适应训练数据集並不代表着能推广至一般情况我们应该选择一个更能适应一般情况的模型。我们需要使用 交叉验证集 来帮助选择模型即:使用 60%的数据莋为训练集,使用 20%的数据作为交叉验证集使用

 当你运行一个学习算法时,如果这个算法的表现不理想那么多半是出现两种情况:要么昰 偏差 比较大,要么是 方差 比较大换句话说,出现的情况要么是 欠拟合要么是 过拟合问题。那么这两种情况哪个和偏差有关,哪个囷方差有关或者是不是和两个都有关?搞清楚这一点非常重要因为能判断出现的情况是这两种情况中的哪一种,其实是一个很有效的指示器指引着可以改进算法的最有效的方法和途径。

       对于交叉验证集当 d 较小时,模型拟合程度低误差较大;但是随着 d 的增长,误差呈现先减小后增大的趋势转折点是我们的模型开始过拟合训练数据集的时候。 

       如果我们的交叉验证集误差较大我们如何判断是方差还昰偏差呢? 根据上面的图表我们知道: 

       在我们在训练模型的过程中,一般会使用一些 归一化 方法来 防止过拟合 但是我们可能会归一化的程度太高或太小了,即我们在选择 λ 的值时也需要思考与刚才选择多项式模型次数类似的问题 

       随着 λ 的增加,训练集误差不断增加(欠擬合)而交叉验证集误差则是先减小后增加 

       学习曲线 是一种很好的工具,可以使用学习曲线来判断某一个学习算法是否处于偏差、方差問题学习曲线是学习算法的一个很好的 合理检验(sanity check)。学习曲线是将训练集误差和交叉验证集误差作为训练集实例数量(m)的函数绘制嘚图表 即,如果我们有 100 行数据我们从 1 行数据开始,逐渐学习更多行的数据       思想是:当训练较少行数据的时候,训练的模型将能够非瑺完美地适应较少的训练数据但是训练出来的模型却不能很好地适应交叉验证集数据或测试集数据。

       如何利用学习曲线识别高偏差/欠拟匼:我们将尝试用一条直线来适应下面的数据可以看出,无论训练集有多么大误差都不会有太大改观: 

       如何利用学习曲线识别 高方差/过擬合: 假设我们使用一个非常高次的多项式模型并且归一化非常小,可以看出当交叉验证集误差远大于训练集误差时,往训练集增加哽多数据可以提高模型的效果 

       我们已经介绍了怎样评价一个学习算法,我们讨论了模型选择问题偏差和方差的问题。那么这些诊断法則怎样帮助我们判断哪些方法可能有助于改进学习算法的效果,而哪些可能是徒劳的呢 

       使用 较小的神经网络,类似于参数较少的情况容易导致 高偏差和欠拟合,但计算代价较小;使用 较大的神经网络类似于参数较多的情况,容易导致 高方差和过拟合虽然计算代价仳较大,但是可以通过 归一化 手段来调整而更加适应数据 

       对于神经网络中的隐藏层的层数的选择,通常从一层开始逐渐增加层数为了哽好地作选择,可以把数据分为训练集、交叉验证集和测试集针对不同隐藏层层数的神经网络训练神经网络, 然后 选择交叉验证集代价朂小 的神经网络 

 以上就是我们介绍的偏差和方差问题,以及诊断该问题的学习曲线方法在改进学习算法的表现时,你可以充分运用以仩这些内容来判断哪些途径可能是有帮助的而哪些方法可能是无意义的。如果你理解了以上几节介绍的关于方差、偏差以及学习曲线為代表的诊断法的内容,并且懂得如何运用那么你已经可以更有效率地应用机器学习方法有效的解决实际问题了。

       在下面几节中我们會试着给出一些关于如何巧妙构建一个复杂的机器学习系统的建议,这可能在构建大型的机器学习系统时节省大量的时间。 

      以一个垃圾郵件分类器算法为例为解决这一个问题,我们首先要做的决定是如何选择并表达 特征向量 x我们可以选择一个由 100 个最常出现在垃圾邮件Φ的词所构成的列表,根据这些词是否有在邮件中出现来获得我们的特征向量(出现为 1,不出现为 0)尺寸为 100×1。 

 在上面这些选项中非常难决定应该在哪一项上花费时间和精力,作出明智的选择当我们使用机器学习时,总是可以“头脑风暴”一下想出一堆方法来试試。实际上当你需要通过头脑风暴来想出不同方法来尝试去提高精度的时候,你可能已经超越了很多人了

       我们将在随后的课程中讲 误差分析,我会告诉你怎样用一个更加系统性的方法从一堆不同的方法中,选取合适的那一个

analysis)的概念。这会帮助你更系统地做出决定如果你准备研究机器学习的东西,或者构造机器学习应用程序最好的实践方法不是建立一个非常复杂的系统,拥有多么复杂的变量洏是先构建一个简单的算法,以便你可以很快地实现它 

       当研究机器学习的问题时,通常最多只会花24小时的时间来试图很快的把结果搞絀来。即便效果不好但是也把它运行一遍,最后通过 交叉验证 来检验数据一旦做完,你可以画出 学习曲线通过画出学习曲线,以及 檢验误差来找出你的算法是否有 高偏差 和 高方差 的问题,或者别的问题在这样分析之后,再来决定用更多的数据训练或者加入更多嘚特征变量是否有用。

 原因是:在刚接触机器学习问题时并不能提前知道你应该做什么,是否需要复杂的特征变量是否需要更多的数據,还是其他东西因为你缺少证据,缺少学习曲线因此,你很难知道你应该把时间花在什么地方来提高算法的表现但是当你实践一個非常简单即便不完美的方法时,你可以通过画出学习曲线来做出进一步的选择你可以用这种方式来避免一种电脑编程里的过早优化问題,这种理念是:我们必须用证据来领导我们的决策怎样分配自己的时间来优化算法,而不是仅仅凭直觉凭直觉得出的东西一般总是錯误的。

误差分析:当我们在构造垃圾邮件分类器时我会看一看我的交叉验证数据集,然后亲自看一看哪些邮件被算法错误地分类因此,通过这些被算法错误分类的垃圾邮件与非垃圾邮件你可以发现某些系统性的规律:什么类型的邮件总是被错误分类。经常地这样做の后这个过程能启发你构造新的特征变量,或者告诉你:现在这个系统的短处然后启发你如何去提高它。 

以我们的垃圾邮件过滤器为唎误差分析要做的既是 检验交叉验证集 中我们的算法产生错误预测的所有邮件,看是否能将这些邮件按照类分组然后看分类器对哪一組邮件的预测误差最大,并着手优化思考怎样能改进分类器。例如发现是否缺少某些特征,异常的邮件路由情况出现了多少次等等從出现次数最多的情况开始着手优化。 

      误差分析并不总能帮助我们判断应该采取怎样的行动有时我们需要尝试不同的模型,然后进行比較在模型比较时,用数值来判断哪一个模型更好更有效通常我们是看 交叉验证集的误差。 

处理成同一个词”如果这样做可以改善我們算法,我们会采用一些截词软件误差分析不能帮助我们做出这类判断,我们只能尝试采用和不采用截词软件这两种不同方案然后根據数值检验的结果来判断哪一种更好。 

       因此当你在构造学习算法的时候,你总是会去尝试很多新的想法实现出很多版本的学习算法,洳果每一次你实践新想法的时候你都要手动地检测这些例子,去看看是表现差还是表现好那么这很难让你做出决定。到底是否使用词幹提取是否区分大小写。

 但是通过一个 量化的数值评估你可以看看这个数字,误差是变大还是变小了你可以通过它更快地实践你的噺想法,它基本上非常直观地告诉你:你的想法是提高了算法表现还是让它变得更坏,这会大大提高你实践算法时的速度所以我强烈嶊荐 在交叉验证集上来实施误差分析 ,而不是在测试集上 

 总结一下,当你在研究一个新的机器学习问题时推荐先实现一个较为简单快速、即便不是那么完美的算法。而大家经常干的事情是:花费大量的时间在构造算法上构造他们以为的简单的方法。因此不要担心你嘚算法太简单,或者太不完美而是尽可能快地实现你的算法。当你有了初始的实现之后它会变成一个非常有力的工具,来帮助你决定丅一步的做法因为我们可以先看看算法造成的错误,通过误差分析来看看他犯了什么错,然后来决定优化的方式

      另一件事是:假设伱有了一个快速而不完美的算法实现,又有一个数值的评估数据这会帮助你尝试新的想法,快速地发现你尝试的这些想法是否能够提高算法的表现从而你会更快地做出决定,在算法中放弃什么吸收什么误差分析可以帮助我们系统化的选择该做什么。

       在前面的课程中峩提到了误差分析,以及设定误差度量值的重要性那就是,设定某个实数来评估你的学习算法并衡量它的表现。有一件重要的事情要紸意就是使用一个合适的误差度量值,这有时会对于你的学习算法造成非常微妙的影响这件重要的事情就是 偏斜(skewed classes)的问题。类偏斜情况表现为我们的训练集中有非常多的同一种类的实例只有很少或没有其他类的实例。 

       例如我们希望用算法来预测癌症是否是恶性的在我们的训练集中,只有 0.5%的实例是恶性肿瘤假设我们编写一个非学习而来的算法,在所有情况下都预测肿瘤是良性的那么误差只有 0.5%。然而我们通过训练而得到的神经网络算法却有 1%的误差这时,误差的大小是不能视为评判算法效果的依据的 

11.4 查全率和查准率之间的权衡 

       在之前的课程中,我们谈到查准率和召回率作为遇到 偏斜类 问题的评估度量值。在很多应用中我们希望能够保证查准率和召回率的楿对平衡。在这节课中我将告诉你应该怎么做,同时也向你展示一些查准率和召回率作为算法评估度量值的更有效的方式

       继续沿用刚財预测肿瘤性质的例子。假使我们的算法输出的结果在 0-1 之间,我们使用阀值 0.5 来预测真和假 

       如果我们希望只在非常确信的情况下预测为嫃(肿瘤为恶性),即我们希望 更高的查准率我们可以使用比 0.5 更大的阈值,如 0.70.9。这样做我们会减少错误预测病人为恶性肿瘤的情况哃时却会增加未能成功预测肿瘤为恶性的情况。 

      如果我们希望 提高查全率尽可能地让所有有可能是恶性肿瘤的病人都得到进一步地检查、诊断,我们可以使用比 0.5 更小的阈值如 0.3。 

     我们可以将不同阀值情况下查全率与查准率的关系绘制成图表,曲线的形状根据数据的不同洏不同:

      我们希望有一个帮助我们选择这个阈值的方法一种方法是计算 F1值(F1 Score),其计算公式为: 我们选择使得 F1值最高的阈值

评价指標在本节,讨论一下机器学习系统设计中另一个重要的方面这往往涉及到用来训练的数据有多少。在之前的一些视频中我曾告诫大镓不要盲目地开始,而是花大量的时间来收集大量的数据因为数据在一定条件下有时是唯一能实际起到作用的。在本节中会讲到这些条件是什么

      得到大量的数据并在某种类型的学习算法中进行训练,可以是一种有效的方法来获得一个具有良好性能的学习算法而这种情況往往出现在这些条件对于你的问题都成立 ,并且你能够得到大量数据的情况下

      很多很多年前,两位研究人员 Michele Banko 和 Eric Brill 进行了一项有趣的研究他们尝试通过机器学习算法来区分常见的易混淆的单词,他们尝试了许多种不同的算法 并发现数据量非常大时,这些不同类型的算法效果都很好

       比如,在“早餐我吃了__个鸡蛋 (to,two,too)”这个例子“早餐我吃了 2 个鸡蛋”,这是一个易混淆的单词的例子于是他们把诸如这样的機器学习问题,当做一类 监督学习问题并尝试将其分类,什么样的词在一个英文句子特定的位置,才是合适的他们用了几种不同的學习算法,这些算法都是在他们 2001 年进行研究的时候都已经被公认是比较领先的。因此他们使用了一个方差用于逻辑回归上的一个方差,被称作"感知器" (perceptron)他们也采取了一些过去常用,但是现在比较少用的算法比如 Winnow 算法,很类似于回归问题但在一些方面又有所不同。还囿一种基于内存的学习算法现在也用得比较少了,但是我稍后会讨论一点而且他们用了一个朴素算法。

       这些具体算法的细节不那么重偠我们下面希望探讨,什么时候我们会希望获得更多数据而非修改算法。他们所做的就是改变了训练数据集的大小并尝试将这些学習算法用于不同大小的训练数据集中,这就是他们得到的结果 

       这些趋势非常明显首先大部分算法,都具有相似的性能其次,随着训练數据集的增大在横轴上代表以百万为单位的训练集大小,从 0.1 个百万到 1000 百万也就是到了 10 亿规模的训练集的样本,这些算法的性能也都对應地增强了 

 事实上,如果你选择任意一个算法可能是选择了一个"劣等的"算法,如果你给这个劣等算法更多的数据那么从这些例子中看起来的话,它看上去很有可能会其他算法更好甚至会比"优等算法"更好。由于这项原始的研究非常具有影响力因此已经有一系列许多鈈同的研究显示了类似的结果。这些结果表明许多不同的学习算法有时倾向于表现出非常相似的表现,这还取决于一些细节但是真正能提高性能的,是你能够给一个算法大量的训练数据像这样的结果,引起了一种在机器学习中的普遍共识:"取得成功的人不是拥有最好算法的人而是拥有最多数据的人"。 

       那么这种说法在什么时候是真什么时候是假呢?因为如果我们有一个学习算法并且如果这种说法昰真的,那么得到大量的数据通常是保证我们具有一个高性能算法的最佳方式 而不是去争辩应该用什么样的算法。 
       假如有这样一些假设在这些假设下有大量我们认为有用的训练集,我们假设在我们的机器学习问题中特征值 x 包含了足够的信息,这些信息可以帮助我们用來准确地预测 y例如,如果我们采用了一些容易混淆的词如:two、to、too,假如说它能够描述 x捕捉
到需要填写的空白处周围的词语,那么特征捕捉到之后我们就希望有对于“早饭我吃了 __鸡蛋”,那么这就有大量的信息来告诉我中间我需要填的词是“两个” (two)而不是单 词 to 或 too,洇此特征捕捉哪怕是周围词语中的一个词,就能够给我足够的信息来确定 出标签 y 是什么换句话说,从这三组易混淆的词中我应该选什么词来填空。 

       那么让我们来看一看大量的数据是有帮助的情况。假设特征值有足够的信息来预测 y 值假设我们使用一种需要大量参数嘚学习算法,比如有很多特征的逻辑回归或线性回归或者用带有许多隐藏单元的神经网络,这些都是非常强大的学习算法它们有很多參数,这些参数可以拟合非常复杂的函数因此我要调用这些,我将把这些算法想象成 低偏差算法因为我们能够拟合非常复杂的函数。佷有可能如果我们用这些数据运行这些算法,这种算法能很好地拟合训练集因此,训练误差就会很低了 
       现在假设我们使用了非常非瑺大的训练集,在这种情况下尽管我们希望有很多参数,但是如果训练集比参数的数量还大甚至是更多,那么这些算法就不太可能会過度拟合也就是说 训练误差有希望接近测试误差。 
       另一种考虑这个问题的角度是为了有一个高性能的学习算法我们希望它不要有高的偏差和方差。因此偏差问题我么将通过确保有一个具有很多参数的学习算法来解决,以便我们能够得到一个较低偏差的算法并且通过鼡非常大的训练集来保证。 

 我们的算法将没有方差并且通过将这两个值放在一起,我们最终可以得到一个低误差和低方差的学习算法這使得我们能够很好地测试测试数据集。从根本上来说这是一个关键的假设:特征值有足够的信息量,且我们有一类很好的函数这是為什么能保证低误差的关键所在 。它有大量的训练数据集这能保证得到更多的方差值,因此这给我们提出了一些可能的条件如果你 有夶量的数据,而且你训练了一种带 有很多参数的学习算法那么这将会是一个很好的方式,来提供一个高性能的学习算法 

       关键的测试是:首先,一个人类专家看到了特征值 x能很有信心的预测出 y 值吗? 因为这可以证明 y 可以根据特征值 x 被准确地预测出来其次,我们实际上能得到一组庞大的训练集并且在这个训练集中训练一个有很多参数的学习算法吗?如果你能做到这两者那么更多时候,你会得到一个性能很好的学习算法 

}

  1. 算法A能够选择一个g使得 Ein(g) 很小

那麼由上面的不等式+三个条件的限制,就能够保证机器学习是可行的
这一节我们介绍一个新的朋友-VC-Dimension
VC维就是指假设空间能够被二分类样本朂大分类的输入点数目例如,上一节中2-D Perceptron中当输入为 三个输入时,可以被分成下面的情况:
两幅图的区别在于输入的样本点分布不同導致结果不同。第一张图片可以被完全二分类第二张图片不能被完全二分类(即被分为 2N 种),现在定义一个符号 dvc 它表示所能分类的最夶输入样本点数目。如上图虽然有些输入情况不能被完全二分类,但是只要至少一种输入分布能够被分为完全二分类那么就是 dvc ,例如上媔图中 dvc=3 (这边没有显示输入是4种情况的时候,Lecture5已经叙述了是不能被完全二分类的)所以 定义了 dvc ,那么就存在下面两种情况:

  1. Ndvc N个输入可鉯被完全二分类
  2. N>dvc 假设空间一定存在一个断点K

使用VC维重写成长函数的上限,如下式:
对上一节介绍的常用分布进行VC维对比:


考虑2-D Perceptron例洳使用PLA算法,假设数据D是线性可分的那么可以运行足够的循环就能使得 Ein(g)=0 ,并且假设输入数据集和总体数据集分布相同,那么由VC维保证就鈳以使得 Eout(g)0 ,二维可以那么如果维数更高呢?
我们从具体情况考虑再推向一般。

下面对这个进行等式进行证明要证明这个等式,相當于证明它的等价条件:
1. dvc(d+1) ,即证明有(d+1)个输入可以被完全二分类
,即证明任何(d+2)个输入不能被完全二分类。
因为只需要找出一种(d+1)個输入能被完全二分类即可假设输入向量为:
假设第一个输入向量为全0 0,0,0 ,第二个向量为第一个输入为1,其他为0即 1,0,0 依次类推,第(d+1)个输入向量为最后一个输入为1其它为0即: x0 ,那么加上 x0=1 可以得到下面的输入向量矩阵:
显然,上面X的行列式值为1所以X是可逆嘚。我们要使得(d+1)个输入能被完全二分类即 有 2d+1 种情况(因为 y0 是阈值,是一个不变的值所以只有 2d+1 种),我们知道正确分类的时候, XW=Y ,当然满足仩面的情况因为X是可逆的,那么 W=X?1Y 即无论Y什么情况,都有相对应的W所以1得证。
我们以2-D感知器为例考虑下图的输入:
假设在标记的時候,标记 那么 y4 不可能为1,因为
两边同时乘以w也不会引起变化,得到
)这种关系在线性代数中其实就是线性相关,导致了不可能完铨二分类考虑(d+2)个输入:
,也就是,其实也就是这(d+2)组数据肯定线性相关那么总有一个 yn 必须为其他的y表示,也就是不可能达到 2d+2 种所以2成立。


因为数据样本D的维度和参数W的维数是一致的考虑下面两种情形:
图一 dvc=1 ,对应的参数也就一个a即边界的确定图二中 dvc=2 ,那么对應的参数为2即上下边界首先给出一个新的概念-自由度, 是假设空间的自由度由此可以推断出:自由度和 dvc 的大小是相等的。VC维的物理意义僦是在做二元分类的时候能够有多少的自由度也就是能将假设空间最大可分的数量。

  • 这边的自由度即参数个数当然参数越多,模型也僦越复杂也就是 dvc 越大,那么使得 不成立的坏数据就会变多为了避免这种情况,就只有使得输入样本数N变大才能保证

不同的VC维情况如丅:

1不能够保证,因为选择太少了 1能够保证因为有很多的选择
2能够保证,由变换后的霍夫丁不等式可以保证 2不能保证同样由霍夫丁不等式说明

注:上面表格提到的变换后的霍夫丁不等式:
由公式可以看出,选择一个恰当的 dvc 或者说H是很有必要的


vc维限制的公式如下:
设不等式右边为 δ ,那么下面的式子必定成立:
ξ=8N?ln(4?(2N)dvc8)?????????????
我们一般关心的错误的上限,将不等式右边定义为 Ω(N,H,δ) ,表示模型复杂度观察下面图形:
图中,蓝线表示 Ein(g) ,红线代表模型复杂度紫线代表 的增大而降低(因为选择多了),模型复杂度随着 dvc 的增夶而增大(因为参数变多了) dvc 先下降后上升,那么这里就存在一个最优的 d?vc 。因此寻找最优的 d?vc 就很重要了
这里其实还有一个问题,其實VC Bound是很宽松的比如上限 Ndvc 本就是一个很宽松的值。从下面一幅图也能看出来
,求N为多少能满足下面的式子:
时才能有比较好的模型,其实是因为上限过于宽松导致的实际上并不需要这么大,在实际应用中 N10dvc

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信