1.问题引入
根据不同房屋尺寸,预测出房子可以卖多少钱。所做任务就是通过给的数据集构建一个模型。
显然这是一个回归问题,根据之前的数据预测出一个准确的输出值。
为了描述这个回归问题,标记如下:
给出的数据集被称为训练集
用m表示训练集中实列的数量
用x表示输入变量/特征
用y表示输出变量/目标变量
(x,y)表示训练集中的实列
(x(i),y(i))代表第i个观察实列
h代表学习算法的解决方案或函数也称为假设(hypothesis)
在本例中,h表示一个函数,输入时房屋尺寸的大小,h根据输入的x的值来得出y的值。故假设
h
θ
(
x
)
=
θ
0
+
θ
1
x
h_{\theta}(x)=\theta_{0}+\theta_{1}x
hθ(x)=θ0+θ1x,应为只含有一个特征/输入变量,因此这样的问题叫做单变量线性回归问题(一元线性回归)。
2.代价函数
在线性回归中,最常用的是均方误差,其具体形式为:
J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( ( ^ y ( i ) ) − y ( i ) ) 2 = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta_{0},\theta_{1})=\frac{1}{2m}\sum_{i=1}^{m}{(\hat(y^{(i)})-y^{(i)})^{2}}=\frac{1}{2m}\sum_{i=1}^{m}{(h_{\theta}(x^{^{(i)}})-y^{(i)})^{2}} J(θ0,θ1)=2m1∑i=1m((^y(i))−y(i))2=2m1∑i=1m(hθ(x(i))−y(i))2
我们的目标便是选出可以是代价函数J最小的模型参数。
当假设
θ
0
=
0
\theta_{0}=0
θ0=0时,假设给出数据(1,1),(2,2),(3,3),
J
(
θ
1
)
J(\theta_{1})
J(θ1)的函数图像如图所示,
不难看出,当J在最低点时,代价函数最小,即当
θ
1
\theta_{1}
θ1=1时,误差最小。
所以,想要找出合适的模型参数,即寻找J的最低点即可。
3.梯度下降法
梯度下降法是一个用来求函数最小值的算法,其思想是:开始我们随机选取一个参数组合
(
θ
0
,
θ
1
)
(\theta_{0},\theta_{1})
(θ0,θ1),计算代价函数,沿代价函数的梯度方向,同时更新参数组合,一直持续到找到一个局部最小值。由下图可知,选择不同的初始参数组合,可能会找到不同的局部最小值。
其计算公式为:
θ
j
=
θ
j
−
α
∗
∂
∂
θ
j
J
(
θ
0
,
θ
1
)
\theta_{j}=\theta_{j}-\alpha*\frac{\partial}{\partial\theta_{j}}J(\theta_{0},\theta_{1})
θj=θj−α∗∂θj∂J(θ0,θ1),其中
α
\alpha
α是学习率,他决定了每次沿梯度方向向下迈出的步子有多大。
对
α
\alpha
α的选取要适当,如果学习速率太小,沿梯度方向下降的会很慢很慢,需要很多部材能达到最低点;如果学习速率太大,可能会直接越过最低点,在下次迭代是有越过了最低点,一次次越过最低点,导致无法到达最低点。
在本例中,J的函数图像如图所示,它仅有一个最低点,因此使用梯度下降法找到的最低点就是最优解。对代价函数J使用梯度下降法。代价函数的递归方向就是其偏导数方向。
对代价函数求偏导:
∂
∂
θ
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_{i=1}^{m}({h_\theta(x^{(i)})-y^{(i)})^2}
∂θj∂J(θ0,θ1)=∂θj∂2m1∑i=1m(hθ(x(i))−y(i))2
θ 0 : j = 0 \theta_0:j=0 θ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_{i=1}^{m}({h_\theta(x^{(i)})-y^{(i)})} ∂θ0∂J(θ0,θ1)=m1∑i=1m(hθ(x(i))−y(i))
θ 1 : j = 1 \theta_1:j=1 θ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_{i=1}^{m}({h_\theta(x^{(i)})-y^{(i)})*x^{(i)}} ∂θ1∂J(θ0,θ1)=m1∑i=1m(hθ(x(i))−y(i))∗x(i)
应用梯度下降法修改不断当前值
θ 0 \theta_0 θ0= θ 0 − α ∗ \theta_0-\alpha* θ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_{i=1}^{m}({h_\theta(x^{(i)})-y^{(i)})} ∂θ0∂J(θ0,θ1)=m1∑i=1m(hθ(x(i))−y(i))
θ
1
\theta_1
θ1=
θ
1
−
α
∗
\theta_1-\alpha*
θ1−α∗
∂
∂
θ
0
J
(
θ
0
,
θ
1
)
=
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
∗
x
(
i
)
\frac{\partial }{\partial \theta_0}J(\theta_0,\theta_1)=\frac{1}{m}\sum_{i=1}^{m}({h_\theta(x^{(i)})-y^{(i)})*x^{(i)}}
∂θ0∂J(θ0,θ1)=m1∑i=1m(hθ(x(i))−y(i))∗x(i)
直至到达最低点,此时
θ
0
,
θ
1
\theta_{0},\theta_{1}
θ0,θ1的值就是我们要找的最适合的模型参数。
实际使用中停止梯度下降方式:
①达到最大迭代次数后即停止梯度下降。
②当损失函数小于很小的预设值时,此时即可认为已经到达了最低点。