1. 初识机器学习
1.1引言
- 机器学习是目前信息技术中最激动人心的方向之一
- 机器学习不只是用于人工智能领域,现在它涉及到各个行业和基础科学中
- 学习算法被用来理解人类的学习和了解大脑
1.2 什么是机器学习
机器学习定义
- Arthur Samuel :在进行特定编程的情况下,给予计算机学习能力的领域。
- Tom Mitchell:一个好的学习问题定义如下,一个程序被认为能从经验E中学习,解决任务 T ,达到性能度量值 P ,当且仅当,有了经验E后,经过P评判,程序在处理T时的性能有所提升。
1.3 监督学习
- 监督学习:其基本思想是,数据集中的每个样本都有相应的“正确答案”,再根据这些样本作出预测。
- 回归问题:即通过回归来推出一个连续的输出
- 分类问题:其目标是推出一组离散的结果
1.4 无监督学习
- 针对数据集,无监督学习就能判断出数据有两个不同的聚集簇。无监督学习算法可能会把这些数据分成两个不同的簇。所以叫做聚类算法。
- 这是一种学习策略,交给算法大量的数据,并让算法为我们从数据中找出某种结构。
2. 单变量线性回归(Linear Regression with One Variable)
2.1 模型表示
-
用小写的
m
m
m来表示训练样本的数目。 -
房屋交易问题 假使回归问题的训练集( Training Set )如下表所示: 将要用来描述这个回归问题的标记如下:
m
m
m 代表训练集中实例的数量
x
x
x 代表特征/输入变量
y
y
y 代表目标变量/输出变量
(
x
,
y
)
\left( x,y \right)
(x,y) 代表训练集中的实例
(
x
(
i
)
,
y
(
i
)
)
({{x}^{(i)}},{{y}^{(i)}})
(x(i),y(i)) 代表第
i
i
i 个观察实例
h
h
h 代表学习算法的解决方案或函数也称为假设(hypothesis)
- 这是一个监督学习算法的工作方式,可以看到这里的训练集里房屋价格,把它喂给学习算法,学习算法的工作了,然后输出一个函数,通常表示为小写
h
h
h 表示。
h
h
h 代表hypothesis(假设),
h
h
h表示一个函数,输入是房屋尺寸大小,因此
h
h
h 根据输入的
x
x
x值来得出
y
y
y 值,
y
y
y 值对应房子的价格。因此,
h
h
h 是一个从
x
x
x 到
y
y
y 的函数映射。
- 选择最初的使用规则
h
h
h代表hypothesis,因而,要解决房价预测问题,实际上是要将训练集“喂”给我们的学习算法,进而学习得到一个假设
h
h
h,然后将我们要预测的房屋的尺寸作为输入变量输入给
h
h
h,预测出该房屋的交易价格作为输出变量输出为结果。那么,对于我们的房价预测问题,我们该如何表达
h
h
h?
- 一种可能的表达方式为:==
h
θ
(
x
)
=
θ
0
+
θ
1
x
h_\theta \left( x \right)=\theta_{0} + \theta_{1}x
hθ?(x)=θ0?+θ1?x,==因为只含有一个特征/输入变量,因此这样的问题叫作单变量线性回归问题。
2.2 代价函数
-
模型所预测的值与训练集中实际值之间的差距(下图中蓝线所指)就是 建模误差 ( modeling error )。 目标便是选择出可以使得建模误差的平方和能够最小的模型参数。 即使得代价函数
J
(
θ
0
,
θ
1
)
=
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
?
y
(
i
)
)
2
J \left( \theta_0, \theta_1 \right) = \frac{1}{2m}\sum\limits_{i=1}^m \left( h_{\theta}(x^{(i)})-y^{(i)} \right)^{2}
J(θ0?,θ1?)=2m1?i=1∑m?(hθ?(x(i))?y(i))2最小。 -
绘制一个等高线图,三个坐标分别为
θ
0
\theta_{0}
θ0?和
θ
1
\theta_{1}
θ1? 和
J
(
θ
0
,
θ
1
)
J(\theta_{0}, \theta_{1})
J(θ0?,θ1?): 在三维空间中存在一个使得
J
(
θ
0
,
θ
1
)
J(\theta_{0}, \theta_{1})
J(θ0?,θ1?)最小的点。 -
代价函数也被称作平方误差函数,有时也被称为平方误差代价函数。之所以要求出误差的平方和,是因为误差平方代价函数,对于大多数问题,特别是回归问题,都是一个合理的选择。还有其他的代价函数也能很好地发挥作用,但是平方误差代价函数可能是解决回归问题最常用的手段了。
2.3 代价函数的直观理解
等高线图
代价函数的样子,等高线图,则可以看出在三维空间中存在一个使得
J
(
θ
0
,
θ
1
)
J(\theta_{0}, \theta_{1})
J(θ0?,θ1?)最小的点。
2.5 梯度下降
梯度下降是一个用来求函数最小值的算法,接下来将使用梯度下降算法来求出代价函数
J
(
θ
0
,
θ
1
)
J(\theta_{0}, \theta_{1})
J(θ0?,θ1?) 的最小值。
- 梯度下降背后的思想是:开始时随机选择一个参数的组合
(
θ
0
,
θ
1
,
.
.
.
.
.
.
,
θ
n
)
\left( {\theta_{0}},{\theta_{1}},......,{\theta_{n}} \right)
(θ0?,θ1?,......,θn?),计算代价函数,然后寻找下一个能让代价函数值下降最多的参数组合。持续这么做直到找到一个局部最小值(local minimum),因为没有尝试完所有的参数组合,所以不能确定得到的局部最小值是否便是全局最小值(global minimum),选择不同的初始参数组合,可能会找到不同的局部最小值。
- 梯度下降法形象解释
想象一下你正站立在山的这一点上,站立在你想象的公园这座红色山上,在梯度下降算法中,我们要做的就是旋转360度,看看我们的周围,并问自己要在某个方向上,用小碎步尽快下山。这些小碎步需要朝什么方向?如果我们站在山坡上的这一点,你看一下周围,你会发现最佳的下山方向,你再看看周围,然后再一次想想,我应该从什么方向迈着小碎步下山?然后你按照自己的判断又迈出一步,重复上面的步骤,从这个新的点,你环顾四周,并决定从什么方向将会最快下山,然后又迈进了一小步,并依此类推,直到你接近局部最低点的位置。
- 批量梯度下降(batch gradient descent)算法的公式为:
θ
j
:
=
θ
j
?
α
?
?
θ
j
J
(
θ
0
,
θ
1
)
(
?for?
j
=
0
?and?
j
=
1
)
\theta_{j}:=\theta_{j}-\alpha \frac{\partial}{\partial \theta_{j}} J\left(\theta_{0}, \theta_{1}\right) \quad(\text { for } j=0 \text { and } j=1)
θj?:=θj??α?θj???J(θ0?,θ1?)(?for?j=0?and?j=1)
其中
a
a
a是学习率(learning rate),它决定了我们沿着能让代价函数下降程度最大的方向向下迈出的步子有多大,在批量梯度下降中,我们每一次都同时让所有的参数减去学习速率乘以代价函数的导数 - 在梯度下降算法中我们要更新
θ
0
{\theta_{0}}
θ0?和
θ
1
{\theta_{1}}
θ1? ,当
j
=
0
j=0
j=0 和
j
=
1
j=1
j=1时,会产生更新,所以接下来更新
J
(
θ
0
)
J\left( {\theta_{0}} \right)
J(θ0?)和
J
(
θ
1
)
J\left( {\theta_{1}} \right)
J(θ1?)。实现梯度下降算法的微妙之处是,在这个表达式中,如果要更新这个等式,需要同时更新
θ
0
{\theta_{0}}
θ0?和
θ
1
{\theta_{1}}
θ1?,要这样更新:
θ
0
{\theta_{0}}
θ0?:=
θ
0
{\theta_{0}}
θ0? ,并更新
θ
1
{\theta_{1}}
θ1?:=
θ
1
{\theta_{1}}
θ1?。实现方法是:你计算公式右边的部分,通过那一部分计算出
θ
0
{\theta_{0}}
θ0?和
θ
1
{\theta_{1}}
θ1?的值,然后同时更新
θ
0
{\theta_{0}}
θ0?和
θ
1
{\theta_{1}}
θ1?。
2.6 梯度下降的直观理解
-
a
a
a是学习率(learning rate),它决定了沿着能让代价函数下降程度最大的方向向下迈出的步子有多大。
- 如果
a
?
a?
a?太小了,即我的学习速率太小,结果就是只能这样像小宝宝一样一点点地挪动,去努力接近最低点,这样就需要很多步才能到达最低点,所以如果
a
a
a太小的话,可能会很慢,因为它会一点点挪动,它会需要很多步才能到达全局最低点。
- 如果
a
a
a太大,那么梯度下降法可能会越过最低点,甚至可能无法收敛,下一次迭代又移动了一大步,越过一次,又越过一次,一次次越过最低点,直到你发现实际上离最低点越来越远,所以,如果
a
a
a太大,它会导致无法收敛,甚至发散。
- 当接近局部最低点时,梯度下降法会自动采取更小的幅度。这是因为当接近局部最低点时,很显然在局部最低时导数等于零,所以当接近局部最低时,导数值会自动变得越来越小,所以梯度下降将自动采取较小的幅度,这就是梯度下降的做法。所以实际上没有必要再另外减小
a
a
a。
2.7 梯度下降的线性回归
-
梯度下降算法和线性回归算法比较如图: -
对之前的线性回归问题运用梯度下降法,关键在于求出代价函数的导数,即:
?
?
θ
j
J
(
θ
0
,
θ
1
)
=
?
?
θ
j
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
?
y
(
i
)
)
2
\frac{\partial }{\partial {{\theta }_{j}}}J({{\theta }_{0}},{{\theta }_{1}})=\frac{\partial }{\partial {{\theta }_{j}}}\frac{1}{2m}{{\sum\limits_{i=1}^{m}{\left( {{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}} \right)}}^{2}}
?θj???J(θ0?,θ1?)=?θj???2m1?i=1∑m?(hθ?(x(i))?y(i))2
j
=
0
j=0
j=0 时:
?
?
θ
0
J
(
θ
0
,
θ
1
)
=
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
?
y
(
i
)
)
\frac{\partial }{\partial {{\theta }_{0}}}J({{\theta }_{0}},{{\theta }_{1}})=\frac{1}{m}{{\sum\limits_{i=1}^{m}{\left( {{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}} \right)}}}
?θ0???J(θ0?,θ1?)=m1?i=1∑m?(hθ?(x(i))?y(i))
j
=
1
j=1
j=1 时:
?
?
θ
1
J
(
θ
0
,
θ
1
)
=
1
m
∑
i
=
1
m
(
(
h
θ
(
x
(
i
)
)
?
y
(
i
)
)
?
x
(
i
)
)
\frac{\partial }{\partial {{\theta }_{1}}}J({{\theta }_{0}},{{\theta }_{1}})=\frac{1}{m}\sum\limits_{i=1}^{m}{\left( \left( {{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}} \right)\cdot {{x}^{(i)}} \right)}
?θ1???J(θ0?,θ1?)=m1?i=1∑m?((hθ?(x(i))?y(i))?x(i)) -
则算法改写成: Repeat { ?
θ
0
:
=
θ
0
?
a
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
?
y
(
i
)
)
{\theta_{0}}:={\theta_{0}}-a\frac{1}{m}\sum\limits_{i=1}^{m}{ \left({{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}} \right)}
θ0?:=θ0??am1?i=1∑m?(hθ?(x(i))?y(i)) ?
θ
1
:
=
θ
1
?
a
1
m
∑
i
=
1
m
(
(
h
θ
(
x
(
i
)
)
?
y
(
i
)
)
?
x
(
i
)
)
{\theta_{1}}:={\theta_{1}}-a\frac{1}{m}\sum\limits_{i=1}^{m}{\left( \left({{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}} \right)\cdot {{x}^{(i)}} \right)}
θ1?:=θ1??am1?i=1∑m?((hθ?(x(i))?y(i))?x(i)) ? } -
在数据量较大的情况下,梯度下降法比正规方程要更适用一些。
|