@@ -24,8 +24,7 @@
- 个人定制
- 推荐系统
- 研究大脑
当然,还有更多其他的应用场景,总之,机器学习的出现让很多不可能成为了可能。
- ……
## 1.2 什么是机器学习(What is Machine Learning)
1. 机器学习定义
@@ -33,15 +32,15 @@
- Arthur Samuel (1959). Machine Learning: Field of study that gives computers the ability to learn without being explicitly programmed.
这个定义有点不正式但提出的时间最早,来自于一个懂得计算机编程的下棋菜鸟,编程使得计算机通过不断的对弈,不断地计算布局的好坏来“学习”,从而积累经验,这样,这个计算机程序成为了一个 厉害的棋手。
这个定义有点不正式但提出的时间最早,来自于一个懂得计算机编程的下棋菜鸟。他编写了一个程序,但没有显式地编程每一步该怎么走,而是让计算机自己和自己对弈,并不断地计算布局的好坏,来判断什么情况下获胜的概率高,从而积累经验,好似学习,最后,这个计算机程序成为了一个比他自己还 厉害的棋手。
- Tom Mitchell (1998) Well-posed Learning Problem: A computer program is said to learn from experience E with respect to some **task T** and some **performance measure P**, if its performance on T, as measured by P, improves with **experience E**.
Tom Mitchell 的定义更现代,也有点拗口,视频中介绍了一个例子,即垃圾邮件分类。对于垃圾邮件分类,文 中的三个字母分别代表:
Tom Mitchell 的定义更为现代和正式。在过滤垃圾邮件这个例子中,电子邮件系统会根据用户对电子邮件的标记(是/不是垃圾邮件)不断学习,从而提升过滤垃圾邮件的准确率,定义 中的三个字母分别代表:
- T(task): 对垃圾邮件分类这个 任务。
- P(Performance): 垃圾邮件分类的准确程度 。
- E(Experience): 用户对于邮件进行是否为垃圾邮件的分类(即帮助机器体验、学习) 。
- T(Task): 过滤垃圾邮件 任务。
- P(Performance): 电子邮件系统过滤垃圾邮件的准确率 。
- E(Experience): 用户对电子邮件的标记 。
2. 机器学习算法
@@ -50,18 +49,18 @@
1. 监督学习
2. 无监督学习
两者的区别为**是否需要人工参与数据标注**。这两部分的内容占比很大,并且很重要,掌握好了可以在以后的应用中节省大把大把的时间~
两者的区别为**是否需要人工参与数据结果的 标注**。这两部分的内容占比很大,并且很重要,掌握好了可以在以后的应用中节省大把大把的时间~
还有一些算法也属于机器学习领域,诸如:
- 半监督学习: 介于监督学习于无监督学习之间
- 推荐算法: 没错,就是那些个买完之后还推荐同一款商品的某购物平台 。
- 推荐算法: 没错,就是那些个买完某商品后还推荐同款的某购物网站所用的算法 。
- 强化学习: 通过观察来学习如何做出动作,每个动作都会对环境有所影响,而环境的反馈又可以引导该学习算法。
- 迁移学习
## 1.3 监督学习(Supervised Learning)
监督学习,即为教计算机如何去完成预测任务(有反馈),预先给一定数据量的输入和对应的结果,建模拟合,最后让计算机预测未知数据的结果。
监督学习,即为教计算机如何去完成预测任务(有反馈),预先给一定数据量的输入** 和对应的结果**即训练集 ,建模拟合,最后让计算机预测未知数据的结果。
监督学习一般有两种:
@@ -88,7 +87,7 @@
## 1.4 无监督学习(Unsupervised Learning)
相对于监督学习,训练集不会有人为标注的结果(无反馈),我们不会给出结果或无法得知训练集的结果是什么样,而是单纯由计算机通过无监督学习算法自行分析,从而“得出结果”。计算机可能会把特定的数据集归为几个不同的簇,故叫做聚类算法。
相对于监督学习,训练集不会有人为标注的结果(无反馈),我们** 不会给出** 结果或** 无法得知** 训练集的结果是什么样,而是单纯由计算机通过无监督学习算法自行分析,从而“得出结果”。计算机可能会把特定的数据集归为几个不同的簇,故叫做聚类算法。
无监督学习一般分为两种:
1. 聚类(Clustering)
@@ -121,8 +120,8 @@
另外,在做**原型搭建**的时候也应该先考虑使用类似于 Octave 这种便于计算的编程软件,当其已经可以工作后,才将模型移植到其他的高级编程语言中。
> 注:Octave 与 MATLAB 语法相近,由于 MATLAB 为商业软件,课程中使用开源且免费的 Octave。
机器学习领域的 发展迅速,也可使用 Tensorflow 等开源机器学习框架学习,这些框架十分友好,易于编写及应用机器学习算法 。
>
> 机器学习领域发展迅速,现在 也可使用 Tensorflow 等开源机器学习框架编写机器 学习代码 ,这些框架十分友好,易于编写及应用。
# 2 单变量线性回归(Linear Regression with One Variable)
@@ -151,7 +150,7 @@ $h_\theta(x)=\theta_0+\theta_1x$,为其中一种可行的表达式。
> $x$: 特征/输入变量。
上式中,$\theta$ 为参数,$\theta$ 的变化才决定了输出结果,不同以往,这里的 $x$ 被我们**视作已知**(不论是数据集还是预测前 的输入),所以怎样解得 $\theta$ 以更好地拟合数据,成了求解该问题的最终问题。
上式中,$\theta$ 为参数,$\theta$ 的变化才决定了输出结果,不同以往,这里的 $x$ 被我们**视作已知**(不论是数据集还是预测时 的输入),所以怎样解得 $\theta$ 以更好地拟合数据,成了求解该问题的最终问题。
单变量,即只有一个特征(如例子中房屋的面积这个特征)。
@@ -175,7 +174,7 @@ $h_\theta(x)=\theta_0+\theta_1x$,为其中一种可行的表达式。
$$J(\theta_0,\theta_1)=\dfrac{1}{2m}\displaystyle\sum_{i=1}^m\left(\hat{y}_{i}-y_{i} \right)^2=\dfrac{1}{2m}\displaystyle\sum_{i=1}^m\left(h_\theta(x_{i})-y_{i}\right)^2$$
> 系数 $\frac{1}{2} $ 存在与否都不会影响结果,这里是为了在应用梯度下降时便于求解,平方的导数会抵消掉 $\frac{1}{2} $ 。
> 系数 $\frac{1}{2}$ 存在与否都不会影响结果,这里是为了在应用梯度下降时便于求解,平方的导数会抵消掉 $\frac{1}{2}$ 。
讨论到这里,我们的问题就转化成了**求解 $J\left( \theta_0, \theta_1 \right)$ 的最小值**。
@@ -248,29 +247,31 @@ $\begin{align*} & \text{repeat until convergence:} \; \lbrace \newline \; &{{\th

这里非常重要的一个点是,在计算时**要批量更新 $\theta$ 值** ,否则结果上会有所出入,原因不做细究。
注意,在计算时要**批量更新 $\theta$ 值**,即如上图中的左图所示 ,否则结果上会有所出入,原因不做细究。
## 2.6 梯度下降直观理解(Gradient Descent Intuition)
该节探讨 $\theta_1$ 的梯度下降更新过程,即 $\theta_1 := \theta_1 - \alpha\frac{d}{d\theta_1}J\left(\theta_1\right)$,注意到这里 为了数学定义上的精确性,用的是 $\frac{d}{d\theta_1}J\left(\theta_1\right)$,如果不熟悉微积分学,就把它视作之前的 $\frac{\partial}{\partial\theta}$ 即可。
该节探讨 $\theta_1$ 的梯度下降更新过程,即 $\theta_1 := \theta_1 - \alpha\frac{d}{d\theta_1}J\left(\theta_1\right)$,此处 为了数学定义上的精确性,用的是 $\frac{d}{d\theta_1}J\left(\theta_1\right)$,如果不熟悉微积分学,就把它视作之前的 $\frac{\partial}{\partial\theta}$ 即可。

把红点定为初始点,切于初始点的红色直线的斜率,表示了函数 $J\left(\theta\right)$ 在初始点处有**正斜率**,也就是说它有**正导数**,则根据梯度下降公式 ,${{\theta }_{j}}:={{\theta }_{j}}-\alpha \frac{\partial }{\partial {{\theta }_{j}}}J\left( \theta_0, \theta_1 \right)$ 即 $\theta_1$ 会**向左边移动**。这样不断重复,直到收敛(达到局部最小值,即斜率为0)。
把红点定为初始点,切于初始点的红色直线的斜率,表示了函数 $J\left(\theta\right)$ 在初始点处有**正斜率**,也就是说它有**正导数**,则根据梯度下降公式 ,${{\theta }_{j}}:={{\theta }_{j}}-\alpha \frac{\partial }{\partial {{\theta }_{j}}}J\left( \theta_0, \theta_1 \right)$ 右边的结果是一个正值, 即 $\theta_1$ 会**向左边移动**。这样不断重复,直到收敛(达到局部最小值,即斜率为0)。
当然如果 $\theta$ 值开始就在极小值点处时 ,梯度下降算法将什么也不做($\theta_1 := \theta_1 - \alpha*0$)。
初始 $\theta$ 值(初始点)是任意的,若初始点恰好就在极小值点处 ,梯度下降算法将什么也不做($\theta_1 := \theta_1 - \alpha*0$)。
> 不熟悉斜率的话,就当斜率的值等于图中三角形的高度除以水平长度好啦,精确地求斜率的方法是求导。
另外,对于学习速率 $\alpha$ ,需要选取一个合适的值才能使得梯度下降算法运行良好。
- 学习速率过小:
对于学习速率 $\alpha$,需要选取一个合适的值才能使得梯度下降算法运行良好。
- 学习速率过小图示:

收敛的太慢,需要更多次的迭代。
- 学习速率过大:
- 学习速率过大图示 :

@@ -316,9 +317,9 @@ $\frac{\partial}{\partial\theta_1} J(\theta)=\frac{1}{m}\sum\limits_{i=1}^{m}{{\
上文中所提到的梯度下降,都为批量梯度下降(Batch Gradient Descent),即每次计算都使用所有的数据集 $\left(\sum\limits_{i=1}^{m}\right)$ 更新。
上文中所提到的梯度下降,都为批量梯度下降(Batch Gradient Descent),即每次计算都使用** 所有** 的数据集 $\left(\sum\limits_{i=1}^{m}\right)$ 更新。
由于线性回归函数呈现**碗状**,且**只有一个**全局的最优值,所以函数**一定总会**收敛到全局最小值(学习速率不可过大)。同时,函数 $J$ 被称为凸二次函数,而线性回归函数求解最小值问题属于**凸函数优化问题**。
由于线性回归函数呈现**碗状**,且**只有一个**全局的最优值,所以函数**一定总会**收敛到全局最小值(学习速率不可过大)。同时,函数 $J $ 被称为凸二次函数,而线性回归函数求解最小值问题属于**凸函数优化问题**。
