书籍作者:王成 | ISBN:9787302592846 |
书籍语言:简体中文 | 连载状态:全集 |
电子书格式:pdf,txt,epub,mobi,azw3 | 下载次数:2172 |
创建日期:2023-04-22 | 发布日期:2023-04-22 |
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板 |
本书系统地阐述机器学习中常见的几类模型,包括模型的思想、原理及实现细节等。同时,本书还结合了当前热门的机器学习框架Sklearn,对书中所涉及的模型进行用法上详细讲解。
全书共10章,第1章介绍机器学习开发环境的配置;第2章讲解线性回归模型的基本原理、回归模型中常见的几种评价指标,以及用于有监督模型训练的梯度下降算法;第3章介绍逻辑回归模型的基本原理和分类模型中常见的几种评价指标;第4章介绍模型的改善与泛化,包括特征标准化、如何避免过拟合及如何进行模型选择等;第5章讲解K最近邻分类算法的基本原理及kd树的构造与搜索;第6章介绍朴素贝叶斯算法的基本原理;第7章介绍几种常见的文本特征提取方法,包括词袋模型和TF-IDF等;第8章讲解决策树的基本原理,包括几种经典的决策树生成算法和集成模型;第9章介绍支持向量机的基本原理与求解过程;第10章介绍几种经典的聚类算法及相应的评价指标计算方法。
本书包含大量的代码示例及实际案例介绍,不仅可以作为计算机相关专业学生入门机器学习的读物,同时也适用于非计算机专业及培训机构的参考学习书籍。
王成,华东交通大学计算机应用技术硕士毕业,机器学习领域CSDN与知乎专栏常驻作者。
黄晓辉,哈尔滨工业大学计算机科学与技术博士毕业,华东交通大学信息工程学院副教授,南洋理工大学计算机科学与工程学院访问学者。长期从事深度学习、机器学习相关领域的研究工作,主持过多项国家和省级课题,并获得过多项研究专利。
近十年来,随着人工智能技术的快速发展和广泛应用,各行各业掀起了一股人工智能学习浪潮。利用人工智能相关技术解决现实生活中的问题已经成为学术界和工业界的一种共识。因此,这也使与人工智能相关的专业在各类高校中如雨后春笋般涌现出来,但是对于绝大多数读者来讲,想要跨入人工智能这扇大门仍旧存在着较高的门槛。所以,一本结构合理、内容有趣、理论与实践并重的入门书籍对于初学者来讲就显得十分必要了。
为什么会有这本书
笔者大约是在2016年开始接触机器学习,也正是在那个时间点附近,笔者越发地认为“要想学得好,笔记不能少”。于是在这之后,笔者每学完一个新的知识点都会将它记录下来。慢慢地,不知不觉就记录了近200篇博客。在记录的过程中,笔者都会将看到的各种资料以笔者自己的思维方式从头梳理一遍再形成笔记。这样做的好处就是能够使这些知识点与自己脑中固有的知识更好地融合。
在2020年4月,笔者注册了一个公众号用来分享与传播与机器学习相关的知识内容。同时,为了提高这些文章的质量,笔者以原先的博客记录为蓝本又一次从头梳理了这些内容,然后陆续进行了推送。2020年11月初,笔者在微信群里看到有朋友说,如果能将这些文章整理成一个文档就好了,因为在手机上看容易分神。为了满足这些朋友的需要,笔者又一次对这些内容的组织结构进行了梳理与排版,很大程度上满足了对于初学者的需求。
2020年12月初,清华大学出版社的赵佳霓编辑找到笔者,希望能将这份笔记整理成书稿出版。在与出版社签订合同后笔者又重新对所有内容进行了第3次修订与补充。在整个内容的修订过程中,为了达到学术上的严谨及自己对于内容质量的要求,笔者同本书的另外一位作者黄晓辉一起对本书的结构与内容进行了调整与补充,对文中所出现的每个知识点做了详细的考证与引用,对于每个算法所涉及的示例代码都进行了重新调试。工作之余,在历经近半年的修订后终于形成了现在的《跟我一起学机器学习》。本书第1~3章、第6章和第9章由王成编写,第4、5、7、8章和第10章由黄晓辉编写。
如何进行学习
好的方法事半功倍,而差的方法则事倍功半。当然,从本质上来讲方法没有好和坏之分,只有适合与不适合的区别,因此本书中所总结的学习方法也只是笔者的一家之言,不过这也十分值得学习与借鉴。
如果各位读者也经常在网上浏览有关人工智能的相关内容,肯定会经常看到有人提出类似“如何才能入门机器学习”这样的问题。想想笔者自己在刚接触机器学习时又何尝不是这样呢,总觉得自己一直在门外徘徊,就是不得其中之道。幸运的是经过漫长的摸索后,笔者终于总结出了一条适合自己的学习路线。同时笔者也坚信,这也是适合绝大多数初学者的学习路线。
1. 怎样学
笔者第一次学习机器学习时所接触到的资料就是吴恩达老师的机器学习视频,并且相信很多读者也都或多或少地看过这个视频。总体来讲,它的确是一个很好的机器学习入门材料,内容也非常浅显易懂,并且吴恩达老师讲得也十分详细,但是,学着学着笔者渐渐地发现这份资料并不十分适合自己。局限于当时没有找到更好的学习方法,笔者也就只能硬着头皮看完了整个内容。后来,直到拿着李航老师的《统计机器学习》进行第二次学习时,笔者才慢慢地总结出了一条有效的学习路线,总结起来就是一句话: 先抓主干,后抓枝节。
学习一个算法就好比遍历一棵大树上的所有枝节,算法越复杂其对应的枝叶也就越繁茂。一般来讲通常有两种方式遍历这棵大树: 深度优先遍历和广度优先遍历。对于有的人来讲可能适合第一种方式,即从底部的根开始,每到一个枝干就深入遍历下去,然后回到主干继续遍历第二个枝干,直到结束,而对于有的人来讲可能第二种方式更适合,即从底部的根开始,先沿着主干爬到树顶以便对树的整体结构有一定的概念,然后从根部开始像第一种方式那样遍历整棵大树。相比于第一种方式,第二种方式在整个遍历过程中更不容易“迷路”,因为一开始就先对树的整体结构有了一定的了解了。
因此,对于一个算法的学习,笔者将它归结成了5个层次(3个阶段):
其中,阶段一可以看成先从大树主干爬到树顶一窥大树全貌的过程,因为对于一个算法来讲最基本的就是它所对应的思想,而这也是一个算法的灵魂所在。阶段二和阶段三就可以看成遍历完整棵大树后的层次了,它是对算法里细枝末节的具体探索。
为什么会是上面这种排序呢?可以打乱吗?笔者的回答是: 当然可以,只要是适合自己的方法,那就是好方法。不过,对于绝大多数人来讲,笔者认为应该遵循上面这一学习顺序。不过遗憾的是现在大多数读者的学习顺序是①②④⑤③或者是①②④③⑤。这两种学习顺序的弊端就在于,很多算法在其数学推导过程中是有难度的,当克服不了这个难度时很多读者往往就不会接着往下进行,而这一问题在初学者当中尤为突出。相反,笔者一贯主张的是: 先学会怎么用,再探究为什么。学习过程最重要的就是要形成一个良好的正向循环,这样才会有继续学习下去的动力。
2. 学到什么时候
对于一个算法到底应该学到什么时候或者什么层次同样也是初学者所面临的一个问题。可以想象,如果没有事先将一个算法的学习过程归结为如上3个阶段,此时笔者还真不知道告诉你应该学到哪种程度,因此笔者的建议是,对于所有的算法来讲阶段一是必须完成的,但对于一些相对容易的算法(如线性回归)可以要求自己达到上述3个阶段,而对于那些难度较大的算法(如支持向量机)可以根据自己的定位选择。同时需要注意的是,对于任何一个算法的学习很少有人能做到学一遍就全懂的境界,所以也不要抱着学一遍就结束的想法。
因此,各位读者在实际的学习过程中,可以在第一次学习时先达到阶段一,然后在第二次学习时再达到阶段二……因为这样分阶段的学习方式更能够相对容易地使自己获得满足感,获得继续学下去的乐趣。最后,照着以上步骤进行,学习3~4个算法后,便算得上是初窥机器学习的门径了。
本书特色
从整理笔记伊始,笔者尽量选择了以直白的方式阐述每个算法背后的思想与原理。尽管这看起来可能有点口语化,但极大地降低了学习的门槛,尤其是对于那些非计算机专业的读者来讲。同时,对于一些重要而又难以理解的概念,笔者会尝试2~3次以不同的口吻进行阐述。例如笔者在第 3 章中用了下面这段话阐述为什么需要用到最大似然估计:
我们知道,在有监督的机器学习中都是通过给定训练集,即(x(i),y(i))求得其中的未知参数W和b。换句话说,对于每个给定的样本x(i),事先已经知道了其所属的类别y(i),即y(i)的分布结果是知道的。那么,什么样的参数W和b能够使已知的y(1),y(2),…,y(m)这样一个结果(分布)最容易出现呢?也就是说,给定什么样的参数W和b,能使当输入x(1),x(2),…,x(m)这m个样本时,最能够产生已知类别标签y(1),y(2),…,y(m)这一结果呢?
尽管这段话读起来可能有些啰唆,但只要各位读者认真体会,一定会受益匪浅。
本书源代码
扫描下方二维码,可获取本书源代码。
教学课件(PPT)
本书源代码
致谢
首先感谢清华大学出版社赵佳霓编辑的耐心指点,以及对本书出版的推动; 其次感谢在本书中笔者所引用文献的作者,没有你们的付出也不会有本书的出版; 然后感谢
Brandy、十、olderwang、XiaomeiMi、Wanlong、fanfan和凌同学吃饱了为本书提出的宝贵意见; 最后还要感谢笔者的家人在背后默默地支持笔者。
由于时间仓促,书中难免存在不妥之处,请各位读者见谅,并提宝贵意见。如能再版,你们的名字也将出现在致谢当中。
王成
2022年4月
第1章环境配置
1.1安装Conda
1.1.1Windows环境
1.1.2Linux环境
1.2替换源
1.3Conda环境管理
1.3.1虚拟环境安装
1.3.2虚拟环境使用
1.4PyCharm安装与配置
1.5小结
第2章线性回归
2.1模型的建立与求解
2.1.1理解线性回归模型
2.1.2建立线性回归模型
2.1.3求解线性回归模型
2.1.4sklearn简介
2.1.5安装sklearn及其他库
2.1.6线性回归示例代码
2.1.7小结
2.2多变量线性回归
2.2.1理解多变量
2.2.2多变量线性回归建模
2.2.3多变量回归示例代码
2.3多项式回归
2.3.1理解多项式
2.3.2多项式回归建模
2.3.3多项式回归示例代码
2.3.4小结
2.4回归模型评估
2.4.1常见回归评估指标
2.4.2回归指标示例代码
2.4.3小结
2.5梯度下降
2.5.1方向导数与梯度
2.5.2梯度下降算法
2.5.3小结
2.6正态分布
2.6.1一个问题的出现
2.6.2正态分布
2.7目标函数推导
2.7.1目标函数
2.7.2求解梯度
2.7.3矢量化计算
2.7.4从零实现线性回归
2.7.5小结
第3章逻辑回归
3.1模型的建立与求解
3.1.1理解逻辑回归模型
3.1.2建立逻辑回归模型
3.1.3求解逻辑回归模型
3.1.4逻辑回归示例代码
3.1.5小结
3.2多变量与多分类
3.2.1多变量逻辑回归
3.2.2多分类逻辑回归
3.2.3多分类示例代码
3.2.4小结
3.3常见的分类评估指标
3.3.1二分类场景
3.3.2二分类指标示例代码
3.3.3多分类场景
3.3.4多分类指标示例代码
3.3.5小结
3.4目标函数推导
3.4.1映射函数
3.4.2概率表示
3.4.3极大似然估计
3.4.4求解梯度
3.4.5从零实现二分类逻辑回归
3.4.6从零实现多分类逻辑回归
3.4.7小结
第4章模型的改善与泛化
4.1基本概念
4.2特征标准化
4.2.1等高线
4.2.2梯度与等高线
4.2.3标准化方法
4.2.4特征组合与映射
4.2.5小结
4.3过拟合
4.3.1模型拟合
4.3.2过拟合与欠拟合
4.3.3解决欠拟合与过拟合问题
4.3.4小结
4.4正则化
4.4.1测试集导致糟糕的泛化误差
4.4.2训练集导致糟糕的泛化误差
4.4.3正则化中的参数更新
4.4.4正则化示例代码
4.4.5小结
4.5偏差、方差与交叉验证
4.5.1偏差与方差定义
4.5.2模型的偏差与方差
4.5.3超参数选择
4.5.4模型选择
4.5.5小结
4.6实例分析手写体识别
4.6.1数据预处理
4.6.2模型选择
4.6.3模型测试
4.6.4小结
第5章K近邻
5.1K近邻思想
5.2K近邻原理
5.2.1算法原理
5.2.2K值选择
5.2.3距离度量
5.3sklearn接口与示例代码
5.3.1sklearn接口介绍
5.3.2K近邻示例代码
5.3.3小结
5.4kd树
5.4.1构造kd树
5.4.2最近邻kd树搜索
5.4.3最近邻搜索示例
5.4.4K近邻kd树搜索
5.4.5K近邻搜索示例
5.4.6小结
第6章朴素贝叶斯
6.1朴素贝叶斯算法
6.1.1概念介绍
6.1.2理解朴素贝叶斯
6.1.3计算示例
6.1.4求解步骤
6.1.5小结
6.2贝叶斯估计
6.2.1平滑处理
6.2.2计算示例
6.2.3小结
第7章文本特征提取与模型复用
7.1词袋模型
7.1.1理解词袋模型
7.1.2文本分词
7.1.3构造词表
7.1.4文本向量化
7.1.5考虑词频的文本向量化
7.1.6小结
7.2基于贝叶斯算法的垃圾邮件分类
7.2.1载入原始文本
7.2.2制作数据集
7.2.3训练模型
7.2.4复用模型
7.2.5小结
7.3考虑权重的词袋模型
7.3.1理解TFIDF
7.3.2TFIDF计算原理
7.3.3TFIDF计算示例
7.3.4TFIDF示例代码
7.3.5小结
7.4词云图
7.4.1生成词云图
7.4.2自定义样式
7.4.3小结
第8章决策树与集成学习
8.1决策树的基本思想
8.1.1冠军球队
8.1.2信息的度量
8.1.3小结
8.2决策树的生成之ID3与C4.5
8.2.1基本概念与定义
8.2.2计算示例
8.2.3ID3生成算法
8.2.4C4.5生成算法
8.2.5特征划分
8.2.6小结
8.3决策树生成与可视化
8.3.1ID3算法示例代码
8.3.2决策树可视化
8.3.3小结
8.4决策树剪枝
8.4.1剪枝思想
8.4.2剪枝步骤
8.4.3剪枝示例
8.4.4小结
8.5CART生成与剪枝算法
8.5.1CART算法
8.5.2分类树生成算法
8.5.3分类树生成示例
8.5.4分类树剪枝步骤
8.5.5分类树剪枝示例
8.5.6小结
8.6集成学习
8.6.1集成学习思想
8.6.2集成学习种类
8.6.3Bagging集成学习
8.6.4Boosting集成学习
8.6.5Stacking集成学习
8.6.6小结
8.7随机森林
8.7.1随机森林原理
8.7.2随机森林示例代码
8.7.3特征重要性评估
8.7.4小结
8.8泰坦尼克号生还预测
8.8.1读取数据集
8.8.2特征选择
8.8.3缺失值填充
8.8.4特征值转换
8.8.5乘客生还预测
8.8.6小结
第9章支持向量机
9.1SVM思想
9.2SVM原理
9.2.1超平面的表达
9.2.2函数间隔
9.2.3几何间隔
9.2.4最大间隔分类器
9.2.5函数间隔的性质
9.2.6小结
9.3SVM示例代码与线性不可分
9.3.1线性SVM示例代码
9.3.2从线性不可分谈起
9.3.3将低维特征映射到高维空间
9.3.4SVM中的核技巧
9.3.5从高维到无穷维
9.3.6常见核函数
9.3.7小结
9.4SVM中的软间隔
9.4.1软间隔定义
9.4.2最大化软间隔
9.4.3SVM软间隔示例代码
9.4.4小结
9.5拉格朗日乘数法
9.5.1条件极值
9.5.2求解条件极值
9.5.3小结
9.6对偶性与KKT条件
9.6.1广义拉格朗日乘数法
9.6.2原始优化问题
9.6.3对偶优化问题
9.6.4KKT条件
9.6.5计算示例
9.6.6小结
9.7SVM优化问题
9.7.1构造硬间隔广义拉格朗日函数
9.7.2硬间隔求解计算示例
9.7.3构造软间隔广义拉格朗日函数
9.7.4软间隔中的支持向量
9.7.5小结
9.8SMO算法
9.8.1坐标上升算法
9.8.2SMO算法思想
9.8.3SMO算法原理
9.8.4偏置b求解
9.8.5SVM算法求解示例
9.8.6小结
第10章聚类
10.1聚类算法的思想
10.2kmeans聚类算法
10.2.1算法原理
10.2.2k值选取
10.2.3kmeans聚类示例代码
10.2.4小结
10.3kmeans算法求解
10.3.1kmeans算法目标函数
10.3.2求解簇中心矩阵Z
10.3.3求解簇分配矩阵U
10.3.4小结
10.4从零实现kmeans聚类算法
10.4.1随机初始化簇中心
10.4.2簇分配矩阵实现
10.4.3簇中心矩阵实现
10.4.4聚类算法实现
10.4.5小结
10.5kmeans++聚类算法
10.5.1算法原理
10.5.2计算示例
10.5.3从零实现kmeans++聚类算法
10.5.4小结
10.6聚类评估指标
10.6.1聚类纯度
10.6.2兰德系数与F值
10.6.3调整兰德系数
10.6.4聚类指标示例代码
10.6.5小结
10.7加权kmeans聚类算法
10.7.1引例
10.7.2加权kmeans聚类算法思想
10.7.3加权kmeans聚类算法原理
10.7.4加权kmeans聚类算法迭代公式
10.7.5从零实现加权kmeans聚类算法
10.7.6参数求解
10.7.7小结
不得不说的速度是真快,昨天晚上下的单早上就到了。 书的内容也不错,排版挺好的,仔细看了一下内容写得也很浅显易懂,非常适合吧,初学者入门。
2022-08-21 20:05:36