内容简介
本书讲述机器学习的基本原理,使用MATLAB实现涉及的各种机器学习算法。通过理论学习和实践操作,使读者了解并掌握机器学习的原理和技能,拉近理论与实践的距离。全书共分12章,主要内容包括:机器学习介绍、线性回归、逻辑回归、贝叶斯分类器、模型评估与选择、K-均值和EM算法、决策树、神经网络、HMM、支持向量机、推荐系统、主成分分析。全书源码全部在MATLAB R2015b上调试通过,每章都附有习题和习题参考答案,供读者参考。
全书系统讲解了机器学习的原理、算法和应用,内容全面、实例丰富、可操作性强,做到理论与实践相结合。本书适合机器学习爱好者作为入门和提高的技术参考书使用,也适合用作计算机专业高年级本科生和研究生的教材或教学参考书。
前言
机器学习无疑是当今最炙手可热的领域,机器学习工程师、数据科学家和大数据工程师逐渐成为最为热门的新兴职业,各行各业的公司都在寻求具备这些技能的人才。技术职位的爆炸式增长吸引了很多在校大学生、社会IT人员将机器学习职位纳入自己的职业规划中。由于具备机器学习相关技能才更有可能在上述新兴职业中获得成功,因此一本容易上手的入门书籍肯定会对初学者有着莫大的帮助,本书就是为初学者精心编写的。
初学者学习机器学习课程一般会面临两大障碍:第一大障碍是数学基础,机器学习要求学习者具备数学基础,书籍中大量的公式是初学者最大的噩梦,尤其是对于已经离开大学走向工作岗位的爱好者,要从头开始去学习和理解数据分布及模型背后的数学原理需要花费很长的时间和精力,学习周期非常漫长;第二大障碍是编程实践,并不是所有人都擅长编代码,学习者只有自己亲手用代码实现机器学习的各种算法,亲眼见到算法解决了实际问题,才能更深入地理解算法。除非想做高精尖的前沿研究,理论研究和公式推导并非是大多数人的专长,如果只是想更合理地应用机器学习来解决实际问题,必需的数学知识就可以降低到大多数人都可以理解的程度,使用MATLAB编程实现机器学习算法也比使用C++或Java等语言容易得多。
本书就是为了让初学者顺利入门而设计的。首先,本书只讲述机器学习常用算法的基本原理,并不追求各种算法大而全但简略的罗列,学习并深入理解这些精挑细选的算法后,能够了解基本的机器学习算法,使用适合的算法来解决实际问题。其次,本书使用MATLAB R2015b实现了常用的机器学习算法,读者能亲眼看见算法的工作过程和结果,加深对抽象公式和算法的理解,逐步掌握机器学习的原理和技能,拉近理论与实践的距离。再次,每章都附有习题和习题参考答案,其中,一部分习题是为了理解正文内容而设置的,另一部分习题是为了降低正文中的数学要求,将一些必要但枯燥的公式推导放在习题中,供读者有选择性地学习。最后,本书专门设有读者QQ群,群号为278724996,欢迎读者加群,下载书中源代码,与作者直接对话探讨书中技术问题。
本书共分12章。第1章介绍机器学习的基本概念、MATLAB的数据格式和示例数据集;第2章介绍线性回归,主要内容包括线性回归的模型定义及模型假设和评估、最小二乘法、梯度下降、多变量线性回归、随机梯度下降、正规方程、多项式回归和正则化;第3章介绍逻辑回归,主要内容包括逻辑回归的假设函数、决策边界、梯度下降算法、MATLAB优化函数、多项式逻辑回归、多元分类、Softmax回归;第4章介绍贝叶斯分类器,主要内容包括判别模型和生成模型的概念、极大似然估计、高斯判别分析、朴素贝叶斯和文本分类;第5章介绍模型评估与选择,主要内容包括训练集验证集测试集划分、交叉验证、性能度量,以及偏差与方差折中;第6章介绍K-均值和EM算法,主要内容包括聚类分析的基本概念、K-means算法应用、EM算法,以及混合高斯模型;第7章介绍决策树,主要内容包括决策树的基本概念、ID3算法、C4.5算法,以及CART算法的原理与实现;第8章介绍神经网络,主要内容包括神经元、神经网络结构、反向传播算法原理与实现;第9章介绍隐马尔科夫模型,主要内容包括HMM的基本概念、HMM的组成和序列生成、求解HMM三个基本问题的算法,以及MATLAB代码实现;第10章介绍支持向量机,主要内容包括支持向量机的基本概念、最大间隔超平面、对偶算法、非线性支持向量机、软间隔支持向量机、SMO算法和LibSVM库的使用;第11章介绍推荐系统,主要内容包括推荐系统的基本概念、基于用户的协同过滤算法、基于物品的协同过滤算法和基于内容的协同过滤算法;第12章介绍主成分分析,主要内容包括主成分分析的基本概念、本征值分解和奇异值分解、PCA算法的计算步骤、如何从压缩表示中重建、如何选取主成分的数量以及PCA实现。
本书的编写异常艰难,从选题到付梓花费约两年时间。和大多数人一样,笔者的脑袋也是单任务处理系统,不善于同时处理多个任务,因此经常迷失在算法、代码、习题、绘图和文字的沼泽中不能自拔,多亏朋友和家人的支持才能坚持到最后。尽管在写作中付出很多艰辛的劳动,限于笔者的学识、能力和精力,书中难免会存在一些缺陷,甚至错误,敬请各位读者批评指正。感谢提供宝贵建议的贡献者,昆明理工大学计算机系吴霖老师经常与笔者讨论机器学习问题,并为本书的内容选取提出了很多建设性建议,感谢吴霖老师的贡献。另外,还要感谢昆明理工大学提供的宽松的研究环境。感谢清华大学出版社的编辑老师在出版方面提出的建设性意见和给予的无私帮助。感谢购买本书的朋友,欢迎批评指正,你们的批评建议都会受到重视,并在将来再版中改进。
袁梅宇
于昆明理工大学
目录
第1章 机器学习介绍 11.1 机器学习简介 21.1.1 什么是机器学习 21.1.2 机器学习与日常生活 31.1.3 如何学习机器学习 41.1.4 MATLAB优势 51.2 基本概念 51.2.1 机器学习的种类 61.2.2 有监督学习 61.2.3 无监督学习 71.2.4 机器学习术语 71.2.5 预处理 91.3 MATLAB数据格式 101.3.1 标称数据 101.3.2 序数数据 111.3.3 分类数据 111.4 示例数据集 121.4.1 天气问题 121.4.2 鸢尾花 151.4.3 其他数据集 161.5 了解你的数据 16习题 20第2章 线性回归 212.1 从一个实际例子说起 222.1.1 模型定义 232.1.2 模型假设 232.1.3 模型评估 242.2 最小二乘法 242.2.1 最小二乘法求解参数 252.2.2 用最小二乘法来拟合奥运会数据 262.2.3 预测比赛结果 272.3 梯度下降 272.3.1 基本思路 282.3.2 梯度下降算法 292.3.3 梯度下降求解线性回归问题 302.4 多变量线性回归 322.4.1 多变量线性回归问题 332.4.2 多变量梯度下降 342.4.3 随机梯度下降 382.4.4 正规方程 402.5 多项式回归 422.5.1 多项式回归算法 422.5.2 正则化 45习题 47第3章 逻辑回归 493.1 逻辑回归介绍 503.1.1 线性回归用于分类 503.1.2 假设函数 513.1.3 决策边界 523.2 逻辑回归算法 533.2.1 代价函数 533.2.2 梯度下降算法 543.2.3 MATLAB优化函数 563.2.4 多项式逻辑回归 583.3 多元分类 603.3.1 一对多 603.3.2 一对一 623.3.3 Softmax回归 64习题 66第4章 贝叶斯分类器 674.1 简介 684.1.1 概述 684.1.2 判别模型和生成模型 684.1.3 极大似然估计 694.2 高斯判别分析 724.2.1 多元高斯分布 724.2.2 高斯判别模型 734.3 朴素贝叶斯 754.3.1 朴素贝叶斯算法 764.3.2 文本分类 81习题 86第5章 模型评估与选择 875.1 简介 885.1.1 训练误差与泛化误差 885.1.2 偏差和方差 895.2 评估方法 905.2.1 训练集、验证集和测试集的划分 915.2.2 交叉验证 925.3 性能度量 955.3.1 常用性能度量 955.3.2 查准率和查全率 965.3.3 ROC和AUC 985.4 偏差与方差折中 1005.4.1 偏差与方差诊断 1015.4.2 正则化与偏差方差 1025.4.3 学习曲线 103习题 104第6章 K-均值算法和EM算法 1076.1 聚类分析 1086.1.1 K-means算法描述 1086.1.2 K-means算法应用 1126.1.3 注意事项 1136.2 EM算法 1146.2.1 基本EM算法 1146.2.2 EM算法的一般形式 1156.2.3 混合高斯模型 118习题 123第7章 决策树 1257.1 决策树介绍 1267.2 ID3算法 1277.2.1 信息熵 1277.2.2 信息增益计算示例 1277.2.3 ID3算法描述 1327.2.4 ID3算法实现 1347.3 C4.5算法 1347.3.1 基本概念 1357.3.2 剪枝处理 1397.3.3 C4.5算法描述 1407.3.4 C4.5算法实现 1427.4 CART算法 1447.4.1 CART算法介绍 1447.4.2 CART算法描述 1477.4.3 CART算法实现 149习题 150第8章 神经网络 1518.1 神经网络介绍 1528.1.1 从一个实例说起 1528.1.2 神经元 1538.1.3 神经网络结构 1548.1.4 简化的神经网络模型 1578.1.5 细节说明 1608.2 神经网络学习 1618.2.1 代价函数 1618.2.2 BP算法 1628.2.3 BP算法实现 1668.2.4 平方代价函数的情形 171习题 171第9章 隐马尔科夫模型 1739.1 隐马尔科夫模型基本概念 1749.1.1 离散马尔科夫过程 1749.1.2 扩展至隐马尔科夫模型 1769.1.3 HMM的组成和序列生成 1799.1.4 三个基本问题 1819.2 求解HMM三个基本问题 1829.2.1 评估问题 1839.2.2 解码问题 1879.2.3 学习问题 190习题 196第10章 支持向量机 19710.1 支持向量机介绍 19810.2 最大间隔超平面 19810.2.1 SVM问题的形式化描述 19910.2.2 函数间隔和几何间隔 19910.2.3 最优间隔分类器 20110.2.4 使用优化软件求解SVM 20310.3 对偶算法 20410.3.1 SVM对偶问题 20410.3.2 使用优化软件求解对偶 SVM 20610.4 非线性支持向量机 20810.4.1 核技巧 20810.4.2 常用核函数 21010.5 软间隔支持向量机 21310.5.1 动机及原问题 21310.5.2 对偶问题 21410.5.3 使用优化软件求解软间隔 对偶SVM 21510.6 SMO算法 21810.6.1 SMO算法描述 21810.6.2 简化SMO算法实现 22110.7 LibSVM 22610.7.1 LibSVM的安装 22610.7.2 LibSVM函数 22810.7.3 LibSVM实践指南 230习题 232第11章 推荐系统 23311.1 推荐系统介绍 23411.1.1 什么是推荐系统 23411.1.2 数据集描述 23511.1.3 推荐系统符号 23611.2 基于用户的协同过滤 23611.2.1 相似性度量 23711.2.2 算法描述 23911.2.3 算法实现 24011.3 基于物品的协同过滤 24111.3.1 调整余弦相似度和预测 24111.3.2 Slope One算法描述 与实现 24311.4 基于内容的协同过滤算法与实现 24711.4.1 算法描述 24711.4.2 算法实现 250习题 251第12章 主成分分析 25312.1 主成分分析介绍 25412.2 本征值与奇异值分解 25512.2.1 本征值分解 25512.2.2 奇异值分解 25612.3 PCA算法描述 25612.3.1 PCA算法 25712.3.2 从压缩表示中重建 25812.3.3 确定主成分数量 25812.4 PCA实现 26012.4.1 假想实例 26012.4.2 MNIST实例 264习题 265习题参考答案 267符号表 294参考文献 295