1
为什么要学原理和公式推导
1)
现成的算法库、学习框架。
数据输入工具、框架中,
用几行代码指定模型的类型和参数,
就能自动计算出结果。
2)
机器学习的原理和数学推导一定要学!
工具就像是武器,只是学会了这种武器最基本的招式和套路。
而理论学习即策略学习,工具的活用,拆开综合用,还有设计新工具
3)
我们将学到:
算法库的安装+库函数的调用;
数据的 I/O 转换。
会安装几个支持库
会调几个接口
4)
DSAT 都 Fix 不了啊?
再多投入几倍资源也达不到 95%——干脆直接用 Rule-Base 来解决?
……
ML/DL
新框架/工具/模型/算法
TensorFlow
Caffe
分类器
逻辑回归
换成 RNN
5)
用这个谱聚类做数据预处理,归根到底不还是利用词袋模型算词频,
比直接计算 tf-idf 做排序能好多少呢?
6)
模型特质
适用场景
数据匹配
算力和时间的消耗;
框架对软硬件的需求和并行化的力度;
7)
针对技术需求,提供高质量模型。
针对业务需求,提供高质量的解决方案。
8)
优化模型
选特征、调超参、换模型,
9)
指标有哪些,如何计算?
是怎么工作的?
超参数?
特征选取有哪些原则、方法可运用?
他们完全有可能针对具体业务问题,构造出目标函数,甚至开发出符合自身软硬件资源特点的求解算法。
Google 一下 Best Practice
必须具备理论基础和数学层面的建模能力才行。
————————————————
2
了解一件事是如何运行的,明晰事物发展的客观规律,知道从最简单的原理学着手逐层推进,比从一个已经很复杂的状态入手,一下子纠缠在各种不得要领的细节中要高效得多。
大多数人最常用的思维模型是 KV Pair,有些人似乎终身只有这一种思维模型。
对于原因和结果的关系,多数人根本没想过去探究其转换模型,而直接默认是线性关系。
线性回归模型:选定一些特征,针对每个特征独立打分,最终加权求和(例如大学排名之类)。
问题待以后会回答:如何验证打分
我分享出来只是想说明:学习机器学习原理和公式推导,并非只是做一些无聊的数字变换。很可能由此为我们打开一扇窗,让我们从新的角度看待世界,并为日常的思考过程提供更加可量化的方法。
3
以模型为驱动,了解“机器学习”的本质
我选择了几种经典模型
(例如:线性回归、逻辑回归、
决策树、支持向量机、条件随机场、
K 均值等),作为入门的进阶。
一定要搞清楚其
问题域、模型函数、目标函数、训练算法……潜入到数学公式推导的层面,
对每一步的公式变换和对应的物理意义有所理解,然后再去实践。
这一个个的模型,就是机器学习的“肌肉”,我们要通过观察学习这一块块肌肉,
以其为载体来了解机器学习的核心——将事物转化为数值,将关系、变换转化为运算,以事实(数据)为依据,以规章(算法)为准绳,通过计算来掌握事物的客观规律(模型)。
要知道,这些经典模型固然经典,但是到了实际应用中,它们并非神圣不可改变。也不是说机器学习就仅限于这些经典模型。
只有掌握了机器学习精髓的人,才可能灵活运用现有模型去解决实际问题,甚至进一步针对具体问题得出自己的模型和算法。
反复学习,从记忆到掌握
当然,达到这种程度并非一蹴而就,总要从最简单的模型开始。
。
多学几遍,从头到尾掌握整件事情的逻辑,知
掌握了事物内在的逻辑,再去记忆,就容易多了。
学习标准设置得不必太高,比如可以这样:
第一遍学,只要求自己能完全掌握机器学习数据、模型、算法相互作用的基本关系,训练过程和评价标准。具体的模型,掌握最简单的线性回归就可以。
只要从头到尾掌握了第一个模型,做到:能够从模型函数开始推导出目标函数,再用梯度下降算法求解,用(伪)代码实现梯度下降求解过程。
第一遍学习掌握一个模型;第二遍学习就不难掌握2-3个模型;第三遍就有可能掌握本课列出的大部分模型………如此由易到难,螺旋式推进。
对于一些本身就比较复杂的数学模型,比如条件随机场、隐马尔科夫这类涉及场论和势函数的模型,如果直接入手,往往会卡在模型函数本身上。但是当有了前面几个模型的基础,了解了更抽象层面的原理,掌握起来就容易多了。
数学需要多精深?
。如果数学工具实在掌握得太少,最起码也要读懂一组公式推导中的第一个和最后一个式子:
读懂它们都针对哪些变量进行了怎么样的运算;
这些变量和运算的物理意义是什么;
第一个式子是对哪种真实场景的数学描述;
最后推导的结果又具备怎样的特征。
enter image description here
两条路径反刍数学知识
所以,同学们应力求理解每一步推导过程。
如果有可能,可以事先复习一下大学本科的高数(数学分析)、概率统计和线性代数。或者,在学习模型的过程中,一旦遇到了数学上的阻碍,就回头去查找相应知识。
很多数学问题,之所以让人头大,其实并不是真的有多难,而是符号系统比较复杂,运算繁复,或者运算所表达的物理意义多样。
很多时候造成困扰是因为想不起来这里用到什么定理,哪个公式,或者这样操作表达的含义是什么。
如果把常用的细小知识点都记录下来,按主题整理成速查手册(小字典),需要用的时候快速查找对应的知识点,这样我们的“机器学习”学习之路就顺畅不少。
下面两个是我自己制作的例子,供大家参考:
机器学习常用微积分知识速查手册
机器学习常用线性代数知识速查手册
日常学习 Tips
记录
准备一个笔记本,纸质版或电子版均可。有什么发现、感想、疑问、经验等等,全都记下来。
如果是对某个话题、题目有比较完整的想法,最好能够及时整理成文,至少记录下要点。
隔一段时间把笔记整理一下,把分散的点滴整理成块,一点点填充自己的“思维地图”。
分享
知识技能这种东西,学了,就得“炫耀”——把学习到的新知识、理论、方法,分享给更多的人。
如此一来,倒逼自己整理体系、记忆要点。这可以说是与人方便自己方便的最佳实例。
把自己的感想、体会、经验分享出来的同时,也锻炼了自己的逻辑思维能力和归纳总结能力。一举多得,何乐而不为?
以上谈到的关联、记录、分享的内容,大家都可以通过社群内的学习笔记来提交。我会挑选优秀的内容进行点评和回复。
4
第04课:为什么要学 Python 以及如何学 Python
理解原理——涉及动手实践
去训练一个模型,测试一些数据,编写一个算法
那些公式、函数、算法才能真的在头脑中留下印象。
Python 是一种说人话的语言
开发者不需要关注底层;
不用自己费心照顾存储、网络等资源。
处理大量非结构化数据
Python 的动态类型设计正好
语法简单直观,
表达形式一致。
Python 的设计理念就是让不同的人所用的表达形式一致。
容易读懂,容易整合。
直接运行。
一条条语句可以直接作为命令行运行
大量机器学习支持库
研究人员和数据科学家,编程语言本身于他们而言仅仅是一种工具。
作为回报,他们向 Python 反哺了大量用于数据处理和机器学习的支持库。
NumPy 和 sklearn(scikit-learn)。
TensorFlow、Caffe 之类的深度学习框架,主体都是用 Python 来实现,提供的原生接口也是 Python。
怎么学 Python
买书当然可以,不过不是必须,特别是,当你学习编程的目的是要训练机器学习模型的时候。
个人认为,
阅读官网文档或中文版教程
https://docs.python.org/3.7/tutorial/index.html
https://docs.python.org/3.7/index.html,
并在实践中通过 Stack Overflow 直接查找所需实现问题的 Solution,
可能是比读书更好的学习编程语言的方法。
推荐这本:由 Eric Matthes 撰写的《Python 编程从入门到实践》。
不管买不买书,下面的过程都差不多。个人建议按照下面的顺序入手 Python。
(1)安装 Python 运行环境。
就选 Python 3吧。
第一步,在你的系统上安装好 Python 3。
(2)编写第一个 Python 程序:“Hello world”。
虽然有效代码只有:print(”hello world”)。
但注意,你需要尝试至少三种不同的运行方法:
在命令行直接运行;
编写一个 Python 文件,将 print hello world 封装为一个函数,通过 main 函数调用它来运行;
编写一个 class,将 print hello world 封装为一个 method,通过 main 函数创建 class 实例来运行 method。
(3)编写一个或者多个复杂点的程序,用(2)中第2种或第3种方式执行。
具体程序的功能可以自己定义,目的是借此了解下面这些概念:数据类型、变量、函数、参数、返回值、调用、递归……
学习流程控制:顺序、条件、循环。
搞清几种不同类型:array、list、dict、set 的用法。
在这个过程中,学习什么是静态类型、什么是动态类型、什么是强类型、什么是弱类型,这些不同设计的目的和应用场景分别是什么。
如果你实在不知道写什么程序好,那就写写 binary search 和 quick sorting 吧。并顺便尝试一下递归和非递归的不同实现。
——这块听不懂
(4)编写程序练习文件读写,文件和目录操作。
如果使用支持库封装好的模型算法,
把数据在文件和各种类型的变量之间导来导去。
(所以务必学会将 tsv、csv 之类的文件读入 array、list、dict 等结构
以及将这些变量打印到文本文件中的方法。)——不会
(5)开始写第一个机器学习程序。
(首先 import numpy 和 sklearn。
之前当然要安装这两个支持库,
一般安装支持库使用 apt-get 或者 pip,可以根据需要选用。)——不会
其次,找一个模型,比如 Logistic Regression,
网络搜索该模型训练和测试的 Example Code,运行后看结果,
并阅读 Example Code(下面是个例子)。
from numpy import *
from sklearn.datasets import load_iris # import datasets
# load the dataset: iris
iris = load_iris()
samples = iris.data
#print samples
target = iris.target
# import the LogisticRegression
from sklearn.linear_model import LogisticRegression
classifier = LogisticRegression() # 使用类,参数全是默认的
classifier.fit(samples, target) # 训练数据来学习,不需要返回值
x = classifier.predict(array([5, 3, 5, 2.5]).reshape(1,-1)) # 测试数据,分类返回标记
print x
一则学习 sklearn 和 Numpy 库函数的调用,
一方面对 LR 有个感性认识。——不懂
(6)自己设置一个实际问题,并准备数据。修改(5)的程序,用自己的数据训练并测试模型。
——懂也不懂以前
(7)逐行解读(6)中调用的 sklearn 函数的实现代码,
结合该模型的原理,对比印证,彻底搞懂一个算法的实现细则。
——同上
比如例子中的:classifier.fit() 和 classifier.predict()。
(8)不依赖 sklearn,自己动手实现一个训练 LR 模型的算法。
完成上面这些步骤后,你算是可以用 Python 辅助学习机器学习基础知识了。
以上就是绪论部分需要学习的内容,不知道同学们通过这两天是否对为什么学习和怎么学习有了更深的理解?请把你的心得和问题通过学习笔记提交出来吧,我们一起研究,共同进步。
网友评论