【机器学习】python 学习指南

发布于 2021-04-26 00:20 ,所属分类:知识学习综合资讯

这一期开始,先讲python和R。这两门语言其实很像,基本你会一门,很快就会另一门。

那么下面先从python开始讲,R的内容将安排到后面的期数中。


既然要讲python,我大致分析了一下,首先得搞明白几个点:

  1. python在机器学习里面扮演什么角色?

  2. 做机器学习python要学到什么程度?

  3. python怎么学?


前两个问题可以合并回答。

python之所以最近几年很流行,主要是因为入门的语法简单,而且社区很活跃,第三方库很丰富。


所谓第三方库,可以理解成一些封装好的工具箱。就好像20年前的“小学生骇客”(就是那种啥都不会,但会下载骇客工具来盗取QQ号的小朋友),他们可能是需要鼠标点点点设置一些东西就能盗号了,再厉害一点,也就只是写一些“衔接”作用的东西,比如说“首先”___________,“然后”___________,“假如”______,“执行”____________,“最后”_________。这类衔接词。下划线上面填的则是骇客工具。

python的第三方库类似起到了这么一个“骇客工具”的功能,你只需要知道有这个功能库的存在,用什么语法(所谓的API)去调用这些功能,然后去写一些“衔接词”(所谓的脚本),把这些功能组织起来,来帮助自己解决问题。


这时,有小朋友会问,那我自己能不能写这些第三方库?嗯,当然是可以的,但我不想在这些基础概念上展开太多,所以有兴趣的小朋友可以去了解一下“PYPI”,以及怎么把自己的东西发布上去(搜索“如何把python项目发布到pypi”)。这样别人也可以用你写的东西了。


第三方库很多功能其实也可以自己写代码去实现,但还是建议优先使用python安装后自带的标准库和网上的第三方库。两个原因:

  1. 不要重复造轮子(重新去实现一个已有的功能),而且你造的轮子一般来讲没有在网上经过很多人很多版本打磨过的轮子“圆”【搞不好你的轮子还会随时爆胎】

  2. python的标准库和网上的第三方库很多是用C/C++来写的(题外话:python也是用C/C++来写的),同样的算法实现,python代码的性能是要被C/C++吊打的。这里面原因有很多了,如C/C++可以预编译、python是动态类型(底层可能要很多判断逻辑去支持,比如说底层得去分辨一下这是鸭子还是小鸡,但C/C++会一开始就指明这是只小鸡)等等


python丰富的第三方库,使编程难度下降了。因为第三方库涉及的学科领域是很广的,那些学科领域的研究人员不需要又得懂自己领域的东西,又得花时间去写学C++,现在他们只需要懂python,了解第三方库的使用,结合自己的专业知识,就能实现自己想要的效果。这就大大带来了便利。


综上,python其实大多数情况扮演的角色是“胶水”的角色,把不同的功能组织到一块。你从零基础到成为一个“调包侠”(只会调用别人实现好的功能),把基本的语法摸索清楚,其实可能一周时间足够了。


当然如果你想你程序的性能足够好,编码风格足够pythonic,光成为调包侠肯定是不够的(但如果只是想体验一下机器学习,比如说调一些包去实现一些简单的功能,的确会python基本语法,了解一下相应的第三方库的api就差不多了),你需要了解python一些更进阶的语言特性,才能写出优美简洁的代码,否则你可能写什么语言都像在写C/java。(至于算法与数据结构这类内功,目前不在本笔记的计划当中,当然以后可能会另外开一个系列专门做这个。)


怎么学python?

讨论完python扮演的角色,接下来就讲一下怎么学python。

主要分两点:

  1. 要用什么学习材料?

  2. 如何学?或者说怎么才算学会?


1. 要用什么学习材料?

其实网上的python资料实在是太多了,免费的、收费的,百度谷歌一下,基本什么资料都有了。但有时选择多了,反而就不知道何从下手了。


a. 有编程基础的人

其实这就很好办了,比如说你大学学过c/java的话,建议直接w3cschool或者runoob去看简易教程文档,到python官网下载python安装后,挨个基本语法自己实现一遍,对比自己学过的编程语言很容易理解上手。


b. 零编程基础的人

这里推荐两本书:

《python编程快速上手——让繁琐工作自动化(第二版)》

这本书能让从真正的编程零基础快速成为调包侠,因为里面都是调包实现各类功能。如果你本身学习积极性不强,容易畏难,这本绝对是推荐入手的书籍。因为它能让你很快体验到“咦,原来这么简单就能做出这个东西!”的感觉,这种成就感能帮助你有勇气与兴趣学习下去。

当然这本书的缺点是没有比较系统的知识组织。


《python编程从入门到实践(第二版)》

这本书的编排比较科学一点,前面讲基础,后面用基础去练项目,而且都是一些很实用的项目。个人感觉这本书的知识组织更系统一些。


如果你不喜欢看书的话,可以去b站搜索教学视频,但因为b站的教程合集随便一个可能就包含了几百个视频,所以我是更推荐看书来学。书上实在搞不懂的,再去搜相应的视频讲解。这样更加能把握自己的学习进度,否则对着几百个视频,可能就是“收藏就等于学了”,最后收藏了一大波视频,后来压根没有再打开过。


c. 对于所有人

入门之后,也就是懂了基本的语法之后,要怎么继续学习?

很多人是学会了入门语法之后,碰到什么问题就去网上提问,比如说上stackoverflow(虽然这个网站可能经常上不去)、上知乎,或者直接百度问题的关键词,然后就会点击链接跳转到CSDN、cnblog之类的技术博客文章里看。


但这就会导致两个问题:

  1. 知识碎片化,不成体系,而且容易忘

  2. 你看的那篇回答可能是错的(包括你现在在看的这篇gongzhong号文章)


那怎么办?

其实解决办法很简单,就是上python的官网去直接看python的文档:www.python.org


点击跳转到新页面

通过左上方选择语言(有中文的,但可能没有支持到最新版本),以及版本号的选择。

重点看Tutorial、Library Reference、Language Reference。


另外根据个人经验,有能力看英文版的就尽量看英文版的,很多时候,我有点怀疑中文版是“主要机翻+稍微人工校阅”,反正就是给我的感觉是“每个汉字都认得,但有时就是不知道它在跟我说什么”,而切换到英文版,反而更容易理解。


实际上,你在CSDN等博客、stackoverflow平台获得的回答,都只能算是二手甚至三手四手(A抄B、B抄C...)。python官方文档才是第一手资料,也是唯一权威的标准。所以你完全可以自己到文档上找你要的答案,而不需要等别人回答你。如果你喜欢python这门语言,建议常常上官网去看看文档,你的收获会非常巨大。


以上,针对不同人群,我提供了“信息源”的获取方式,即应该使用什么学习材料。下面,讲一下具体怎么学。


2.如何学?或者说怎么才算学会?

学习其实根据不同的信息类型有不同的学习方式。根据《如何高效学习》(你要搜就搜英文版,中文版就算了,翻译不想在这里吐槽了,反正连含义都改了...我重新翻译过这本书,但版权问题,以后看有没机会放一部分重新组织过的内容出来)的观点,信息分成5种类型:

  1. 随意信息

  2. 观点信息

  3. 过程信息

  4. 具体信息

  5. 抽象信息


编程学习其实涉及的应该属于“过程信息”+“抽象信息”,抽象主要是指算法、对象层面的抽象,但编程行为本身更像是处理“过程信息”,要学习好这类信息,不是光看输入,重点在于输出,甚至输出比输入重要。就像游泳,你学习游泳不是看视频,听教练讲解来学习的,你是得真的到水里,自己去游,然后教练指导你哪些动作有问题(给你反馈),然后你去调整,再练习,再接受反馈,再调整。

编程行为其实很类似,所以你实际上需要大量的练习与实战,你才能知道有哪些坑。有些坑你不去做,你是不知道它的存在的。

只有你真正把程序调试调通了,你才算是这个知识点学会了(最基本那种“会”)。


另外就是推荐选择一个软件去专门记录你的学习笔记(不推荐word/写字板这类没有语法高亮功能的,我个人用的是Quiver,但只有mac系统有,可以自己到网上找找哪款适合自己),包括概念,对应代码的学习等。尤其要留意自己的代码和别人的代码的差别,并做分析学习。



python的版本

这里插说一句,python的版本要怎么选择?

python有2.x版本和3.x版本的分水岭,这两个版本互不兼容,但现在开始学python的话就不用纠结了,直接上python3.x就行。至于是3.6、3.7、3.8还是3.9?其实关系不大,当然,越往后的版本,会加入越多的功能。作为语言学习的话,当然是选最新的版本。但这里有个问题就是有些机器学习的包,可能只支持3.7还没支持到3.8(当然以后可能会跟进迭代,但那是以后的事情),这时,你用3.8可能就会出问题,所以这方面的话,版本就是需要考虑的。当然,在以后涉及到这种问题时,我都会说明使用哪个版本的python,如没有特殊说明,那就是没有版本限制。


当然,你还可以使用conda来组织多python版本。其实网上组织python版本的工具不止一个,还有像brew(这个是mac系统才有),pyenv等。但我个人基本都尝试过,还是觉得conda最好,感兴趣的同学可以自行搜索使用教程。这里就不展开了,否则就无限拓展下去了。简单来说conda可以实现“虚拟环境”一样的东西,你可以在创建多个“虚拟环境”,在A环境里装python3.6,在B环境里装python 3.7,你想用python3.7的话,直接把当前环境设置为B环境就行。




以上是本期内容。


对于python的基础语法,这里是不会去写的,因为写这个等于要去抄官网,没有意义。同学们可以直接去w3cschool等地方进行简单的入门语法学习


此gongzhong号,建立的目的不是重复写别人写过的东西,而是尽可能写别的地方没有的,或者有,但是写得不够好或比较碎片不成体系(反正就是我认为我有必要自己另外写一篇)。

此外还会分享一些这些知识点在使用时会遇到的坑,都是我实际经历过,并且做了一定分析思考的东西。


下一期,我们直接会开始讲python一些进阶的语言特性,比如说:闭包与装饰器。嗯就先讲这个。



相关资源