写在最前面的话
我之前一直是做机器人设计的,每天接触的更多的是51单片机、avr单片机、arm处理器等。每天设计电路板、刷程序,日子一天天过去。忽然回过头,看看之前做的项目,设计的东西,忽然有种陌生感。时间长了自己都忘了当初写的这句程序是什么意思了。因此,从今年年初开始,就开始写笔记,但是都是写在纸质笔记上的。这样也就诞生一个问题,我经常两点办公,因此,笔记经常不在身旁。最近发现大家都在写技术博客,在这个网络时代,思想还停留在远古时代,自己都有点想嘲笑自己。网络上技术博客有着不可比拟的优势,可以随时随地修改,也可以利用超链接等功能实现网络状的知识库。
其次,就是我开始写机器学习笔记的想法其实是起源于我接的一个项目。今年年初需要做一个智能控制阀的项目,需要实现的功能比较多,甲方的要求是,要能实现远程控制、手机控制、网络远程访问等功能。这样就产生大量可用的数据,既然有了大数据的基础,就干脆来一个机器学习,将用户的控制逻辑记录下来。因此,就有了这个系列笔记。
写这个笔记的基本思路是:
1、循序渐进。
我认识学会一个东西的唯一检验标准就是会用它。我写这篇笔记的一个基本思路就是:你先学会最简单的用法,你在其他地方先试试看。因此,入门教程就会让你先用它,如果有需要再进一步。一切学习都应该从感性认识先开始,而不是先概念、公式一大堆,先把你搞晕了。我认为这是目前我们教育最大缺点,你晕了,他就是成功了,而最后因为太难学,你放弃了。这点我最有感触,我并不是科班计算机系的,但我有个爱好是机器人,大学时代参加了亚太机器人设计大赛,最开始我是设计机械机构,后来因为需要,就开始设计电路板,再后来开始编程。然后自己经常写个APP什么的。慢慢的都学会,我的基本思想是先用起来再说,学习就是不断试错的过程,没用永远正确的东西,也没用永远先进的东西。我设计的很多东西已经在实际中控制中很多大型设备,并且我一直遵照PDCA原则,不断改进它。
2、系统化。
既然写的笔记,我就把它做成一个我随时可以查阅的工具。我把写成一个系列化的笔记。利用超级链接,以后我可以经常查阅它。最终的希望,它可以成为一个资料库。
3、结构化。
我的笔记将分五个模块:matplotlib模块、numpy模块、机器学习的基础概念、机器学习的数学基础、常用机器学习算法。而每个模块将从入门、基础、进阶、高级、100次训练五个子模块。
4、网状化。
我们已经习惯了按部就班从入门到基础,再到进阶的学习模式。这样固然很好,但已经不太适应目前这种信息大爆炸的时代。因此,这个笔记并不是让你一直从第一个笔记的到最后一个笔记这样一直看下去。而是你可以利用超级链接,需要用到什么东西就看什么东西。如果你是一个新手,就先看每个教程的入门和基础就可以了,等你发现某个地方不是很明白,再倒回去看其他教程。你也可以直接看你感兴趣的地方,如果需要用到某个知识点,你再通过超级链接点进去看。
5、持续更新原则。
我不会把所有东西整理好了,再写它。比如:我先写matplotlib入门,然后我有可能就开始写numpy入门,再然后写KNN算法。随着我理解的深入,逐步把所有东西写成系列化。并且写完了,我根据我的理解再进行修改。这也网络博客的魔力,不然直接看书就可以了,书本上的东西都是死的,但博客可以做到每时每刻更新。
6、100次训练法则。
我认为能熟练运用一项技能的唯一办法就是不断重复训练。因此,我会个每个子模块中设置训练习题。只有在你用的过程中才能深刻理解它。
我将本系列笔记的所有内容链接,都先贴出来。随着笔记增加会逐步增加:
模块 | 链接 | 说明 |
---|---|---|
matplotlib模块 | matplotlib入门 | 画折线图,设置线条样式、颜色等,设置坐标轴、图表标签等 |
matplotlib基础 | 多坐标系、参数设置方法、解析什么是对象绘图 | |
numpy模块 | numpy入门 | python基本的大数据类型,numpy中数组、矩阵的加减乘除运算 |
numpy基础 | 常用函数,排序,比大小等方法 |