描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111651369
内容简介
本书以作者在BuzzFeed的工作经验为基础,将机器学习和计算机工程巧妙地结合在一起。第壹部分的基本原则是数据科学世界坚实的基础;第二部分介绍现实问题中的常用算法,帮助读者迅速解决实际问题,避免被数据误导、产生结论错误;第三部分则着眼于工程实践,基于工程角度突破瓶颈,让算法能够在现实条件中得以实现。
目 录
译者序
序
前言
作者简介
第一部分 框架原则
第1章 数据科学家的定位 2
1.1 引言 2
1.2 数据科学家扮演的角色 2
1.2.1 公司规模 3
1.2.2 团队背景 3
1.2.3 职业晋升和发展 4
1.2.4 重要性 5
1.2.5 工作细分 5
1.3 结论 5
第2章 项目流程 7
2.1 引言 7
2.2 数据团队背景 7
2.2.1 专门岗位与资源池 8
2.2.2 研究分析 8
2.2.3 原型设计 9
2.2.4 集成的工作流 10
2.3 敏捷开发与产品定位 10
2.4 结论 15
第3章 量化误差 16
3.1 引言 16
3.2 量化测量值的误差 16
3.3 抽样误差 18
3.4 误差传递 20
3.5 结论 22
第4章 数据编码与预处理 23
4.1 引言 23
4.2 简单文本预处理 24
4.2.1 分词 24
4.2.2 n元模型 26
4.2.3 稀疏 26
4.2.4 特征选择 27
4.2.5 表示学习 29
4.3 信息量损失 31
4.4 结论 33
第5章 假设检验 34
5.1 引言 34
5.2 什么是假设 34
5.3 假设检验的错误类型 36
5.4 p值和置信区间 37
5.5 多重测试和p值操控 38
5.6 实例 39
5.7 假设检验的设计 40
5.8 结论 41
第6章 数据可视化 43
6.1 引言 43
6.2 数据分布和汇总统计 43
6.2.1 数据分布和直方图 44
6.2.2 散点图和热力图 48
6.2.3 箱线图和误差条 52
6.3 时间序列图 54
6.3.1 移动统计 54
6.3.2 自相关 56
6.4 图可视化 57
6.4.1 布局算法 57
6.4.2 时间复杂度 59
6.5 结论 60
第二部分 算法与架构
第7章 算法和架构简介 62
7.1 引言 62
7.2 架构 64
7.2.1 服务 64
7.2.2 数据源 65
7.2.3 分批及在线计算 66
7.2.4 规模扩展 66
7.3 模型 67
7.3.1 训练 68
7.3.2 预测 68
7.3.3 验证 69
7.4 结论 70
第8章 距离度量 71
8.1 引言 71
8.2 Jaccard距离 71
8.2.1 算法 72
8.2.2 时间复杂度 73
8.2.3 内存注意事项 73
8.2.4 分布式方法 73
8.3 MinHash 74
8.3.1 假设 75
8.3.2 时空复杂度 75
8.3.3 工具 75
8.3.4 分布式方法 75
8.4 余弦相似度 76
8.4.1 复杂度 78
8.4.2 内存注意事项 78
8.4.3 分布式方法 78
8.5 马氏距离 78
8.5.1 复杂度 79
8.5.2 内存注意事项 79
8.5.3 分布式方法 79
8.6 结论 80
第9章 回归 81
9.1 引言 81
9.1.1 选择模型 82
9.1.2 选择目标函数 82
9.1.3 模型拟合 83
9.1.4 模型验证 84
9.2 线性最小二乘 87
9.2.1 假设 88
9.2.2 复杂度 89
9.2.3 内存注意事项 89
9.2.4 工具 89
9.2.5 分布式方法 89
9.2.6 实例 90
9.3 线性回归中的非线性回归 97
9.4 随机森林 100
9.4.1 决策树 100
9.4.2 随机森林 103
9.5 结论 106
第10章 分类和聚类 107
10.1 引言 107
10.2 逻辑回归 108
10.2.1 假设 111
10.2.2 时间复杂度 111
10.2.3 内存注意事项 112
10.2.4 工具 112
10.3 贝叶斯推断与朴素贝叶斯 112
10.3.1 假设 114
10.3.2 复杂度 114
10.3.3 内存注意事项 114
10.3.4 工具 114
10.4 K-Means 115
10.4.1 假设 118
10.4.2 复杂度 118
10.4.3 内存注意事项 118
10.4.4 工具 118
10.5 最大特征值 118
10.5.1 复杂度 120
10.5.2 内存注意事项 120
10.5.3 工具 120
10.6 Louvain贪心算法 120
10.6.1 假设 121
10.6.2 复杂度 121
10.6.3 内存注意事项 121
10.6.4 工具 121
10.7 最近邻算法 121
10.7.1 假设 123
10.7.2 复杂度 123
10.7.3 内存注意事项 123
10.7.4 工具 123
10.8 结论 123
第11章 贝叶斯网络 125
11.1 引言 125
11.2 因果图、条件独立和马尔
可夫 126
11.2.1 因果图和条件独立 126
11.2.2 稳定性和依赖性 127
11.3 d分离和马尔可夫性质 128
11.3.1 马尔可夫和因式
分解 128
11.3.2 d分离 129
11.4 贝叶斯网络的因果图 132
11.5 模型拟合 133
11.6 结论 136
第12章 降维与隐变量模型 137
12.1 引言 137
12.2 先验 137
12.3 因子分析 139
12.4 主成分分析 140
12.4.1 复杂度 142
12.4.2 内存注意事项 142
12.4.3 工具 142
12.5 独立成分分析 142
12.5.1 假设 145
12.5.2 复杂度 145
12.5.3 内存注意事项 146
12.5.4 工具 146
12.6 LDA主题模型 146
12.7 结论 152
第13章 因果推断 153
13.1 引言 153
13.2 实验 154
13.3 观测值:一个实例 157
13.4 非因果阻断控制法 163
13.5 机器学习估计量 167
13.5.1 重新审视G公式 167
13.5.2 实例 168
13.6 结论 172
第14章 高级机器学习 173
14.1 引言 173
14.2 优化 173
14.3 神经网络 175
14.3.1 神经网络层 176
14.3.2 神经网络容量 177
14.3.3 过拟合 179
14.3.4 批拟合 183
14.3.5 损失函数 183
14.4 结论 185
第三部分 瓶颈和优化
第15章 硬件基础 188
15.1 引
序
前言
作者简介
第一部分 框架原则
第1章 数据科学家的定位 2
1.1 引言 2
1.2 数据科学家扮演的角色 2
1.2.1 公司规模 3
1.2.2 团队背景 3
1.2.3 职业晋升和发展 4
1.2.4 重要性 5
1.2.5 工作细分 5
1.3 结论 5
第2章 项目流程 7
2.1 引言 7
2.2 数据团队背景 7
2.2.1 专门岗位与资源池 8
2.2.2 研究分析 8
2.2.3 原型设计 9
2.2.4 集成的工作流 10
2.3 敏捷开发与产品定位 10
2.4 结论 15
第3章 量化误差 16
3.1 引言 16
3.2 量化测量值的误差 16
3.3 抽样误差 18
3.4 误差传递 20
3.5 结论 22
第4章 数据编码与预处理 23
4.1 引言 23
4.2 简单文本预处理 24
4.2.1 分词 24
4.2.2 n元模型 26
4.2.3 稀疏 26
4.2.4 特征选择 27
4.2.5 表示学习 29
4.3 信息量损失 31
4.4 结论 33
第5章 假设检验 34
5.1 引言 34
5.2 什么是假设 34
5.3 假设检验的错误类型 36
5.4 p值和置信区间 37
5.5 多重测试和p值操控 38
5.6 实例 39
5.7 假设检验的设计 40
5.8 结论 41
第6章 数据可视化 43
6.1 引言 43
6.2 数据分布和汇总统计 43
6.2.1 数据分布和直方图 44
6.2.2 散点图和热力图 48
6.2.3 箱线图和误差条 52
6.3 时间序列图 54
6.3.1 移动统计 54
6.3.2 自相关 56
6.4 图可视化 57
6.4.1 布局算法 57
6.4.2 时间复杂度 59
6.5 结论 60
第二部分 算法与架构
第7章 算法和架构简介 62
7.1 引言 62
7.2 架构 64
7.2.1 服务 64
7.2.2 数据源 65
7.2.3 分批及在线计算 66
7.2.4 规模扩展 66
7.3 模型 67
7.3.1 训练 68
7.3.2 预测 68
7.3.3 验证 69
7.4 结论 70
第8章 距离度量 71
8.1 引言 71
8.2 Jaccard距离 71
8.2.1 算法 72
8.2.2 时间复杂度 73
8.2.3 内存注意事项 73
8.2.4 分布式方法 73
8.3 MinHash 74
8.3.1 假设 75
8.3.2 时空复杂度 75
8.3.3 工具 75
8.3.4 分布式方法 75
8.4 余弦相似度 76
8.4.1 复杂度 78
8.4.2 内存注意事项 78
8.4.3 分布式方法 78
8.5 马氏距离 78
8.5.1 复杂度 79
8.5.2 内存注意事项 79
8.5.3 分布式方法 79
8.6 结论 80
第9章 回归 81
9.1 引言 81
9.1.1 选择模型 82
9.1.2 选择目标函数 82
9.1.3 模型拟合 83
9.1.4 模型验证 84
9.2 线性最小二乘 87
9.2.1 假设 88
9.2.2 复杂度 89
9.2.3 内存注意事项 89
9.2.4 工具 89
9.2.5 分布式方法 89
9.2.6 实例 90
9.3 线性回归中的非线性回归 97
9.4 随机森林 100
9.4.1 决策树 100
9.4.2 随机森林 103
9.5 结论 106
第10章 分类和聚类 107
10.1 引言 107
10.2 逻辑回归 108
10.2.1 假设 111
10.2.2 时间复杂度 111
10.2.3 内存注意事项 112
10.2.4 工具 112
10.3 贝叶斯推断与朴素贝叶斯 112
10.3.1 假设 114
10.3.2 复杂度 114
10.3.3 内存注意事项 114
10.3.4 工具 114
10.4 K-Means 115
10.4.1 假设 118
10.4.2 复杂度 118
10.4.3 内存注意事项 118
10.4.4 工具 118
10.5 最大特征值 118
10.5.1 复杂度 120
10.5.2 内存注意事项 120
10.5.3 工具 120
10.6 Louvain贪心算法 120
10.6.1 假设 121
10.6.2 复杂度 121
10.6.3 内存注意事项 121
10.6.4 工具 121
10.7 最近邻算法 121
10.7.1 假设 123
10.7.2 复杂度 123
10.7.3 内存注意事项 123
10.7.4 工具 123
10.8 结论 123
第11章 贝叶斯网络 125
11.1 引言 125
11.2 因果图、条件独立和马尔
可夫 126
11.2.1 因果图和条件独立 126
11.2.2 稳定性和依赖性 127
11.3 d分离和马尔可夫性质 128
11.3.1 马尔可夫和因式
分解 128
11.3.2 d分离 129
11.4 贝叶斯网络的因果图 132
11.5 模型拟合 133
11.6 结论 136
第12章 降维与隐变量模型 137
12.1 引言 137
12.2 先验 137
12.3 因子分析 139
12.4 主成分分析 140
12.4.1 复杂度 142
12.4.2 内存注意事项 142
12.4.3 工具 142
12.5 独立成分分析 142
12.5.1 假设 145
12.5.2 复杂度 145
12.5.3 内存注意事项 146
12.5.4 工具 146
12.6 LDA主题模型 146
12.7 结论 152
第13章 因果推断 153
13.1 引言 153
13.2 实验 154
13.3 观测值:一个实例 157
13.4 非因果阻断控制法 163
13.5 机器学习估计量 167
13.5.1 重新审视G公式 167
13.5.2 实例 168
13.6 结论 172
第14章 高级机器学习 173
14.1 引言 173
14.2 优化 173
14.3 神经网络 175
14.3.1 神经网络层 176
14.3.2 神经网络容量 177
14.3.3 过拟合 179
14.3.4 批拟合 183
14.3.5 损失函数 183
14.4 结论 185
第三部分 瓶颈和优化
第15章 硬件基础 188
15.1 引
前 言
本书大部分内容是Andrew和Adam一起在BuzzFeed工作时写的。Adam是数据科学家,Andrew是工程师,他们在同一个团队中工作了很长时间。最让人感到惊奇和有趣的是,他俩不只是工作伙伴,还是三胞胎中的一对兄弟。
写这本书的想法是2014年8月我们参加了纽约的PyGotham之后产生的。当时有好几场相对广义的关于“数据科学”的讨论,我们发现许多数据科学家的职业生涯始于对事物的好奇心和学习新事物的兴奋感。他们会发现一些新工具,在这之中发展出自己偏爱使用的某种技术或算法,然后将这些工具应用到他们正在处理的问题上。每个人都喜欢用自己最熟悉的方式去解决问题,这种做法很高效。比如使用神经网络(我们将会在第14章中讨论),因为它是一个更为高效的解决工具。我们想通过为数据科学家,尤其是初入职场的新人提供一个完整的工具箱,从而推动数据科学的发展。有人可能会质疑,第一部分的内容和误差分析实际上比第三部分讨论的技术更重要。但实际上第三部分才是我们写这本书的动力。如果数据集中充斥着大量噪声或系统误差,那么算法几乎是不可能成功的。我们希望这本书可以提供一些正确的参考来帮助读者解决在实际项目中遇到的问题,从而帮助他们在职业生涯中取得成功。
机器学习领域、计算机科学领域甚至数据科学领域不乏好书,但我们希望本书可以作为一本比较严谨、全面的数据科学入门书籍。这是一本根据我们自身实践经验写成的轻量级工具书,我们尽可能规避了研究型的问题。假如作为一名初级数据科学家,你正在解决研究型问题,那这可能已经超出了我们关心的范围。
数据科学有一个与机器学习分开的关键部分,那就是工程学。这一点我们会在第三部分着重讨论。我们会讨论你有可能遇到的问题并提供解决它们所需要的基础知识。可以这么说,第三部分基本上可作为计算机科学速成课程(初级课程)参考。因为即使你知道在开发什么,但在落实到生产的路上依然有很多注意事项,这意味着必须要理解这些知识本身,而不仅仅是把它们当作某种工具。
本书受众
在过去几年优秀工程师一直有很大缺口。2008年在一个会议上我们第一次听到了“意外程序员”这个词。它用来描述那些不是科班出身的工程师—他们只是误打误撞到了那个位置并开始做相关工作。十多年后的今天对于开发人员依然有大量需求,并且这种需求开始逐渐扩展到数据科学家这个职位上。谁将充当“意外数据科学家”的角色?通常情况下是开发人员或者是物理或数学专业本科生,虽然他们没有接受过太多数据科学家所需的正规培训,但拥有成功所需的好奇心和雄心,对工具箱有需求。
本书旨在打造一套速成课程,通过从头到尾过一遍数据项目的基本开展步骤来鼓励数据科学家使用手里的数据而非工具,并以此作为起点。由数据本身驱动的数据科学是成功的关键。数据科学最大的公开秘密就是,虽然建模很重要,但数据科学最基础的日常工作依然是数据的查询、聚合和可视化。许多行业仍然处在收集和使用数据的比较原始的阶段,因此快速交付一些复杂度较低的东西是非常有意义的。
建模很重要,但也很难。我们相信敏捷开发的原则是可以应用到数据科学中的,我们将在第2章中讨论这一点。比如我们可以从最小的解决方案开始,有一个基于聚合数据的点子,当数据管道稳定且成熟的时候套用一些模型慢慢延伸它,然后在你手头没有那么多别的重要的事情时慢慢改进模型。我们会提供基于此方法的真实案例。
本书内容
在开头我们提供了一些数据科学领域的基本背景。第一部分的第1章是了解数据行业的引子。
第2章将数据科学置于敏捷开发流程下考虑,这是一种有助于保持小范围有效开发的理念。让自己不去尝试最新的机器学习框架或基于云平台的工具很难,但从长远来看是值得的。
第3章提供了关于误差分析的基本介绍。许多数据科学都在做一些简单的统计报告,如果不理解统计误差,则很有可能会得出无效的结论。误差分析是一项基本技能,并且是一项必备技能。
第4章提供了一些编码现实世界数据的方法。这会让我们提出一些现实世界中被数据驱动的问题。回答这类问题的框架是假设检验,我们会在第5章中说明。
到现在为止我们还没有看到很多图表,所以还缺乏将分析结果与外部(非技术)世界沟通的渠道。我们会在第6章中解决这个问题。我们会把讨论限定在比较小的范围,主要针对那些我们知道如何计算误差的数量图,或者那些使数据可视化产生细微差别的图。虽然这些工具不像d3的交互式可视化图那样酷炫(d3非常值得学习),但它们也是与非技术人员沟通的基础。
在介绍了基本的数据处理方法之后,我们将继续研究更高级的概念,也就是第二部分。我们首先在第7章中简要介绍数据结构,然后在第8章中介绍机器学习的基本概念。到这时候你已经有了一些可以上手的方法来衡量对象的相似性。
从现在开始我们已经可以进行简单的机器学习了。第9章中,我们开始引入回归的概念并从一个最重要的模型线性回归开始。在如今这个神经网络和非线性机器学习时代,从介绍这种简单模型开始确实有些奇怪,但线性回归绝对是一个相当优秀的模型。正如稍后将详述的那样,它是可解释的、稳定的,能提供一个非常好的基
写这本书的想法是2014年8月我们参加了纽约的PyGotham之后产生的。当时有好几场相对广义的关于“数据科学”的讨论,我们发现许多数据科学家的职业生涯始于对事物的好奇心和学习新事物的兴奋感。他们会发现一些新工具,在这之中发展出自己偏爱使用的某种技术或算法,然后将这些工具应用到他们正在处理的问题上。每个人都喜欢用自己最熟悉的方式去解决问题,这种做法很高效。比如使用神经网络(我们将会在第14章中讨论),因为它是一个更为高效的解决工具。我们想通过为数据科学家,尤其是初入职场的新人提供一个完整的工具箱,从而推动数据科学的发展。有人可能会质疑,第一部分的内容和误差分析实际上比第三部分讨论的技术更重要。但实际上第三部分才是我们写这本书的动力。如果数据集中充斥着大量噪声或系统误差,那么算法几乎是不可能成功的。我们希望这本书可以提供一些正确的参考来帮助读者解决在实际项目中遇到的问题,从而帮助他们在职业生涯中取得成功。
机器学习领域、计算机科学领域甚至数据科学领域不乏好书,但我们希望本书可以作为一本比较严谨、全面的数据科学入门书籍。这是一本根据我们自身实践经验写成的轻量级工具书,我们尽可能规避了研究型的问题。假如作为一名初级数据科学家,你正在解决研究型问题,那这可能已经超出了我们关心的范围。
数据科学有一个与机器学习分开的关键部分,那就是工程学。这一点我们会在第三部分着重讨论。我们会讨论你有可能遇到的问题并提供解决它们所需要的基础知识。可以这么说,第三部分基本上可作为计算机科学速成课程(初级课程)参考。因为即使你知道在开发什么,但在落实到生产的路上依然有很多注意事项,这意味着必须要理解这些知识本身,而不仅仅是把它们当作某种工具。
本书受众
在过去几年优秀工程师一直有很大缺口。2008年在一个会议上我们第一次听到了“意外程序员”这个词。它用来描述那些不是科班出身的工程师—他们只是误打误撞到了那个位置并开始做相关工作。十多年后的今天对于开发人员依然有大量需求,并且这种需求开始逐渐扩展到数据科学家这个职位上。谁将充当“意外数据科学家”的角色?通常情况下是开发人员或者是物理或数学专业本科生,虽然他们没有接受过太多数据科学家所需的正规培训,但拥有成功所需的好奇心和雄心,对工具箱有需求。
本书旨在打造一套速成课程,通过从头到尾过一遍数据项目的基本开展步骤来鼓励数据科学家使用手里的数据而非工具,并以此作为起点。由数据本身驱动的数据科学是成功的关键。数据科学最大的公开秘密就是,虽然建模很重要,但数据科学最基础的日常工作依然是数据的查询、聚合和可视化。许多行业仍然处在收集和使用数据的比较原始的阶段,因此快速交付一些复杂度较低的东西是非常有意义的。
建模很重要,但也很难。我们相信敏捷开发的原则是可以应用到数据科学中的,我们将在第2章中讨论这一点。比如我们可以从最小的解决方案开始,有一个基于聚合数据的点子,当数据管道稳定且成熟的时候套用一些模型慢慢延伸它,然后在你手头没有那么多别的重要的事情时慢慢改进模型。我们会提供基于此方法的真实案例。
本书内容
在开头我们提供了一些数据科学领域的基本背景。第一部分的第1章是了解数据行业的引子。
第2章将数据科学置于敏捷开发流程下考虑,这是一种有助于保持小范围有效开发的理念。让自己不去尝试最新的机器学习框架或基于云平台的工具很难,但从长远来看是值得的。
第3章提供了关于误差分析的基本介绍。许多数据科学都在做一些简单的统计报告,如果不理解统计误差,则很有可能会得出无效的结论。误差分析是一项基本技能,并且是一项必备技能。
第4章提供了一些编码现实世界数据的方法。这会让我们提出一些现实世界中被数据驱动的问题。回答这类问题的框架是假设检验,我们会在第5章中说明。
到现在为止我们还没有看到很多图表,所以还缺乏将分析结果与外部(非技术)世界沟通的渠道。我们会在第6章中解决这个问题。我们会把讨论限定在比较小的范围,主要针对那些我们知道如何计算误差的数量图,或者那些使数据可视化产生细微差别的图。虽然这些工具不像d3的交互式可视化图那样酷炫(d3非常值得学习),但它们也是与非技术人员沟通的基础。
在介绍了基本的数据处理方法之后,我们将继续研究更高级的概念,也就是第二部分。我们首先在第7章中简要介绍数据结构,然后在第8章中介绍机器学习的基本概念。到这时候你已经有了一些可以上手的方法来衡量对象的相似性。
从现在开始我们已经可以进行简单的机器学习了。第9章中,我们开始引入回归的概念并从一个最重要的模型线性回归开始。在如今这个神经网络和非线性机器学习时代,从介绍这种简单模型开始确实有些奇怪,但线性回归绝对是一个相当优秀的模型。正如稍后将详述的那样,它是可解释的、稳定的,能提供一个非常好的基
评论
还没有评论。