据26
2.3总结27
第3章监督学习的第一步28
3.1理解监督学习28
3.1.1了解OpenCV中的监督学习29
3.1.2使用评分函数评估模型性能30
3.2使用分类模型预测类别35
3.2.1理解k-NN算法37
3.2.2使用OpenCV实现k-NN37
3.3使用回归模型预测连续结果43
3.3.1理解线性回归43
3.3.2使用线性回归预测波士顿房价44
3.3.3应用Lasso回归和ridge回归48
3.4使用逻辑回归对鸢尾花种类进行分类48
3.5总结53
第4数据表示与特征工程54
4.1理解特征工程54
4.2数据预处理55
4.2.1特征标准化56
4.2.2特征归一化57
4.2.3特征缩放到一定的范围57
4.2.4特征二值化58
4.2.5缺失数据处理58
4.3理解降维59
4.3.1在OpenCV中实现主成分分析61
4.3.2实现独立成分分析64
4.3.3实现非负矩阵分解65
4.4类别变量表示66
4.5文本特征表示68
4.6图像表示69
4.6.1使用色彩空间69
4.6.2图像角点检测71
4.6.3使用尺度不变特征变换72
4.6.4使用加速健壮特征74
4.7总结75
第5章使用决策树进行医疗诊断76
5.1理解决策树76
5.1.1构建第一个决策树79
5.1.2可视化训练得到的决策树85
5.1.3深入了解决策树的内部工作机制87
5.1.4特征重要性评分88
5.1.5理解决策规则89
5.1.6控制决策树的复杂度90
5.2使用决策树进行乳腺癌的诊断90
5.2.1载入数据集91
5.2.2构建决策树92
5.3使用决策树进行回归96
5.4总结99
第6章使用支持向量机检测行人100
6.1理解线性支持向量机100
6.1.1学习最优决策边界101
6.1.2实现我们的第一个支持向量机102
6.2处理非线性决策边界107
6.2.1理解核机制108
6.2.2认识我们的核109
6.2.3实现非线性支持向量机109
6.3自然环境下的行人检测110
6.3.1获取数据集111
6.3.2初窥方向梯度直方图113
6.3.3生成负样本114
6.3.4实现支持向量机116
6.3.5模型自举116
6.3.6在更大的图像中检测行人118
6.3.7进一步优化模型120
6.4总结121
第7章使用贝叶斯学习实现垃圾邮件过滤122
7.1理解贝叶斯推断122
7.1.1概率论的短暂之旅123
7.1.2理解贝叶斯定理124
7.1.3理解朴素贝叶斯分类器126
7.2实现第一个贝叶斯分类器127
7.2.1创建一个练习数据集127
7.2.2使用一个正态贝叶斯分类器对数据分类128
7.2.3使用一个朴素贝叶斯分类器对数据分类131
7.2.4条件概率的可视化132
7.3使用朴素贝叶斯分类器对邮件分类134
7.3.1载入数据集134
7.3.2使用Pandas构建数据矩阵136
7.3.3数据预处理137
7.3.4训练正态贝叶斯分类器138
7.3.5使用完整的数据集进行训练139
7.3.6使用n-gram提升结果139
7.3.7使用TD-IDF提升结果140
7.4总结141
第8章使用非监督学习发现隐藏结构142
8.1理解非监督学习142
8.2理解k均值聚类143
8.3理解期望最大化145
8.3.1实现期望最大化解决方案146
8.3.2了解期望最大化的局限148
8.4使用k均值压缩色彩空间154
8.4.1真彩色调色板的可视化154
8.4.2使用k均值减少调色板157
8.5使用k均值对手写数字分类159
8.5.1载入数据集159
8.5.2运行k均值159
8.6把聚类组织成层次树161
8.6.1理解层次聚类161
8.6.2实现凝聚层次聚类162
8.7总结163
第9章使用深度学习对手写数字分类164
9.1理解McCulloch-Pitts神经元164
9.2理解感知器167
9.3实现第一个感知器169
9.3.1生成练习数据集170
9.3.2使用数据拟合感知器171
9.3.3评估感知器分类器171
9.3.4把感知器应用到线性不可分的数据上173
9.4理解多层感知器174
9.4.1理解梯度下降175
9.4.2使用反向传播训练多层感知器178
9.4.3在OpenCV中实现多层感知器179
9.5了解深度学习183
9.6手写数字分类186
9.6.1载入MNIST数据集187
9.6.2MNIST数据集预处理188
9.6.3使用OpenCV训练一个MLP189
9.6.4使用Keras训练一个深度神经网络190
9.7总结192
第10章组合不同算法为一个整体193
10.1理解集成方法193
10.1.1理解平均集成195
10.1.2理解提升集成197
10.1.3理解堆叠集成200
10.2组合决策树为随机森林200
10.2.1理解决策树的不足200
10.2.2实现第一个随机森林204
10.2.3使用scikit-learn实现一个随机森林205
10.2.4实现极端随机树206
10.3使用随机森林进行人脸识别208
10.3.1载入数据集208
10.3.2预处理数据集209
10.3.3训练和测试随机森林210
10.4实现AdaBoost212
10.4.1使用OpenCV实现AdaBoost212
10.4.2使用scikit-learn实现AdaBoost213
10.5组合不同模型为一个投票分类器214
10.5.1理解不同的投票机制214
10.5.2实现一个投票分类器215
10.6总结217
第11章通过超参数调优选择合适的模型218
11.1评估一个模型218
11.1.1评估模型错误的方法219
11.1.2评估模型正确的方法220
11.1.3选择最好的模型221
11.2理解交叉验证223
11.2.1使用OpenCV手动实现交叉验证225
11.2.2使用scikit-learn进行k折交叉验证226
11.2.3实现留一法交叉验证227
11.3使用自举评估鲁棒性228
11.4评估结果的重要性230
11.4.1实现T检验230
11.4.2实现配对卡方检验232
11.5使用网格搜索进行超参数调优233
11.5.1实现一个简单的网格搜索234
11.5.2理解验证集的价值235
11.5.3网格搜索结合交叉验证236
11.5.4网格搜索结合嵌套交叉验证238
11.6使用不同评估指标来对模型评分239
11.6.1选择正确的分类指标239
11.6.2选择正确的回归指标240
11.7链接算法形成一个管道240
11.7.1用scikit-learn实现管道241
11.7.2在网格搜索中使用管道242
11.8总结243
第12章综合244
12.1着手处理一个机器学习问题244
12.2构建自己的估计器245
12.2.1使用C++编写自己的基于OpenCV的分类器245
12.2.2使用Python编写自己的基于scikit-learn的分类器247
12.3今后的方向249
12.4总结251