第1章 关于预测的两类核心算法 1
1.1 为什么这两类算法如此有用 1
1.2 什么是惩罚回归方法 6
1.3 什么是集成方法 8
1.4 算法的选择 9
1.5 构建预测模型的流程 11
1.5.1 构造一个机器学习问题 12
1.5.2 特征提取和特征工程 14
1.5.3 确定训练后模型的性能 15
1.6 各章内容及其依赖关系 15
小结 17
参考文献 17
第2章 通过理解数据来了解问题 19
2.1 “解剖”一个新问题 19
2.1.1 属性和标签的不同类型决定模型的选择 21
2.1.2 新数据集的注意事项 22
2.2 分类问题:用声纳发现未爆炸的水雷 23
2.2.1 “岩石vs.水雷”数据集的物理特性 23
2.2.2 “岩石vs.水雷”数据集统计特征 27
2.2.3 用分位数图展示异常点 30
2.2.4 类别属性的统计特征 32
2.2.5 利用Python Pandas对“岩石vs.水雷”数据集进行统计分析 32
2.3 对“岩石vs.水雷”数据集属性的可视化展示 35
2.3.1 利用平行坐标图进行可视化展示 35
2.3.2 属性和标签的关系可视化 37
2.3.3 用热图(heat map)展示属性和标签的相关性 44
2.3.4 对“岩石vs.水雷”数据集探究过程小结 45
2.4 基于因素变量的实数值预测:鲍鱼的年龄 45
2.4.1 回归问题的平行坐标图:鲍鱼问题的变量关系可视化 51
2.4.2 回归问题如何使用关联热图——鲍鱼问题的属性对关系的可视化 55
2.5 用实数值属性预测实数值目标:评估红酒口感 57
2.6 多类别分类问题:它属于哪种玻璃 63
小结 68
参考文献 69
第3章 预测模型的构建:平衡性能、复杂性以及大数据 71
3.1 基本问题:理解函数逼近 71
3.1.1 使用训练数据 72
3.1.2 评估预测模型的性能 73
3.2 影响算法选择及性能的因素——复杂度以及数据 74
3.2.1 简单问题和复杂问题的对比 74
3.2.2 一个简单模型与复杂模型的对比 77
3.2.3 影响预测算法性能的因素 80
3.2.4 选择一个算法:线性或者非线性 81
3.3 度量预测模型性能 81
3.3.1 不同类型问题的性能评价指标 82
3.3.2 部署模型的性能模拟 92
3.4 模型与数据的均衡 94
3.4.1 通过权衡问题复杂度、模型复杂度以及数据集规模来选择模型 94
3.4.2 使用前向逐步回归来控制过拟合 95
3.4.3 评估并理解你的预测模型 101
3.4.4 通过惩罚回归系数来控制过拟合——岭回归 103
小结 112
参考文献 112
第4章 惩罚线性回归模型 113
4.1 为什么惩罚线性回归方法如此有效 113
4.1.1 足够快速地估计系数 114
4.1.2 变量的重要性信息 114
4.1.3 部署时的预测足够快速 114
4.1.4 性能可靠 114
4.1.5 稀疏解 115
4.1.6 问题本身可能需要线性模型 115
4.1.7 什么时候使用集成方法 115
4.2 惩罚线性回归:对线性回归进行正则化以获得最优性能 115
4.2.1 训练线性模型:最小化错误以及更多 117
4.2.2 向OLS公式中添加一个系数惩罚项 118
4.2.3 其他有用的系数惩罚项:Manbattan以及ElasticNet 118
4.2.4 为什么套索惩罚会导致稀疏的系数向量 119
4.2.5 ElasticNet惩罚项包含套索惩罚项以及岭惩罚项 120
4.3 求解惩罚线性回归问题 121
4.3.1 理解最小角度回归与前向逐步回归的关系 121
4.3.2 LARS如何生成数百个不同复杂度的模型 125
4.3.3 从数百个LARS生成结果中选择最佳模型 127
4.3.4 使用Glmnet:非常快速并且通用 133
4.4 输入为数值型数据的线性回归方法的扩展 140
4.4.1 使用惩罚回归求解分类问题 140
4.4.2 求解超过2种输出的分类问题 145
4.4.3 理解基扩展:使用线性方法来解决非线性问题 145
4.4.4 向线性方法中引入非数值属性 148
小结 152
参考文献 153
第5章 使用惩罚线性方法来构建预测模型 155
5.1 惩罚线性回归的Python包 155
5.2 多变量回归:预测红酒口感 156
5.2.1 构建并测试模型以预测红酒口感 157
5.2.2 部署前在整个数据集上进行训练 162
5.2.3 基扩展:基于原始属性扩展新属性来改进性能 168
5.3 二分类:使用惩罚线性回归来检测未爆炸的水雷 172
构建部署用的岩石水雷分类器 183
5.4 多类别分类-分类犯罪现场的玻璃样本 196
小结 201
参考文献 202
第6章 集成方法 203
6.1 二元决策树 204
6.1.1 如何利用二元决策树进行预测 205
6.1.2 如何训练一个二元决策树 207
6.1.3 决策树的训练等同于分割点的选择 211
6.1.4 二元决策树的过拟合 214
6.1.5 针对分类问题和类别特征所做的修改 218
6.2 自举集成:Bagging算法 219
6.2.1 Bagging算法是如何工作的 219
6.2.2 Bagging算法小结 230
6.3 梯度提升法(Gradient Boosting) 230
6.3.1 梯度提升法的基本原理 230
6.3.2 获取梯度提升法的最佳性能 234
6.3.3 针对多变量问题的梯度提升法 237
6.3.4 梯度提升方法的小结 241
6.4 随机森林 241
6.4.1 随机森林:Bagging加上随机选择的属性子集 246
6.4.2 随机森林的性能 246
6.4.3 随机森林小结 247
小结 248
参考文献 248
第7章 用Python构建集成模型 251
7.1 用Python集成方法工具包解决回归问题 251
7.1.1 构建随机森林模型来预测红酒口感 251
7.1.2 用梯度提升法预测红酒品质 258
7.2 用Bagging来预测红酒口感 266
7.3 Python集成方法引入非数值属性 271
7.3.1 对鲍鱼性别属性编码引入Python随机森林回归方法 271
7.3.2 评估性能以及变量编码的重要性 274
7.3.3 在梯度提升回归方法中引入鲍鱼性别属性 276
7.3.4 梯度提升法的性能评价以及变量编码的重要性 279
7.4 用Python集成方法解决二分类问题 282
7.4.1 用Python随机森林方法探测未爆炸的水雷 282
7.4.2 构建随机森林模型探测未爆炸水雷 283
7.4.3 随机森林分类器的性能 288
7.4.4 用Python梯度提升法探测未爆炸水雷 289
7.4.5 梯度提升法分类器的性能 296
7.5 用Python集成方法解决多类别分类问题 300
7.5.1 用随机森林对玻璃进行分类 300
7.5.2 处理类不均衡问题 304
7.5.3 用梯度提升法对玻璃进行分类 306
7.5.4 评估在梯度提升法中使用随机森林基学习器的好处 311
7.6 算法比较 313
小结 315
参考文献 315