ChatGPT最近很火,为了帮助想入门人工智能的小伙伴们准备了一份超详细的学习清单
前言
为帮助大家快速入门机器学习、深度学习,根据我自己多年的学习和工作经验,总结了这份保姆级的学习清单,让大家在学习时不走弯路。
这份清单主要内容如下图所示,主要有3大部分,分别为python编程、机器学习和深度学习,在学习理论知识的同时注重实战,让大家快速上手。在各个部分,本文还推荐了学习图书和视频,可以帮助大家高效学习。
如果想学习后续内容,可关注公众号:程序员小鲁班,关注我,不迷路。
1.python编程
现如今,无论是机器学习、深度学习还是数据分析领域,python都已成为当今最热门的语言,在爬虫、网络编程等领域也深受开发者使用,python已成为使用人数最多的一门编程语言,在各个领域中发挥着作用。
因此,如果想入门机器学习或深度学习,python成为了必须掌握的一门编程语言。
1.1 开发环境
对于任何编程语言的学习,第一步都是安装编程环境,python也是如此。
Anaconda包括Conda、Python以及一大堆安装好的工具包,比如:numpy、pandas等。conda是一个开源的包、环境管理器,可以用于在同一个机器上安装不同版本的软件包及其依赖,并能够在不同的环境之间切换,对后续开发非常方便。总之,要想安装python环境,安装Anaconda绝对是没错的选择。
Anaconda 支持 Linux、Mac 和 Windows 系统,其中内置了上千个 Python 经常会用到的库,包括 Scikit-learn、numpy、pandas、scipy 等等。其官网地址在:https://www.anaconda.com
在安装Anaconda中,一般会自带Jupyter,Jupyter 是一款免费、开源的交互式 web 工具。研究人员可以利用该工具将软件代码、计算输出、解释文本和多媒体资源组合在一个文档中,对新手非常友好。
如果确定后面要继续学习机器学习方向,一定要用pycharm,最好是pycharm的专业版。首先,对于机器学习,特别是深度学习中,为了训练出更好的模型,我们需要查看训练过程中的一些变量,通过设置Pycharm在“Edit Configurations”中的“Show command line afterwards”,可以实时查看每个变量数据,这样,pycharm对高维tensor的展示也十分清晰,模型中间过程产生的 tensor一目了然。除此之外,专业版的pycharm还可以实现远程调试,由于参数量大的深度学习项目需要借助性能强大的云服务器,有时候需要多张GPU,不可能在本地训练以及部署,所以通过这种远程的方式可以训练更大的模型。
对于这些软件的安装,很多小伙伴无脑“next”之后有时候会发现环境没有配置等问题,所以可以考虑跟着视频一步一步的做,这里推荐:https://www.bilibili.com/video/BV15o4y127Rt
1.2 基础语法
初学者都会比较好奇,看来这么多文章、视频,学了这么久Python,什么程度才叫入门了呢?
每个人对技术的认知都不尽相同,在我个人看来,如果你是初学者,学完以下这些东西就可以算是入门了,为什么?因为以下这些东西是Python进阶各个方向都必备的基础知识,你进阶去学爬虫或者web开发等方向,你都得先学会它们。因为知识点放在一起比较多,我把它们稍加区分成基础语法和高级编程两块,对于每一个自学的人,按照这个体系去打好基础,你未来的路会走得更稳重。
python基础语法的学习,是正式学习python的第一阶段,这里会介绍python的常用语法,无论未来做哪个方向,这些语法都会非常重要,在日常编程中经常使用到,这一部分的学习主要包括以下内容。
-
变量及数据结构
-
变量类型、标识符、关键字、运算、数据类型转换
-
数组、元组、字典
-
-
流程控制语句
-
if条件语句
-
for循环
-
while循环嵌套
-
break、continue
-
-
函数
-
函数的定义及调用
-
函数的参数、返回值及类型
-
-
文件操作
-
读取文件
-
写入文件
-
文件路径操作
-
-
面向对象
-
类、对象、属性、方法
-
三大特性:封装、继承、多态
-
-
异常处理
-
捕捉异常
-
自定义异常
-
-
模块和包
在开始的变量及数据结构中,要学习python具有的数据类型,主要包括:
-
int:有符号整型,缺省十进制,python3 中不再保留长整型,统一为 int ;
-
float:浮点型,可以用科学计数法表示;
-
complex:复数,由实数和虚数组成,可用 a+bj 或 complex(a,b) 表示,其中 a 和 b 都是浮点型。
-
bool 值有 True 和 False 两种
对于运算符,有基本运算符、比较运算符等,部分如下所示:
对于流程控制语句,这里和c语言类型,但是又有些不同,这里以if语句为例,大体格式如下:
这一部分的内容其实还有很多,这里就不一一列举了,想详细学习的同学,可以按照下面推荐的图书和视频学习。
推荐图书
1. Python编程快速上手——让繁琐工作自动化
本书快速教读者掌握Python这一对初学者友好的语言。书中包含了很多实用的示例,供读者学习和联系。
通过本书,可以学会解决很多实际的任务和需求,包括在一个或多个文件中搜索文本模式、通过创建修改移动和重命名文件和文件夹来组织计算机、抓取数据和信息、更新Excel表格、自动发送邮件和文本消息、组织计算机执行周期性任务等等。
2. 笨办法学Python 3
本书是一本Python入门书籍,以习题的方式引导读者一步一步学习编程,从简单的打印一直讲到完整项目的实现,让初学者从基础的编程技术入手,最终体验到软件开发的基本过程。本书是基于Python3.6版本编写的。本书共包括52个习题。每一章的格式基本相同,以代码习题开始,按照说明编写代码,运行并检查结果,然后再做附加练习。
3. 数据结构(Python语言描述)
本书面向计算机专业的学生、爱好者和从业人员,是Python编程语言的面向对象设计、数据结构方面的一本入门图书。
本书首先介绍了Python语言的基础知识和特性,然后结合各种数据结构,分别用Python进行了剖析和实现。本书涉及到多态和继承等主题,以及集合接口的多种实现,空间和时间代价的分析,以及各种不同的集合的实现等等。每章最后,还给出了练习,帮助读者巩固和思考。
推荐视频
1. 小甲鱼零基础入门学习Python
链接:https://www.bilibili.com/video/BV1xs411Q799?spm_id_from=333.337.search-card.all.click&vd_source=c2000b78e4321f2d94d03289c4fcf1d8
小甲鱼的这个教学视频在b站已经有1723万的播放量了,搜索结果排名第一名,从这个数据来看,学他就没问题,这么多人跟着学习的教程,一定错不了。全套共96节,课程有趣幽默,很多朋友都是通过这个入门的。如果你是零基础开始学习Python,这个视频比较适合,可以一步一步深入熟悉Python。
2.数据结构与算法Python版本
链接:https://www.bilibili.com/video/BV1VC4y1x7uv
这门课是由北大的陈老师讲的额,内容主要是涉及一些算法的分析你数组,栈,队列,递归,排序,查找,二叉树已经最难的的动态规划。有同学说我入门Python你给我推荐这个干嘛,第一个视频只是让你快速的学习Python一些招式,但是内功的修炼,你的算法数据结构基础还是要夯实。
而且现在进大厂都是在刷leetcode的题目,而刷Leetcode越来越多的人都用Python刷题,毕竟Python语法简单,你说你学好这个是不是很重要。
1.3 高级编程
如果你已经学习了python的基础编程,那么恭喜你进入到了下一环节:python高级编程。这一部分将进入更加复杂的python编程学习,通过这一阶段的学习,你将学习到工程领域中的python编程方式,让代码的性能更强、可靠性更高。这一部分的主要学习内容如下:
-
Linux系统应用
-
Linux发行版系统的使用
-
基本的操作语句
-
shell脚本
-
-
网络编程
-
TCP/IP协议
-
服务器工作过程
-
socket套接字编程
-
http协议
-
-
并发编程
-
线程、进程、协程
-
进程间通信
-
锁机制:如GIL线程锁
-
IO并发:阻塞、非阻塞、多路复用、异步
-
-
函数的高级应用
-
正则表达式
-
正则匹配
-
python re模块
-
-
数据库
-
MySQL等
-
线程池
-
1. Linux系统应用
不少Python新手经常问到学Python到底需不需要学习Linux? Python不是支持Windows和Linux操作系统吗?能在Windows下开发为什么还要学习Linux?这里不得不说,Linux必须要学习,主要有下面的一些原因,对于后期写的python工程代码,很大概率会部署到服务器上,使用高性能GPU来跑,这时候,服务器的系统一般为Linux,在服务器领域,95%都是Linux,所以对于python的学习过程中,也要学习一些Linux系统的基础知识,这样在后续的开发过程中才能方便上手。
2. 网络编程
对于很多小伙伴来说,可能要问,如果我以后只学习机器学习方向,是否还有必要学习网络编程?网络编程不是后端开发工程师学习的内容吗?其实,在很多项目中,现在前后端交互都通过RestFul风格的接口来实现,很多时候在调用算法工程师写的算法时,难免会通过网络来调用,这时候就需要算法工程师也要学点网络编程的东西,不过这里的网络编程可以不用深入学习,大概学一下基本原理及实战操作就可以了。Python的网络编程主要支持两种网络协议:TCP和UDP。这两种协议都通过叫Socket的编程抽象进行处理。Socket起源于Unix,是类似于文件的存在,可以像文件一样进行I/O、打开、关闭等操作,最主要的是它可以实现网络上不同主机的进程间通信,所以基本上Socket是任何一种网络通讯中最基础的内容。
Socket实例与服务器端编程有关的方法有以下几个:
-
s.bind(addr):addr也是(host, port)形式的元组,将套接字绑定到特定的地址和端口上。空字符串表示任意地址,'broadcast'可以用做发送广播信息。
-
s.listen(backlog):开始监听连接,backlog为最大挂起连接次数。
-
s.accept:返回元组(conn,addr),conn为新的套接字,可以用来发送和接收数据。addr是客户端的套接字地址。
-
s.recv()、s.sendall()和s.close()与客户端同。
3. 并发编程
并发编程时写代码中非常重要的一部分,后期能否让代码高效运行,主要就看是否能很好的利用并发编程来实现。多线程几乎是每一个程序猿在使用每一种语言时都会首先想到用于解决并发的工具(JS程序员请回避),使用多线程可以有效的利用CPU资源(Python例外)。然而多线程所带来的程序的复杂度也不可避免,尤其是对竞争资源的同步问题。
然而在python中由于使用了全局解释锁(GIL)的原因,代码并不能同时在多核上并发的运行,也就是说,Python的多线程不能并发,很多人会发现使用多线程来改进自己的Python代码后,程序的运行效率却下降了,这是多么蛋疼的一件事呀!如果想了解更多细节,推荐阅读这篇文章。实际上使用多线程的编程模型是很困难的,程序员很容易犯错,这并不是程序员的错误,因为并行思维是反人类的,我们大多数人的思维是串行(精神分裂不讨论),而且冯诺依曼设计的计算机架构也是以顺序执行为基础的。所以如果你总是不能把你的多线程程序搞定,恭喜你,你是个思维正常的程序猿:
由于前文提到的全局解释锁的问题,Python下比较好的并行方式是使用多进程,这样可以非常有效的使用CPU资源,并实现真正意义上的并发。当然,进程的开销比线程要大,也就是说如果你要创建数量惊人的并发进程的话,需要考虑一下你的机器是不是有一颗强大的心。
4. 函数的高级应用
处理基本类似于c语言的函数使用外,python还有一些函数的高级使用方法,包括高阶函数、函数嵌套、装饰器、生成器、迭代器、内置函数等。
-
参数为函数或返回值为的函数叫做高阶函数
-
函数嵌套:类似循环嵌套,函数里再定义一个函数
-
装饰器:
-
定义:装饰其他函数,为其他函数添加附加功能
-
结构: 高阶函数 + 函数嵌套 = 装饰器
-
作用:你写一个函数,别人调用你的函数,后来需求变了, 需要给你的函数增加功能,在不修改你函数代码的情况下, 别人也不改变你这个函数的调用方法,用修饰器能实现这个功能
-
-
生成器和列表很像,但在创建的时候,列表已经产生了, 而生成器并没有真正的创建,只是把创建规则定义了, 只有在访问的时候才真正产生,而且每次只能产生一个值, 所以生成器节省内存
-
迭代器:可用for循环遍历的对象统称可迭代对象 ,可用next()函数调用并返回下一个值的对象叫迭代器
5. 正则表达式
正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串。
通过事先规定好一些特殊字符的匹配规则,然后利用这些字符进行组合来匹配各种复杂的字符串场景。比如现在的爬虫和数据分析,字符串校验等等都需要用到正则表达式来处理数据。
想要使用python的正则表达式功能就需要调用re模块,re模块为高级字符串处理提供了正则表达式工具。模块中提供了不少有用的函数,比如:compile函数、match函数、search函数、findall函数、finditer函数、split函数、sub函数、subn函数等。
6. 数据库
有些同学可能会好奇,对于算法工程师主要学机器学习的内容,为什么还要学习数据集,现在很多工程都是通过csv文件来导入数据,为什么还要学习数据库呢?其实,在真正的工程级的项目开发中,数据都是放在数据库中存放的,这时候,算法工程师在读取数据的时候就需要到数据库中读取,所以学习数据库的基本操作还是很有必要的。
SQL(Structured Query Language)数据库,指关系型数据库。主要代表:SQL Server、Oracle、MySQL、PostgreSQL。NoSQL(Not Only SQL)泛指非关系型数据库。主要代表:MongoDB、Redis、CouchDB。
关系数据库是以表的形式存储数据的数据库。每个表都有一个模式来记录需要的列和类型。每个模式必须至少有一个主键来唯一标识该记录。换句话说,数据库中没有重复的行。此外,每个表可以使用外键与其他表关联。通常,数据集也会放在这种数据库中存储。
推荐图书
1. Python核心编程(第3版)
本书总共分为3部分。第1部分包括正则表达式、网络编程、Internet客户端编程、多线程编程、GUI编程、数据库编程、Microsoft Office编程、扩展Python等内容。第2部分包括Web客户端和服务器、CGI和WSGI相关的Web编程、Django Web框架、云计算、高级Web服务。第3部分包括文本处理以及一些其他内容。
2. Python极客项目编程
本书结合了软件开发工程师的兴趣来教授Python编程实战。全书分为5个部分共14章,首先是基础知识,然后是模拟游戏,然后分别从图像、3D图形和硬件等入手,以不同类型的项目实践的方式,告诉读者如何将Python编程技能应用到实际的项目中。
本书充分考虑到读者的学习兴趣和习惯,案例使用价值很高,是一本真正能够帮助中级程序员快速上手使用Pyhton的实战指南。
3. Python高性能编程
本书针对有一定基础的Python程序员,将指导读者实现代码优化的各种方法。读者将学习如何使用智能的算法,以及使用各种相关的技术,例如numpy、cython、cpython等,以及各种多线程和多节点策略。市面上一致缺乏学习用Pyhton完成高度计算性任务的教程,而本书正是这方面不可多得的一本好书。
推荐视频
1.3天搞定Linux,1天搞定Shell,清华学神带你通关(2022版)
https://www.bilibili.com/video/BV1WY4y1H7d3
本教程易上手重实操,深入浅出,又涵盖了操作系统原理的众多知识点,对Linux日常管理操作进行了详细的讲解,并在Shell编程部分给出了大量工作实践的脚本案例。对于python开发工程师,大概学一下基本操作,对操作系统有个基本概念就可以了,最好的学习方式就是多用,多敲指令就可以熟悉各个指令的使用。
2.【python教程】socket网络编程(tcp\udp)
https://www.bilibili.com/video/BV1Xx411R743
此部分为python网络编程的基础,主要讲述了tcp和udp的区别和用法及web编程的核心
3.【2021最新版】Python 并发编程实战,用多线程、多进程、多协程加速程序运行
https://www.bilibili.com/video/BV1bK411A7tV
并发编程是用于提升程序运行速度的技术,有多线程、多进程、异步IO等手段本视频系列,挑战Python的并发编程技术
1.4 数据处理
对于要想深入学习机器学习、深度学习的小伙伴来说,数据处理是一门必修课,算法工程师拿到数据之后,要做大量的数据清洗、特征工程等工作,这些工作都需要利用python中的数据处理工具来实现,所以,这一阶段就要好好学习numpy、pandas、matplotlib等数据处理的工具包。
1.numpy
NumPy(Numerical Python)是 Python 中的一个线性代数库。对每一个数据科学或机器学习 Python 包而言,这都是一个非常重要的库,SciPy(Scientific Python)、Mat-plotlib(plotting library)、Scikit-learn 等都在一定程度上依赖 NumPy。
对数组执行数学运算和逻辑运算时,NumPy 是非常有用的。在用 Python 对 n 维数组和矩阵进行运算时,NumPy 提供了大量有用特征。
无论未来是推荐算法、用户画像还是图像领域,在处理矩阵的时候都可以用numpy实现高效操作。
2. pandas
Pandas 是python+data+analysis的组合缩写,基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。
正因为pandas是在numpy基础上实现,其核心数据结构与numpy的ndarray十分相似,但pandas与numpy的关系不是替代,而是互为补充。二者之间主要区别是:
-
从数据结构上看:
-
numpy的核心数据结构是ndarray,支持任意维数的数组,但要求单个数组内所有数据是同质的,即类型必须相同;而pandas的核心数据结构是series和dataframe,仅支持一维和二维数据,但数据内部可以是异构数据,仅要求同列数据类型一致即可
-
numpy的数据结构仅支持数字索引,而pandas数据结构则同时支持数字索引和标签索引
-
-
从功能定位上看:
-
numpy虽然也支持字符串等其他数据类型,但仍然主要是用于数值计算,尤其是内部集成了大量矩阵计算模块,例如基本的矩阵运算、线性代数、fft、生成随机数等,支持灵活的广播机制
-
pandas主要用于数据处理与分析,支持包括数据读写、数值计算、数据处理、数据分析和数据可视化全套流程操作
-
3. matplotlib
https://matplotlib.org/
Matplotlib是一个非常强大的画图工具,对数据的可视化起着很大的作用。Maplotlib可以画图线图,散点图,等高线图,条形图,柱形图,3D图形,图形动画等。Matplotlib 可能是 Python 2D-绘图领域使用最广泛的套件。它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。
matplotlib是Python编程语言及其数值数学扩展包 NumPy的可视化操作界面。它利用通用的图形用户界面工具包,如Tkinter, wxPython, Qt或GTK+,向应用程序嵌入式绘图提供了应用程序接口(API)。此外,matplotlib还有一个基于图像处理库(如开放图形库OpenGL)的pylab接口,其设计与MATLAB非常类似--尽管并不怎么好用。SciPy就是用matplotlib进行图形绘制。
对于初学者,可以在这里找一些需要使用的模板进行响应修改,来实现自己的需求:https://matplotlib.org/stable/gallery/index
推荐图书
1. Python 数据处理
-
教你学会轻松处理数据的方法,将数据处理过程自动化!
-
全面掌握用Python进行爬虫抓取以及数据清洗与分析的方法,轻松实现高效数据处理!
本书采用基于项目的方法,介绍用Python完成数据获取、数据清洗、数据探索、数据呈现、数据规模化和自动化的过程。主要内容包括:Python基础知识,如何从CSV、Excel、XML、JSON和PDF文件中提取数据,如何获取与存储数据,各种数据清洗与分析技术,数据可视化方法,如何从网站和API中提取数据。
2. Python数据挖掘
本书使用简单易学且拥有丰富第三方库和良好社区氛围的Python语言,由浅入深,以真实数据作为研究对象,真刀实枪地向读者介绍Python数据挖掘的实现方法。通过本书,读者将迈入数据挖掘的殿堂,透彻理解数据挖掘基础知识,掌握解决数据挖掘实际问题的最佳实践
推荐视频
1.【莫烦Python】Numpy & Pandas (数据处理教程)
https://www.bilibili.com/video/BV1Ex411L7oT
介绍两个科学运算当中最为重要的两个模块,一个是 numpy,一个是 pandas。任何关于数据分析的模块都少不了它们两个。
Code代码: https://github.com/MorvanZhou/tutorials/tree/master/numpy%26pandas
文档笔记: https://mofanpy.com/support
2.python数据分析教程(numpy+matplotlib+pandas)
https://www.bilibili.com/video/BV1Jt4y1h7Vt
本课程主要目的就是讲解使用python语言,以及Numpy、Pandas、Matplotlib数据处理和分析。
2. 机器学习
这一部分,将重点讲解机器学习方面要学习的东西。机器学习是关于计算机基于数据分布,学习构建出概率统计模型,并运用模型对数据进行分析与预测的方法。在深度学习大规模应用之前,传统的机器学习算法深受学术界追捧。
简而言之,机器学习是人工智能(AI)的一种应用程序,它使程序(软件)可以从经验中学习并提高自己在完成一项任务时的自我,而无需进行明确的编程。例如,您将如何编写一个程序来根据水果的各种属性(例如颜色,形状,大小或任何其他属性)识别水果。
机器学习按照不同 多维度,有多种分类方式,按训练集中标签的使用程度,大致分为三类 :监督学习 、无监督学习 和强化学习。按照算法流程,可分为传统的机器学习和集成学习。要想彻底好好学习这些算法,可分为两大部分,一方面要学习各个算法的理论知识,第二方面还要学习各个算法的编程实现。
2.1 理论算法
1. 线性回归
在统计学和机器学习领域,线性回归可能是最广为人知也最易理解的算法之一。预测建模主要关注的是在牺牲可解释性的情况下,尽可能最小化模型误差或做出最准确的预测。我们将借鉴、重用来自许多其它领域的算法(包括统计学)来实现这些目标。线性回归模型被表示为一个方程式,它为输入变量找到特定的权重(即系数 B),进而描述一条最佳拟合了输入变量(x)和输出变量(y)之间关系的直线。
2.决策树
决策树可以被表示为一棵二叉树。这种二叉树与算法设计和数据结构中的二叉树是一样的,没有什么特别。每个节点都代表一个输入变量(x)和一个基于该变量的分叉点(假设该变量是数值型的)。
3. 朴素贝叶斯
朴素贝叶斯是一种简单而强大的预测建模算法。该模型由两类可直接从训练数据中计算出来的概率组成:1)数据属于每一类的概率;2)给定每个 x 值,数据从属于每个类的条件概率。一旦这两个概率被计算出来,就可以使用贝叶斯定理,用概率模型对新数据进行预测。当你的数据是实值的时候,通常假设数据符合高斯分布(钟形曲线),这样你就可以很容易地估计这些概率。
4. K 最近邻(KNN)
对新数据点的预测结果是通过在整个训练集上搜索与该数据点最相似的 K 个实例(近邻)并且总结这 K 个实例的输出变量而得出的。对于回归问题来说,预测结果可能就是输出变量的均值;而对于分类问题来说,预测结果可能是众数(或最常见的)的类的值。关键之处在于如何判定数据实例之间的相似程度。如果你的数据特征尺度相同(例如,都以英寸为单位),那么最简单的度量技术就是使用欧几里得距离,你可以根据输入变量之间的差异直接计算出该值。
5. 支持向量机
支持向量机(SVM)可能是目前最流行、被讨论地最多的机器学习算法之一。超平面是一条对输入变量空间进行划分的「直线」。支持向量机会选出一个将输入变量空间中的点按类(类 0 或类 1)进行最佳分割的超平面。在二维空间中,你可以把他想象成一条直线,假设所有输入点都可以被这条直线完全地划分开来。SVM 学习算法旨在寻找最终通过超平面得到最佳类别分割的系数。
6.随机森林
Bagging 使用了相同的方法。但是最常见的做法是使用决策树,而不是对整个统计模型进行估计。Bagging 会在训练数据中取多个样本,然后为每个数据样本构建模型。当你需要对新数据进行预测时,每个模型都会产生一个预测结果,Bagging 会对所有模型的预测结果取平均,以便更好地估计真实的输出值。随机森林是这种方法的改进,它会创建决策树,这样就不用选择最优分割点,而是通过引入随机性来进行次优分割。
7.Boosting 和 AdaBoost
Boosting 是一种试图利用大量弱分类器创建一个强分类器的集成技术。要实现 Boosting 方法,首先你需要利用训练数据构建一个模型,然后创建第二个模型(它企图修正第一个模型的误差)。直到最后模型能够对训练集进行完美地预测或加入的模型数量已达上限,我们才停止加入新的模型。
AdaBoost 是第一个为二分类问题开发的真正成功的 Boosting 算法。它是人们入门理解 Boosting 的最佳起点。当下的 Boosting 方法建立在 AdaBoost 基础之上,最著名的就是随机梯度提升机。
推荐书籍
1.统计学习方法
作者李航,是国内机器学习领域的几个大家之一,曾在MSRA任高级研究员,现在华为诺亚方舟实验室。书中写了十个算法,每个算法的介绍都很干脆,直接上公式,是彻头彻尾的“干货书”。每章末尾的参考文献也方便了想深入理解算法的童鞋直接查到经典论文。
2.机器学习(西瓜书)
机器学习是计算机科学的重要分支领域. 本书作为该领域的入门教材,在内容上尽可能涵盖机器学习基础知识的各方面. 全书共 16 章,大致分为 3 个部分:第 1 部分(第 1~3 章)介绍机器学习的基础知识;第 2 部分(第 4~10 章)讨论一些经典而常用的机器学习方法(决策树、神经网络、支持向量机、贝叶斯分类器、集成学习、聚类、降维与度量学习);第 3 部分(第 11~16 章)为进阶知识,内容涉及特征选择与稀疏学习、计算学习理论、半监督学习、概率图模型、规则学习以及强化学习等. 每章都附有习题并介绍了相关阅读材料,以便有兴趣的读者进一步钻研探索.
推荐视频
(强推)浙江大学-机器学习
https://www.bilibili.com/video/BV1qf4y1x7kB
相比于很多人吹捧的吴恩达的机器学习课程,我觉得胡教授的对新手和初学者更为友好,更让人容易懂,是不可多得的精品。毫不夸张的说,胡教授在国内的机器学习教学领域如同一个传火者,星星之火,可以燎原。“机器学习的理论基础,看这个视频基本就足够了。
2.2 编程实现
虽然在上面的理论学习中,用了很大篇幅介绍了各个算法,但是,纸上谈来终觉浅,要想真正在机器学习领域做出一点创新性的研究,将自己的知识应用于实际的项目之中,终究还是要学习如何通过编程来实现各个算法,所以,编程实现是非常重要的一个环境,在学习了基础知识之后,可以多花些时间来学习一下编程实现。
在编程实现部分,我们对于机器学习的学习我们主要是通过sklearn等成熟的库来开发,这些库也提供了较为配套的学习资料。
Sklearn (全称 Scikit-Learn) 是基于 Python 语言的机器学习工具。它建立在 NumPy, SciPy, Pandas 和 Matplotlib 之上,里面的 API 的设计非常好,所有对象的接口简单,很适合新手上路。
在 Sklearn 里面有六大任务模块:分别是分类、回归、聚类、降维、模型选择和预处理,如下图从其官网的截屏。
sklearn官方文档(中文):https://sklearn.apachecn.org/#/
API参考:https://scikit-learn.org/stable/modules/classes.html
推荐书籍
1.机器学习实战
偏向于应用的一本不错的入门书。详细地讲解了算法的步骤和 Python 的代码实现。教你用 Python 的代码实现。它会列出算法的优缺点,列出清晰的流程,先写出算法的伪代码,再配上 Python 代码,关键的代码行还有详细的讲解。
2.《机器学习:公式推导与代码实现》
随着这几年机器学习的火爆,从业门槛也越来越高,以至于经常出现让面试者现场手推逻辑回归和手写反向传播代码的情况。这些都使得笔者产生了撰写这本书的想法。机器学习是一门建立在数学理论上的应用型学科,完备的数学公式推导对于每一个研究机器学习的朋友都是非常必要的。而代码实现则是更加深入理解机器学习算法的内在逻辑和运行机制的不二法门。
本书力求系统、全面的展示公式推导和代码实现这两个维度。全书分为六个大部分 26 个章节,包括入门介绍、监督学习单模型、监督学习集成模型、无监督学习模型、概率模型和最后的总结。其中监督学习两大部分是本书的重点内容。在叙述方式上,全书对于每一章对于一个具体的模型和算法。一般会以一个例子或者前序概念作为引入,然后重点从公式推导的角度来进行算法介绍,最后辅助以一定程度上的基础代码实现,重在体现算法实现的内在逻辑。各部分、各章内容相对独立,但前后又多有联系,读者可以从头到尾全书通读,也可以根据自身情况选取某一部分某一章节进行选读。
全书代码已在 GitHub 开源,代码地址为:
https://github.com/luwill/Machine_Learning_Code_Implementation
推荐视频
1.【机器学习实战】【python3版本】【代码讲解】
https://www.bilibili.com/video/BV16t411Q7TM
带着大家一起敲代码,讲解的很清晰,上手容易,主要内容如下:
第一课-KNN
第二课-决策树
深度学习神经网络系列第一讲-BP神经网络
深度学习神经网络第二讲-基于TF的BP神经网络各种代码讲解
机器学习实战篇第三讲-概率与统计
机器学习实战第四讲-朴素贝叶斯
机器学习实战第五讲-逻辑回归
机器学习实战第六讲-支持向量机(简要讲解)
机器学习实战第七讲-Adaboost
机器学习实战第八讲-正则化技术(附加内容)
2.机器学习Sklearn全套教程+天池项目(程序员必备)
https://www.bilibili.com/video/BV1ff4y1C7uJ
讲的非常细致也非常全,b站上难有的视频课程,最后会通过一个阿里天池项目带大家一起体验一下如果做比赛。
3.深度学习
深度学习作为机器学习的一个分支,是近年来最热门同时也是发展最快的人工智能技术之一,相关学习资源包括免费公开教程和工具都极大丰富,同时这也为学习深度学习技术的IT人才带来选择上的困扰。为此,下面将分不同业务方向,介绍不同的学习内容和详细的学习资料。
3.1 理论算法
1.CNN
卷积神经网络算法(CNN),它是深度学习家族中非常基础且重要的算法。
图像处理中,往往把图像表示为像素的向量,比如一个 1000×1000 的图像,可以表示为一个10^6 的向量,就如同在手写字神经网络中,输入层为28×28 = 784 维的向量。如果隐含层的节点个数与输入层一样,即也是10^6 时,那么输入层到隐含层的参数数据为 10^6×10^6 =10^12,参数的个数太多了,要想在正常的时间内训练完,基本是不可能的。
所以要想处理1000×1000的图像分类,就得首先想办法减少参数的个数,也就是只基于深度神经网络(DNN)已经很难训练或者有没有更加优秀的算法可以专门处理这种图像分类呢?这就是卷积神经网络,convolutional neural network ,简称为 CNN 。CNN有几种措施可以降低参数的数目,本篇先介绍两种:第一种是局部连接(local connection),也称为局部感知,另一种是权值共享(weight sharing)。
与传统的机器学习算法不同,深度学习近年来发展迅速,基于CNN、RNN、GAN等经典算法,诞生了大量优化算法,为高效学习这些算法的理论及实战,本文推荐如内容。
2.RNN
递归神经网络 ( RNN )是唯一的,它允许随时间推移在一系列向量上进行操作。如图示意所示。在 Elman 架构中,使用隐层的输出和隐层的正常输入一起作为输入。另一方面,Jordan 网络中输出单元的输出作为隐藏层的输入。相反地 Jordan 使用输出单元的输出同时作为自身和隐藏层的输入。
3.2 使用框架
上面介绍了几个经典的深度学习算法,要想通过编程实现以上算法在相关应用场景下的实现,还要通过各种深度学习框架。目标,主流的框架有TensorFlow、pytorch、keras等多种,面向不同的需求会选择自己合适的框架来学习并开发。对于有强部署要求的场景,大多使用TensorFlow,这样可以方便部署自己的模型算法,在学术科研领域,则更加倾向于使用pytorch,对于一些只是使用一些简单功能需求的人来说,可以选择更容易上手的keras。
1.TensorFlow
官网:https://tensorflow.google.cn/
TensorFlow框架的前身是Google的DistBelief V2,是谷歌大脑项目的深bai度网络工具库,一些人认为TensorFlow是借鉴Theano重构的。首先目前面临比较麻烦的事情是版本分裂严重,2.0推出之后到2.4之间的版本几乎不可用,接口变更太多,runtime效率比1.X普遍损失50%左右的性能。
优点总结:
-
适合大规模部署,特别是需要跨平台和嵌入式部署时
-
支持python、JavaScript、C ++、Java和Go,C#和Julia等多种编程语言;
-
灵活的架构支持多GPU、分布式训练,跨平台运行能力强;
-
自带TensorBoard组件,能可视化计算图,便于让用户实时监控观察训练过程;
-
官方文档非常详尽,可查询资料众多;
-
社区庞大,大量开发者活跃于此。
2.PyTorch
官网:https://pytorch.org/
PyTorch是Facebook出品的。本质上是Numpy的替代者,而且支持GPU、带有高级功能,可以用来搭建和训练深度神经网络。如果你熟悉Numpy、Python以及常见的深度学习概念(卷积层、循环层、SGD等),会非常容易上手PyTorch。基本上可以做到Python Native的编程模式。当然缺点是有的,例如在做大规模分布式并行的时候、大模型大击群、端侧部署和安全可信部署的时候,需要定制性修改大量的代码。
优点总结:
-
更有利于研究人员、爱好者、小规模项目等快速搞出原型。
-
简洁。PyTorch在设计上更直观,追求尽量少的封装,建模过程透明,代码易于理解;
-
易用。应用十分灵活,接口沿用Torch,契合用户思维,尽可能地让用户实现“所思即所得”,不过多顾虑框架本身的束缚;
-
社区。提供完整的文档和指南,用户可以通过全面的教程完成从入门到进阶,有疑问也可以在社区中获得各种及时交流的机会。
3.Keras
官网:https://keras.io/
Keras是一种高度模块化,使用简单上手快,合适深度学习初学者使用的深度学习框架。Keras由纯Python编写而成并以Tensorflow、Theano以及CNTK为后端。Keras为支持快速实验而生,能够把你的idea迅速转换为结果。
优点总结:
-
用户友好:Keras是为人类而不是天顶星人设计的API。用户的使用体验始终是我们考虑的首要和中心内容。Keras遵循减少认知困难的较佳实践:Keras提供一致而简洁的API,能够极大减少一般应用下用户的工作量,同时,Keras提供清晰和具有实践意义的bug反馈。
-
模块性:模型可理解为一个层的序列或数据的运算图,完全可配置的模块可以用最少的代价自由组合在一起。具体而言,网络层、损失函数、优化器、初始化策略、激活函数、正则化方法都是独立的模块,你可以使用它们来构建自己的模型。
-
易扩展性:添加新模块超级容易,只需要仿照现有的模块编写新的类或函数即可。创建新模块的便利性使得Keras更适合于先进的研究工作。
-
与Python协作:Keras没有单独的模型配置文件类型(作为对比,caffe有),模型由python代码描述,使其更紧凑和更易debug,并提供了扩展的便利性。
4. OneFlow
官网:http://www.oneflow.org/a/chanpin/oneflow/
OneFlow是一流科技开发的深度学习框架,作为国家4大重点实验室(浙江之江实验室)的首选框架,通过之江的科研实力进行对外辐射,这一点还是很佩服的。其核心代码执行都是以Task列表的形式实现,不同的求解器都是在执行一个task流。另外在分布式多机多卡和单机多卡中,runtime的设计使用了分布式Actor机制使得框架天然支持流水线,所以分布式还是很友好,性能也很高。问题就是社区实在太小,很多资料参考不完善,另外易用性跟Pytorch相比,有待提升。SUM:性能和易用性兼顾确实很难,如果玩分布式GPU集群希望性能高,那么OneFlow可能很适合。
优点总结:
-
国内开发的深度学习框架
-
分布式易用且稳定性强
3.3 推荐图书
1. 动手学深度学习:https://d2l.ai/ 本书同时覆盖深度学习的方法和实践,不仅从数学的角度阐述深度学习的技术与应用,还包含可运行的代码,为读者展示如何在实际中解决问题。全书的内容分为3个部分:第一部分介绍深度学习的背景,提供预备知识,并包括深度学习最基础的概念和技术;第二部分描述深度学习计算的重要组成部分,还解释近年来令深度学习在多个领域大获成功的卷积神经网络和循环神经网络;第三部分评价优化算法,检验影响深度学习计算性能的重要因素,并分别列举深度学习在计算机视觉和自然语言处理中的重要应用。
2.《深度学习》花书
在AI领域内,关于深度学习的课程资料有很多很多,而《深度学习Deep Learning》是由麻省理工学院推出的,一经出版就风靡全球,因为本书的封面是由艺术家Daniel Ambrosi提供的中央公园杜鹃花步道梦幻景观,所以被誉为“花书”。
3.Deep Learning with Python
本书使用 Python 语言和开源的 Keras 框架介绍深度学习。本书的一大优点是作者可读性非常强。人工智能和深度学习中的复杂概念被简单地阐述出来,使得读者很容易理解。作者也避免了数学符号,而是通过 30 多个代码片段来解释概念。
3.4 推荐视频
1.吴恩达《Deep Learning》
这门课程同样是来自斯坦福大学的大牛,深度学习领域代表性人物,吴恩达教授在Coursera上所开。这门课程是国内小白的拯救性学习课程,如果你不会微积分,吴教授教你;如果你不会线性代数,吴教授教你;如果你python也不会,吴教授教你。内容涵盖计算机视觉和自然语言处理部分,国内资料非常齐全。如果你喜欢从始至终都是一个老师对你讲课,那么墙裂推荐这门课程。另外吴教授还开设了《Machine Learning》这门课程,学习过程中如果碰到一些陌生的词汇或许可以在这门课程中找到答案。
课程官网:
https://www.coursera.org/specializations/deep-learning
视频资源:
https://mooc.study.163.com/university/deeplearning_ai/#/c
中文笔记:
https://github.com/fengdu78/deeplearning_ai_books
2.CS231n
深度学习代表性人物斯坦福大学李飞飞教授所开课程!!!李飞飞教授团队开设该课程多年,授课形式成熟,授课内容完善,国内外公开资料齐全,对该课程的仔细学习几乎是每一个小白修炼的必经过程。
课程官网:
http://cs231n.stanford.edu/
视频资源:
https://www.bilibili.com/video/BV1nJ411z7fe?from=search&seid=12011234486032902781
优秀笔记:
https://github.com/mbadry1/CS231n-2017-Summary
3.5 学习资料
PyTorch英文版官方手册(https://pytorch.org/tutorials/):对于英文比较好的同学,非常推荐该PyTorch官方文档,一步步带你从入门到精通。该文档详细的介绍了从基础知识到如何使用PyTorch构建深层神经网络,以及PyTorch语法和一些高质量的案例。
PyTorch中文官方文档(https://pytorch-cn.readthedocs.io/zh/latest/):阅读上述英文文档比较困难的同学也不要紧,我们为大家准备了比较官方的PyTorch中文文档,文档非常详细的介绍了各个函数,可作为一份PyTorch的速查宝典。
TensorFlow:https://www.tensorflow.org/versions/r2.0/api_docs/python/tf