好书丨最想推荐给程序员们看的基于Python3实现的数据科学书

百家 作者:程序人生 2018-05-09 05:12:50

点击上方“程序人生”,选择“置顶公众号”

第一时间关注程序猿(媛)身边的故事


参与文末话题讨论,有机会获赠本书或优惠福利。

和武侠世界里有少林和武当两大门派一样,数据科学领域也有两个不同的学派:以统计分析为基础的统计学派,以及以机器学习为基础的人工智能派。虽然这两个学派的目的都是从数据中挖掘价值,但彼此“都不服气”。注重模型预测效果的人工智能派认为统计学派“固步自封”,研究和使用的模型都只是一些线性模型,太过简单,根本无法处理复杂的现实数据。而注重假设和模型解释的统计学派则认为人工智能派搭建的模型缺乏理论依据、无法解释,很难帮助我们通过模型去理解数据


随着云计算和人工智能的发展,数据科学这门新的综合学科被越来越多的人所熟知,业界也普遍看好其在未来的发展前景。体现在就业市场上,与这个行业相关的数据科学家和数据工程师成为了“21世纪最吸引人的职业”。


就像“一千个人眼里有一千个哈姆雷特”一样,对于什么是数据科学也有很多种不同的解读,并由此衍生出很多相关概念,比如数据驱动(data driven)、大数据(big data)、分布式计算(parallel computing)等。这些概念虽然各有侧重点,但它们都毫无争议地围绕着同一个主题:如何从实际的生活中提取出数据,然后利用计算机的运算能力和模型算法从这些数据中找出一些有价值的内容,为商业决策提供支持。这正是数据科学的核心内涵。


传统的数据分析手段是所谓的商业智能(business intelligence)。这种方法通常将数据按不同的维度交叉分组,并在此基础上,利用统计方法分析每个组别里的信息。比如商业智能中最常见的问题是:“过去3个月,通过搜索引擎进入网站并成功完成注册的新用户里,年龄分布情况如何?若将上面的用户群按年龄段分组,各组中有多大比例的用户在完成注册后,完成了至少一次消费?”


这样的分析是非常有用的,能揭示一些数据的直观信息。但这样的方法如同盲人摸象,只能告诉我们数据在某个局部的情况,而不能给出数据的全貌。而且对于某些问题,这样的结果显得有些不够用。比如用户注册之后完成消费的比例与哪些因素相关?又比如对于某个客户,应该向他推荐什么样的商品?在这些场景下,我们就需要更加精细的数据分析工具—机器学习和统计模型。在我看来,这些内容是数据科学的核心内容,也是我推荐《精通数据科学:从线性回归到深度学习》一书的重点。


 1.1挑战

这样的分析是非常有用的,能揭示一些数据的直观信息。但这样的方法如同盲人摸象,只能告诉我们数据在某个局部的情况,而不能给出数据的全貌。而且对于某些问题,这样的结果显得有些不够用。比如用户注册之后完成消费的比例与哪些因素相关?又比如对于某个客户,应该向他推荐什么样的商品?在这些场景下,我们就需要更加精细的数据分析工具—机器学习和统计模型。在我看来,这些内容是数据科学的核心内容,也是《精通数据科学:从线性回归到深度学习》一书介绍的重点。


在数据科学实践中,我们将使用较为复杂的机器学习或统计模型对数据做精细化的分析和预测。这在工程实现和模型搭建两方面都提出了挑战,如图1-1所示。

工程实现的挑战

数据科学在工程上的挑战可以大致分为3类:特征提取、矩阵运算和分布式机器学习。


(1)一个建模项目的成功在很大程度上依赖于建模前期的特征提取。它包含数据清洗、数据整合、变量归一化等。经过处理后,原本搅作一团的原始数据将被转换为能被模型使用的特征。这些工作需要大量的自动化程序来处理,特别是面对大数据时,因为这些大数据无法靠“人眼”来检查。在一个典型的建模项目中,这部分花费的时间远远大于选择和编写模型算法的时间。


(2)对于一个复杂的数学模型,计算机通常需要使用类似随机梯度下降法的最优化算法来估算它的模型参数。这个过程需要大量的循环,才能使参数到达收敛值附近。因此即使面对的是很小的数据集,复杂的模型也需要很长时间才能得到正确的参数估计。而且模型在结构上越复杂,需要估计的参数也就越多。对这些大量的模型参数同时做更新,在数学上对应着矩阵运算。但传统的CPU架构并不擅长做这样的运算,这导致模型训练需要耗费大量的时间。为了提高模型的训练速度,需要将相应的矩阵运算(模型参数的估算过程)移植到GPU或者特制的计算芯片上,比如TPU。


(3)近年来,随着分布式系统的流行和普及,存储海量数据成为了业界的标配。为了能在这海量的数据上使用复杂模型,需要将原本在一台机器上运行的模型算法改写成能在多台机器上并行运行,这也是分布式机器学习的核心内容。


图1-1


模型搭建的挑战

数据科学对模型搭建的要求也可以总结为3点:模型预测效果好、模型参数是稳定且“正确”的、模型结果容易解释。


(1)模型的预测效果好,这是数据科学成功的关键。而一个模型的预测效果取决于它的假设是否被满足。从数学上来看,任何一个模型除去假设部分,它的其他推导都是严谨的数学演算,是无懈可击的。因此模型假设就像模型的阿喀琉斯之踵,是它唯一的薄弱环节。当问题场景或数据满足模型假设时,模型的效果一定不会差,反之,则预测效果就无法保证了。但在实际生产中,针对一个具体的问题,几乎不可能找到一个模型,它的假设被百分之百地满足。这时就需要避重就轻,通过特征提取等手段,尽量避免违反那些对结果影响很大的假设。这就是为什么说“所有模型都是错的,但是,其中有一些是有用的”。


(2)除了被用来对未知数据做预测外,模型另一个重要的功能就是对已有数据做分析,比如哪个变量对结果的影响最大或者某个变量对结果到底是正向影响还是负向影响等。这些分析结果在很大程度上依赖于模型参数的估计值,后者的准确与否直接决定分析结果的质量。但问题是,模型参数的估计值是不太“可靠”的。例如从训练数据中随机抽取两个不完全一样的数据子集A和B,然后用这两个数据集分别训练同一个模型。得到的参数估计值几乎不可能完全一样。从数学的角度来看,这说明模型参数的估计值其实是一个随机变量,具体的值取决于训练模型时使用的数据。于是我们要求这些估计值是“正确”的:围绕参数真实值上下波动(也就是说它们的期望等于参数真实值)。我们还要求这些估计值是稳定的:波动的幅度不能太大(也就是说它们的方法比较小)。这样就可以把参数估计值的“不可靠性”控制在可接受的范围内。


(3)数据科学家将模型搭建好,并不是一个数据科学项目的终点。为了充分发挥数据的价值,需要将模型结果应用到实际的生产中,比如为手机银行APP架设实时反欺诈系统,或者将利用新搭建的车祸风险模型为汽车保险定价等。参与这个过程的不仅有懂模型的数据科学家,还有更多非技术的业务人员。而后者往往是使用模型的主力,比如根据反欺诈系统的结果,对可疑用户进行人工审核,又或者向客户解释为什么他的车险比别人贵。为了帮助他们更好地理解模型结果,需要将复杂深奥的模型翻译成直观的普通语言。这要求模型是能被解释的,而且是容易被解释的。


在对数据搭建模型时,有两种截然不同的思路,如图1-2所示。


一种是所谓的数据模型(data model),也就是传统的统计模型。这种思路假设数据的产生过程是已知的(或者是可以假设的),可以通过模型去理解整个过程。因此,这类模型通常具有很好的可解释性,分析其稳定性的数学工具也很多,能很好地满足上面提到的后两点。但是在实际生产中,这些模型的预测效果并不好,或者更准确地说,单独使用时,预测效果并不理想。



图1-2

另一种是所谓的算法模型(algorithm model),也就是机器学习。这类模型是人工智能的核心内容,它们假设数据的产生过程是复杂且未知的。建模的目的是尽可能地从结构上“模仿”数据的产生过程,从而达到较好的预测效果。但代价是模型的可解释性很差,而且模型稳定性的分析方法也不多。


正如上面的分析,统计学和机器学习在某些方面具有极好的互补性。因此在实际的生产中,为了将一个数据科学项目做得尽可能完美,我们需要将这两种思路结合起来使用。比如使用机器学习的模型对数据建模,然后借鉴数据模型的分析工具,分析模型的稳定性和给出模型结果的直观解释。


 1.2 机器学习

在讨论机器学习之前,我们先来总结一下人是怎么学习的:在面对一个具体的问题时,人首先会根据已有的经验和当前的信息做出反应行动,然后按照行动获得的反馈去修正自己的经验,并不断重复这个过程。


机器学习就是通过程序让计算机“学会”人的学习过程。换句话说,机器学习是一个计算机程序,这个程序能够根据“经验”自我完善。那么问题来了,既然都是程序,机器学习和传统编程有什么不同呢?

机器学习与传统编程

首先,通过一个假想的例子来体会这两者之间的差异。假设我们需要构建一个能区分老虎和斑马图片的系统,而这个任务被交给了程序员小李和数据科学家小胡。


程序员小李拿到这个任务之后,他首先总结了两条分辨这两种动物的经验:

•  斑马的毛发是黑白相间的,而老虎的毛发有3种颜色:黑色、白色和黄色。

•  斑马的耳朵比较大,而老虎的耳朵比较小。


然后,小李将上面的两条经验总结成规则:如果图中的动物有黄色毛发或者耳朵比较小,那么图中的动物是老虎,反之则为斑马。


最后,他将规则翻译成程序代码交给计算机去执行。


数据科学家小胡的做法则完全不同。他并不去总结区别这两种动物的规则,而是假设毛发颜色和耳朵大小能区别这两者。于是小胡将这个逻辑翻译成学习程序运行在计算机上。与此同时,他还从网络上收集了一大堆老虎和斑马的图片,并将这些图片做好标记,即每张图片对应的动物是什么。然后小胡将数据(图片+标记)输入给之前编写好的学习程序,而后者就可以根据数据不断累积经验和总结规则,这个过程被称为模型训练。经过一段时间的训练后,学习程序最后得到了一个模型(以代码的形式存在)。这个得到的模型和小李自己编写的程序一样,可以用来区分老虎和斑马的图片。


小李和小胡各自的工作流程如图1-3所示。从编程的角度来看,机器学习是一种能自动生成程序的特殊程序。


图1-3


也许上面的例子有点过于抽象了,下面再来看一个简单而具体的例子。假设我们想通过一个成年人的身高(用变量x表示)来预测他的体重(用变量y表示)。这项工作同样被交给了小李和小胡。


小李拿到问题之后,首先上网查阅了成年人身高与体重的相关研究资料。他发现这两者的关系可以用如下的公式表示。


y = 0.9x – 90                         (1-1)


接着他将公式(1-1)转换为程序里面的函数,这个函数的输入参数是身高,输出是预测的体重。


小胡接到任务后,首先假设身高和体重的关系可以用线性回归模型来表示,也就是公式(1-2),其中a和b为未知的模型参数


y = ax + b                           (1-2)


同图片识别中的做法类似,小胡接下来收集了大量的人体身高和体重的数据。他将这些数据输入给模型,而模型将根据得到的数据估计未知参数a,b。估计的原则是使得模型预测值与实际值的差距达到最小。经过计算之后,得到参数的估计值为a ̂  = 0.8,b ̂  = -100。也就是说经过模型训练后,小胡得到了如公式(1-3)所示的程序


y = 0.8x – 100                         (1-3)


图1-4所示是小李和小胡各自提供的解决方案。

图1-4


总结一下,传统的编程方式是人类自己积累经验,并将这些经验转换为规则或数学公式,然后就是用编程语言去表示这些规则和公式。而机器学习可以被看作一种全新的编程方式。在进行机器学习时,人类不需要总结具体的规则或公式,只需制订学习的步骤,然后将大量的数据输入给计算机。后者可以根据数据和人类提供的学习步骤自己总结经验,自动升级。计算机“学习”完成之后会得到一个模型程序,而这个由程序生成的程序可以达到甚至超过人类自身的水平。

监督式学习和非监督式学习

机器学习根据所用的训练数据可以分为两类。一类是监督式学习,这类模型的特点是训练数据里有标注,也就是常说的被预测量y。1.2.1节里讨论的两个例子都是监督式学习。监督式学习按标注的类型又可以细分为两类:分类和回归。如果数据里的标注表示事物的类别,也就是说标注是离散的,那么相应的模型就属于分类,比如1.2.1节里动物图片识别的例子。如果标注表示具体的数量,也就是说标注的是连续的,那么相应的模型就属于回归,比如1.2.1节里通过身高预测体重的例子。


另一类是非监督式学习,这类模型所用的训练数据里并没有标注,只有自变量x。非监督式学习根据用途又可以分为两类:聚类和降维。把“距离”相近的点归于一类叫作聚类,而将高维空间里的数据映射到低维度空间叫作降维,具体内容见图1-5。

1-5


 1.3 统计模型

从上面的例子中可以看到,机器学习非常依赖所用的训练数据。但是数据就百分之百可靠吗?下面就来看两个数据“说谎”的例子。


如图1-6所示,我们将某APP每月的用户注册数表示在图中。图1-6a给人的直观印象是每月的安装数是大致差不多的,没有明显的增长。而图1-6b给人不同的印象,从3月份开始,用户注册数大幅度增长。但其实两幅图的数据是一模一样的,给人不同的感觉是因为图1-6a中纵轴的起点是0,而且使用了对数尺度;而图1-6b的纵轴是从17 000开始的,而且使用的是线性尺度。


      (a                        b

1-6

读者可能会觉得上面这个例子太过简单了,只需要使用一些简单的统计指标,比如平均值或每个月的增长率,就可以避免错误的结论。那么下面来看一个复杂一点的例子。


当得到如图1-7所示的两组数据时,我们应该如何用模型去描述数据的变化规律呢?


•  对于图1-7a,数据的图形有点像抛物线,因此选择二次多项式拟合是一个比较合理的选择。于是假设模型的形式为y = (x - a)(x - b)。然后使用数据去估计模型中的未知参数a,b。得到的结果还不错,模型的预测值与真实值的差异并不大。

    (a                     b

1-7

•  对于图1-7b,数据之间有明显的线性关系,所以使用线性回归对其建模,即y = ax + b。与上面类似,得到的模型结果也不错。


根据上面的分析结果,可以得出如下的结论,图1-7a中的x与y之间是二次函数关系,而图1-7b的x与y之间是线性关系。但其实两幅图中的变量y都是与x无关的随机变量,只是因为观察窗口较小,收集的数据样本太少,让我们误以为它们之间存在某种关系。如果增大观察窗口,收集更多的数据,则可以得到完全不同的结论。如图1-8所示,如果将收集的样本数从20增加到200,会发现图1-8a中的数据图形更像是一个向下开口的抛物线,这与图1-7a中的结论完全相反。而图1-8b中也不再是向下的直线,而与开口向上的抛物线更加相似。

   (a                  b

1-8

上面的例子就是所谓的模型幻觉:表面上找到了数据变动的规律,但其实只是由随机扰动引起的数字巧合。因此在对搭建模型时,必须时刻保持警惕,不然很容易掉进数据的“陷阱”里,被数据给骗了,而这正是统计学的研究重点。这门学科会“小心翼翼”地处理它的各种模型,以确保模型能摆脱数据中随机因素的干扰,得到稳定且正确的结论,正好弥补机器学习在这方面的不足。


 1.4 关于《精通数据科学:从线性回归到深度学习》


数据科学涉及计算机编程和数学建模这两个方面。它们之间的交集并不多,所强调的技能也有很大区别。这体现在实际生产中就是懂模型的人不懂编程,懂编程的人不懂模型,两者兼备的人才非常稀缺。本书的第一个目的就是将这两者的鸿沟弥补起来,注重模型假设和数学推导的同时,强调如何用代码实现模型。

  从模型之间的联系和区别出发,分析各个模型的优缺点。帮助非数学专业的读者更加深入地理解模型的假设和适用范围,而不只是停留在会使用开源模型库的API。

•  通过大量实际案例和代码展示,帮助非计算机专业的读者能独立上机实践模型算法,而不只停留在模型的理论研究。


对于数据科学中的模型搭建,统计学和机器学习是其最重要的组成部分。这两门学科的侧重点并不相同,在很多方面它们是彼此很好的补充。在面对一个实际问题时,若能将两者的方法相结合,能更好地挖掘数据的内在规律,从而更大程度地发挥数据的价值。这是本书的第二个目的。

•  将机器学习和统计结合起来,并借鉴统计学在经济领域的应用,为机器学习的算法提供一个生动而又不失精确的解释。同时用丰富的图片将这些解释直观地表现出来,帮助专业人员将模型和算法解释给非专业的业务人员,推动模型的落地和应用。

•  借鉴计量经济学的方法,深入探讨模型应用中常常被人们(特别是机器学习专业人员)忽略的问题,如模型是否稳定、模型结果是否可靠等,帮助读者反思建模过程中是否有考虑不周到的地方,以至于模型得到错误的结论。


当前,数据科学有两个最热门的前沿领域:分布式机器学习和深度学习。本书有专门的章节讨论它们,展示这两个领域想要解决的问题和目前最好(或最流行)的解决方案。这是本书的第三个目的:从宏观的角度向读者展示什么是数据科学,想要解决的问题、主要的方法以及未来的发展方向。


本书并不试图成为机器学习或统计学的参考文。在之后的章节里,有关模型的数学推导都只是简略讲解,并不做详细证明(本文也不会为了迎合行文简便,一味地回避这些难点)。本书讨论的重点是数据科学的整个工作流程(Pipeline):不止是搭建模型、用数据去训练模型,而是如何对数据进行预处理,初步分析数据、搭建并评估模型以及根据结果分析模型的缺点进而改进模型。


本文摘自《精通数据科学:从线性回归到深度学习》

《精通数据科学:从线性回归到深度学习》

唐亘  


数据科学入门到实战,介绍数据科学常用的工具——Python、数学基础及模型,讨论数据科学的前沿领域——大数据和人工智能,包括机器学习领域经典的模型、分布式机器学习、神经网络和深度学习等。 

·在数据学科的角度,融合了数学、计算机科学、计量经济学的精髓

·为读者阐释了数据科学所要解决的核心问题—数据模型、算法模型的理论内涵和适用范围 

·以常用的IT工具—Python 3为基础,教会读者如何建模以及通过算法实现数据模型,具有很强的实操性。 

·本书还为读者详解了分布式机器学习、神经网络、深度学习等大数据和人工智能的前沿技术。


作者简介:唐亘,数据科学家,专注于机器学习和大数据。曾获得复旦大学的数学和计算机双学士学位;巴黎综合理工的金融硕士学位;法国国立统计与经济管理学校的数据科学硕士学位。热爱并积极参与是Apache Spark和Scikit-Learn等开源项目。作为讲师和技术顾问,为多家机构(包括惠普、华为、复旦大学等)提供百余场技术培训。此前的工作和研究集中于经济和量化金融,曾参与经济合作与发展组织(OECD)的研究项目并发表论文,并担任英国最大在线出版社Packt的技术审稿人。  


 本书目录

(滑动手机查看)

第1章  数据科学概述 1

1.1 挑战 2

1.1.1  工程实现的挑战 2

1.1.2  模型搭建的挑战 3

1.2 机器学习 5

1.2.1  机器学习与传统编程 5

1.2.2  监督式学习和非监督式学习 8

1.3 统计模型 8

1.4 关于本书 10

第2章  Python安装指南与简介:告别空谈 12

2.1 Python简介 13

2.1.1  什么是Python 15

2.1.2  Python在数据科学中的地位 16

2.1.3  不可能绕过的第三方库 17

2.2 Python安装 17

2.2.1  Windows下的安装 18

2.2.2  Mac下的安装 21

2.2.3  Linux下的安装 24

2.3 Python上手实践 26

2.3.1  Python shell 26

2.3.2  第一个Python程序:Word Count 28

2.3.3  Python编程基础 30

2.3.4  Python的工程结构 34

2.4 本章小结 35

第3章  数学基础:恼人但又不可或缺的知识 36

3.1 矩阵和向量空间 37

3.1.1  标量、向量与矩阵 37

3.1.2  特殊矩阵 39

3.1.3  矩阵运算 39

3.1.4  代码实现 42

3.1.5  向量空间 44

3.2 概率:量化随机 46

3.2.1  定义概率:事件和概率空间 47

3.2.2  条件概率:信息的价值 48

3.2.3  随机变量:两种不同的随机 50

3.2.4  正态分布:殊途同归 52

3.2.5  P-value:自信的猜测 53

3.3 微积分 55

3.3.1  导数和积分:位置、速度 55

3.3.2  极限:变化的终点 57

3.3.3  复合函数:链式法则 58

3.3.4  多元函数:偏导数 59

3.3.5  极值与最值:最优选择 59

3.4 本章小结 61

第4章  线性回归:模型之母 62

4.1 一个简单的例子 64

4.1.1  从机器学习的角度看这个问题 66

4.1.2  从统计学的角度看这个问题 69

4.2 上手实践:模型实现 73

4.2.1  机器学习代码实现 74

4.2.2  统计方法代码实现 77

4.3 模型陷阱 82

4.3.1  过度拟合:模型越复杂越好吗 84

4.3.2  模型幻觉之统计学方案:假设检验 87

4.3.3  模型幻觉之机器学习方案:惩罚项 89

4.3.4  比较两种方案 92

4.4 模型持久化 92

4.4.1  模型的生命周期 93

4.4.2  保存模型 93

4.5 本章小结 96

第5章  逻辑回归:隐藏因子 97

5.1 二元分类问题:是与否 98

5.1.1  线性回归:为何失效 98

5.1.2  窗口效应:看不见的才是关键 100

5.1.3  逻辑分布:胜者生存 102

5.1.4  参数估计之似然函数:统计学角度 104

5.1.5  参数估计之损失函数:机器学习角度 104

5.1.6  参数估计之最终预测:从概率到选择 106

5.1.7  空间变换:非线性到线性 106

5.2 上手实践:模型实现 108

5.2.1  初步分析数据:直观印象 108

5.2.2  搭建模型 113

5.2.3  理解模型结果 116

5.3 评估模型效果:孰优孰劣 118

5.3.1  查准率与查全率 119

5.3.2  ROC曲线与AUC 123

5.4 多元分类问题:超越是与否 127

5.4.1  多元逻辑回归:逻辑分布的威力 128

5.4.2  One-vs.-all:从二元到多元 129

5.4.3  模型实现 130

5.5 非均衡数据集 132

5.5.1  准确度悖论 132

5.5.2  一个例子 133

5.5.3  解决方法 135

5.6 本章小结 136

第6章  工程实现:计算机是怎么算的 138

6.1 算法思路:模拟滚动 139

6.2 数值求解:梯度下降法 141

6.3 上手实践:代码实现 142

6.3.1  TensorFlow基础 143

6.3.2  定义模型 148

6.3.3  梯度下降 149

6.3.4  分析运行细节 150

6.4 更优化的算法:随机梯度下降法 153

6.4.1  算法细节 153

6.4.2  代码实现 154

6.4.3  两种算法比较 156

6.5 本章小结 158

第7章  计量经济学的启示:他山之石 159

7.1 定量与定性:变量的数学运算合理吗 161

7.2 定性变量的处理 162

7.2.1  虚拟变量 162

7.2.2  上手实践:代码实现 164

7.2.3  从定性变量到定量变量 168

7.3 定量变量的处理 170

7.3.1  定量变量转换为定性变量 171

7.3.2  上手实践:代码实现 171

7.3.3  基于卡方检验的方法 173

7.4 显著性 175

7.5 多重共线性:多变量的烦恼 176

7.5.1  多重共线性效应 176

7.5.2  检测多重共线性 180

7.5.3  解决方法 185

7.5.4  虚拟变量陷阱 188

7.6 内生性:变化来自何处 191

7.6.1  来源 192

7.6.2  内生性效应 193

7.6.3  工具变量 195

7.6.4  逻辑回归的内生性 198

7.6.5  模型的联结 200

7.7 本章小结 201

第8章  监督式学习: 目标明确 202

8.1 支持向量学习机 203

8.1.1  直观例子 204

8.1.2  用数学理解直观 205

8.1.3  从几何直观到最优化问题 207

8.1.4  损失项 209

8.1.5  损失函数与惩罚项 210

8.1.6  Hard margin 与soft margin比较 211

8.1.7  支持向量学习机与逻辑回归:隐藏的假设 213

8.2 核函数 216

8.2.1  空间变换:从非线性到线性 216

8.2.2  拉格朗日对偶 218

8.2.3  支持向量 220

8.2.4  核函数的定义:优化运算 221

8.2.5  常用的核函数 222

8.2.6  Scale variant 225

8.3 决策树 227

8.3.1  决策规则 227

8.3.2  评判标准 229

8.3.3  代码实现 231

8.3.4  决策树预测算法以及模型的联结 231

8.3.5  剪枝 235

8.4 树的集成 238

8.4.1  随机森林 238

8.4.2  Random forest embedding 239

8.4.3  GBTs之梯度提升 241

8.4.4  GBTs之算法细节 242

8.5 本章小结 244

第9章  生成式模型:量化信息的价值 246

9.1 贝叶斯框架 248

9.1.1  蒙提霍尔问题 248

9.1.2  条件概率 249

9.1.3  先验概率与后验概率 251

9.1.4  参数估计与预测公式 251

9.1.5  贝叶斯学派与频率学派 252

9.2 朴素贝叶斯 254

9.2.1  特征提取:文字到数字 254

9.2.2  伯努利模型 256

9.2.3  多项式模型 258

9.2.4  TF-IDF 259

9.2.5  文本分类的代码实现 260

9.2.6  模型的联结 265

9.3 判别分析 266

9.3.1  线性判别分析 267

9.3.2  线性判别分析与逻辑回归比较 269

9.3.3  数据降维 270

9.3.4  代码实现 273

9.3.5  二次判别分析 275

9.4 隐马尔可夫模型 276

9.4.1  一个简单的例子 276

9.4.2  马尔可夫链 278

9.4.3  模型架构 279

9.4.4  中文分词:监督式学习 280

9.4.5  中文分词之代码实现 282

9.4.6  股票市场:非监督式学习 284

9.4.7  股票市场之代码实现 286

9.5 本章小结 289

第10章  非监督式学习:聚类与降维 290

10.1 K-means 292

10.1.1  模型原理 292

10.1.2  收敛过程 293

10.1.3  如何选择聚类个数 295

10.1.4  应用示例 297

10.2 其他聚类模型 298

10.2.1  混合高斯之模型原理 299

10.2.2  混合高斯之模型实现 300

10.2.3  谱聚类之聚类结果 303

10.2.4  谱聚类之模型原理 304

10.2.5  谱聚类之图片分割 307

10.3 Pipeline 308

10.4 主成分分析 309

10.4.1  模型原理 310

10.4.2  模型实现 312

10.4.3  核函数 313

10.4.4  Kernel PCA的数学原理 315

10.4.5  应用示例 316

10.5 奇异值分解 317

10.5.1  定义 317

10.5.2  截断奇异值分解 317

10.5.3  潜在语义分析 318

10.5.4  大型推荐系统 320

10.6 本章小结 323

第11章  分布式机器学习:集体力量 325

11.1 Spark简介 327

11.1.1  Spark安装 328

11.1.2  从MapReduce到Spark 333

11.1.3  运行Spark 335

11.1.4  Spark DataFrame 336

11.1.5  Spark的运行架构 339

11.2 最优化问题的分布式解法 341

11.2.1  分布式机器学习的原理 341

11.2.2  一个简单的例子 342

11.3 大数据模型的两个维度 344

11.3.1  数据量维度 344

11.3.2  模型数量维度 346

11.4 开源工具的另一面 348

11.4.1  一个简单的例子 349

11.4.2  开源工具的阿喀琉斯之踵 351

11.5 本章小结 351

第12章  神经网络:模拟人的大脑 353

12.1 神经元 355

12.1.1  神经元模型 355

12.1.2  Sigmoid神经元与二元逻辑回归 356

12.1.3  Softmax函数与多元逻辑回归 358

12.2 神经网络 360

12.2.1  图形表示 360

12.2.2  数学基础 361

12.2.3  分类例子 363

12.2.4  代码实现 365

12.2.5  模型的联结 369

12.3 反向传播算法 370

12.3.1  随机梯度下降法回顾 370

12.3.2  数学推导 371

12.3.3  算法步骤 373

12.4 提高神经网络的学习效率 373

12.4.1  学习的原理 373

12.4.2  激活函数的改进 375

12.4.3  参数初始化 378

12.4.4  不稳定的梯度 380

12.5 本章小结 381

第13章  深度学习:继续探索 383

13.1 利用神经网络识别数字 384

13.1.1  搭建模型 384

13.1.2  防止过拟合之惩罚项 386

13.1.3  防止过拟合之dropout 387

13.1.4  代码实现 389

13.2 卷积神经网络 394

13.2.1  模型结构之卷积层 395

13.2.2  模型结构之池化层 397

13.2.3  模型结构之完整结构 399

13.2.4  代码实现 400

13.2.5  结构真的那么重要吗 405

13.3 其他深度学习模型 406

13.3.1  递归神经网络 406

13.3.2  长短期记忆 407

13.3.3  非监督式学习 409

13.4 本章小结 411


今日互动

有一种说法,数据分析的工作终将会被机器所替代,你认同吗?为什么?在本文下方留言说说。


我们会从留言用户中,按照留言点赞排名,抽取排名在第3、10和第15名的3位幸运者,送出本期荐书1本。


开奖时间:5月10日上午开奖(以当天小编开奖时看到的名次顺序为准)

若未被抽中,扫码或点击文末「阅读原文」,可享程序人生专属购书 五折 福利!


限时特惠时间:5月9日~10日全天

原价:99.00

程序人生专享价:49.50

这里还有个Python日常问题群友互助交流群,了解一下?

(注:之前进过程序人生Python群的可以不用进该群)


若扫码无法进群时,可加编辑微信,备注#Python#,待编辑核实后,拉你入群。

程序 微信ID:druidlost

小七 微信ID:duoshangshuang

关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接
百度热搜榜
排名 热点 搜索指数