一元线性回归
回归(Regression)一词简单来说,指的是:我们根据之前的数据预测出一个准确的输出值
线性回归(Liner Regression):寻找一条直线,最大程度地拟合样本特征和样本输出标记之间的关系。样本特征只有一个,就被称为简单线性回归。
假设预测的线性函数的表达式为:
h
θ
(
x
)
=
θ
0
+
θ
1
x
h_\theta(x) = \theta_0 + \theta_1x
hθ(x)=θ0+θ1x
其中
θ
0
,
θ
1
\theta_0 ,\theta_1
θ0,θ1为此模型的参数(parameter),分别对应于截距和斜率。我们所要做的是选择合适的参数使其最大程度地拟合我们的数据。
- 之后要用到的标记如下:
m m m 代表训练集中实例的数量
x x x 代表特征/输入变量
y y y 代表目标变量/输出变量
( x , y ) (x, y) (x,y) 代表训练集中的实例
( x ( i ) , y ( i ) ) (x^{(i)},y^{(i)}) (x(i),y(i)) 代表第 i i i 个观察实例
为了评估模型的准确程度,使这个值不受个别极端数据影响而产生巨大波动,我们选取 方差的二分之一 作为评判误差程度的标准,即:
J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta_0,\theta_1) = \frac {1}{2m}\sum_{i=1}^{m}\ (h_\theta(x^{(i)}) - y^{(i)})^2 J(θ0,θ1)=2m1i=1∑m (hθ(x(i))−y(i))2
J ( θ 0 , θ 1 ) J(\theta_0,\theta_1) J(θ0,θ1) 即为该模型的代价函数(Cost Function),有时称为 损失函数(Loss Funtion)
于是乎我们的目标就变成了:
m
i
n
i
m
i
z
e
J
(
θ
0
,
θ
1
)
minimize\ \ J(\theta_0,\theta_1)
minimize J(θ0,θ1)
- 与代价函数相对的一个概念为效用函数 (Utility Function)
- 通过分析问题,确定问题的代价函数或者效用函数,通过最优化获得机器学习的模型,是一类机器学习算法的基本思路,也是参数学习方法的基础。
最小二乘法
最小二乘法是一种对该问题的最优化方法。
J
(
θ
0
,
θ
1
)
J(\theta_0,\theta_1)
J(θ0,θ1)是一个多元函数。使其对各元的偏导数等于0,则可得该函数的极值。
即:
∂ J ∂ θ 0 = 0 , ∂ J ∂ θ 1 = 0 \frac{\partial J} {\partial \theta_0} = 0,\ \frac{\partial J} {\partial \theta_1} = 0 ∂θ0∂J=0, ∂θ1∂J=0
接下来为求解过程:
∂
J
∂
θ
0
=
1
2
m
∑
i
=
1
m
2
(
y
(
i
)
−
θ
1
x
(
i
)
−
θ
0
)
(
−
1
)
=
0
\frac{\partial J} {\partial \theta_0} = \frac {1}{2m} \sum ^{m}_{i=1}2(y^{(i)} - \theta_1x^{(i)} - \theta_0)(-1) = 0
∂θ0∂J=2m1i=1∑m2(y(i)−θ1x(i)−θ0)(−1)=0
=
>
∑
i
=
1
m
(
y
(
i
)
−
θ
1
x
(
i
)
−
θ
0
)
=
0
=> \sum ^{m}_{i=1}(y^{(i)} - \theta_1x^{(i)} - \theta_0) =0
=>i=1∑m(y(i)−θ1x(i)−θ0)=0
=
>
∑
i
=
1
m
y
(
i
)
−
θ
1
∑
i
=
1
m
x
(
i
)
−
∑
i
=
1
m
θ
0
=
0
=>\sum ^{m}_{i=1} y^{(i)} - \theta_1 \sum ^{m}_{i=1}x^{(i)} - \sum ^{m}_{i=1}\theta_0 = 0 \
=>i=1∑my(i)−θ1i=1∑mx(i)−i=1∑mθ0=0
=
>
∑
i
=
1
m
y
(
i
)
−
θ
1
∑
i
=
1
m
x
(
i
)
−
m
θ
0
=
0
=> \ \sum ^{m}_{i=1} y^{(i)} - \theta_1 \sum ^{m}_{i=1}x^{(i)} - m\theta_0 = 0
=> i=1∑my(i)−θ1i=1∑mx(i)−mθ0=0
=
>
(
两
边
同
时
除
以
m
)
θ
0
=
y
‾
−
θ
1
x
‾
①
=>(两边同时除以m) \ \theta_0 = \overline {y} \ - \ \theta_1 \overline{x} \ \ \ \ ①
=>(两边同时除以m) θ0=y − θ1x ①
∂
J
∂
θ
1
=
1
2
m
∑
i
=
1
m
2
(
y
(
i
)
−
θ
1
x
(
i
)
−
θ
0
)
(
−
x
(
i
)
)
=
0
\frac{\partial J} {\partial \theta_1} = \frac {1}{2m}\sum ^{m}_{i=1}2(y^{(i)} - \theta_1x^{(i)} - \theta_0)(-x^{(i)}) = 0
∂θ1∂J=2m1i=1∑m2(y(i)−θ1x(i)−θ0)(−x(i))=0
=
>
∑
i
=
1
m
(
y
(
i
)
−
θ
1
x
(
i
)
−
θ
0
)
x
(
i
)
=
0
=> \sum ^{m}_{i=1}(y^{(i)} - \theta_1x^{(i)} - \theta_0)x^{(i)} =0
=>i=1∑m(y(i)−θ1x(i)−θ0)x(i)=0
(
将
①
式
代
入
其
中
)
=
>
∑
i
=
1
m
(
y
(
i
)
−
θ
1
x
(
i
)
−
y
‾
+
θ
1
x
‾
)
x
(
i
)
=
0
(将①式代入其中)=> \sum ^{m}_{i=1}(y^{(i)} - \theta_1x^{(i)} -\overline {y} \ + \ \theta_1 \overline{x} )x^{(i)} =0
(将①式代入其中)=>i=1∑m(y(i)−θ1x(i)−y + θ1x)x(i)=0
=
>
∑
i
=
1
m
y
(
i
)
x
(
i
)
−
θ
1
(
x
(
i
)
)
2
−
y
‾
x
(
i
)
+
θ
1
x
‾
x
(
i
)
=
0
=> \sum ^{m}_{i=1}y^{(i)} x^{(i)} - \theta_1(x^{(i)})^2 -\overline {y} x^{(i)} \ + \ \theta_1 \overline{x} x^{(i)} =0
=>i=1∑my(i)x(i)−θ1(x(i))2−yx(i) + θ1xx(i)=0
=
>
∑
i
=
1
m
(
y
(
i
)
x
(
i
)
−
y
‾
x
(
i
)
)
−
θ
1
∑
i
=
1
m
(
(
x
(
i
)
)
2
−
x
‾
x
(
i
)
)
=
0
=> \sum ^{m}_{i=1}(y^{(i)} x^{(i)} -\overline {y} x^{(i)}) -\ \theta_1\sum ^{m}_{i=1}((x^{(i)})^2 - \ \overline{x} x^{(i)}) =0
=>i=1∑m(y(i)x(i)−yx(i))− θ1i=1∑m((x(i))2− xx(i))=0
θ
1
=
∑
i
=
1
m
(
y
(
i
)
x
(
i
)
−
y
‾
x
(
i
)
)
∑
i
=
1
m
(
(
x
(
i
)
)
2
−
x
‾
x
(
i
)
)
\theta_1 = \frac{\sum ^{m}_{i=1}(y^{(i)} x^{(i)} -\overline {y} x^{(i)})}{\sum ^{m}_{i=1}((x^{(i)})^2 - \ \overline{x} x^{(i)})}
θ1=∑i=1m((x(i))2− xx(i))∑i=1m(y(i)x(i)−yx(i))
此式还可继续化简
对于项
∑
i
=
1
m
y
‾
x
(
i
)
\sum ^{m}_{i=1}\overline{y} x^{(i)}
∑i=1myx(i):
=
m
y
‾
x
‾
=
x
‾
∑
i
=
1
m
y
(
i
)
=
∑
i
=
1
m
y
‾
x
‾
= m\overline{y}\ \overline{x} = \overline{x}\sum ^{m}_{i=1}y^{(i)} = \sum ^{m}_{i=1}\overline{y}\ \overline{x}
=my x=xi=1∑my(i)=i=1∑my x
故这几项都可以互相转化,则有:
原
式
=
∑
i
=
1
m
(
y
(
i
)
x
(
i
)
−
y
‾
x
(
i
)
−
x
‾
y
(
i
)
+
x
‾
⋅
y
‾
)
∑
i
=
1
m
(
(
x
(
i
)
)
2
−
x
‾
x
(
i
)
)
−
x
‾
x
(
i
)
+
x
‾
2
)
原式 = \frac{\sum ^{m}_{i=1}(y^{(i)} x^{(i)} -\overline {y} x^{(i)}-\overline{x}y^{(i)} + \overline{x}·\overline{y})}{\sum ^{m}_{i=1}((x^{(i)})^2 - \ \overline{x} x^{(i)})-\overline{x}x^{(i)}+\overline{x}^2)}
原式=∑i=1m((x(i))2− xx(i))−xx(i)+x2)∑i=1m(y(i)x(i)−yx(i)−xy(i)+x⋅y)
=
∑
i
=
1
m
(
x
(
i
)
−
x
‾
)
(
y
(
i
)
−
y
‾
)
∑
i
=
1
m
(
x
(
i
)
−
x
‾
)
2
=\frac{\sum ^{m}_{i=1}(x^{(i)}-\overline{x})(y^{(i)}-\overline{y})}{\sum ^{m}_{i=1}(x^{(i)} - \ \overline{x})^2}
=∑i=1m(x(i)− x)2∑i=1m(x(i)−x)(y(i)−y)
综上,可得结论:
θ
1
=
∑
i
=
1
m
(
x
(
i
)
−
x
‾
)
(
y
(
i
)
−
y
‾
)
∑
i
=
1
m
(
x
(
i
)
−
x
‾
)
2
\theta_1 = \frac{\sum ^{m}_{i=1}(x^{(i)}-\overline{x})(y^{(i)}-\overline{y})}{\sum ^{m}_{i=1}(x^{(i)} - \ \overline{x})^2}
θ1=∑i=1m(x(i)− x)2∑i=1m(x(i)−x)(y(i)−y)
θ
0
=
y
‾
−
θ
1
x
‾
\theta_0 = \overline {y} \ - \ \theta_1 \overline{x}
θ0=y − θ1x
MATLAB实现:
a = polyfit(x, y, 1);
h = polyval(a,x,1);
plot(x,y,'*',x,h,'-');
polyfit(x, y, n)是matlab中用于曲线拟合的函数,其原理就是最小二乘法。第三个参数代表拟合的阶数。
函数返回的是一个行矩阵:
[
θ
n
,
θ
n
−
1
,
θ
n
−
2
,
.
.
.
,
θ
0
]
[ \theta_n,\ \theta_{n-1},\ \theta_{n-2},.. .\ ,\theta_0]
[θn, θn−1, θn−2,... ,θ0]
梯度下降
梯度下降是一个用来求函数最小值的算法,我们可以使用梯度下降算法来求出代价函数 J ( θ 0 , θ 1 ) J(\theta_0,\theta_1) J(θ0,θ1)的最小值。
梯度下降的思想是:
开始时我们随机选择一个参数的组合(?0,?1,…,??),计算代价函数,然后我们寻找下一个能让代价函数值下降最多的参数组合(即梯度)。我们持续这么做直到到到一个局部最小值(local minimum)。因为我们并没有尝试完所有的参数组合,所以不能确定我们得到的局部最小值是否便是全局最小值(global minimum).选择不同的初始参数组合,可能会找到不同的局部最小值。
批量梯度下降(Batch gradient descent)的算法如下:
r
e
p
e
a
t
u
n
t
i
l
c
o
n
v
e
r
g
e
n
c
e
{
repeat\ until\ convergence\ \{ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \
repeat until convergence {
θ
j
:
=
θ
j
−
α
∂
∂
θ
j
J
(
θ
0
,
θ
1
)
f
o
r
j
=
0
a
n
d
1
\theta_j := \theta_j - \alpha \frac{\partial}{\partial \theta_j}J(\theta_0, \theta_1) \ \ \ for \ j = 0\ and \ 1
θj:=θj−α∂θj∂J(θ0,θ1) for j=0 and 1
}
\}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \
}
其中α是学习率(learning rate),又可以说是步长,决定了我们沿着能让代价函数下降程度最大的方向迈出的步子有多大。
- α的值不能取得太大,否则有很大可能“错过极小值”,无法收敛,甚至发散。但也不能太小,否则迭代次数会很大,影响效率
- 实际上,在梯度下降法中,当接近局部最低点时,梯度下降法会自动采取更小的
幅度。这是因为当我们接近局部最低点时,很显然在局部最低时导数等于零,所以当我们接
近局部最低时,导数值会自动变得越来越小,所以梯度下降将自动采取较小的幅度,所以我们没有必要在过程中另外再减少α的值
梯度下降的线性回归
将梯度下降应用到刚刚的代价函数上,求其最小值。
∂
J
∂
θ
0
=
1
2
m
∑
i
=
1
m
2
(
y
(
i
)
−
θ
1
x
(
i
)
−
θ
0
)
(
−
1
)
\frac{\partial J} {\partial \theta_0} = \frac {1}{2m} \sum ^{m}_{i=1}2(y^{(i)} - \theta_1x^{(i)} - \theta_0)(-1)
∂θ0∂J=2m1i=1∑m2(y(i)−θ1x(i)−θ0)(−1)
∂
J
∂
θ
1
=
1
2
m
∑
i
=
1
m
2
(
y
(
i
)
−
θ
1
x
(
i
)
−
θ
0
)
(
−
x
(
i
)
)
\frac{\partial J} {\partial \theta_1} = \frac {1}{2m}\sum ^{m}_{i=1}2(y^{(i)} - \theta_1x^{(i)} - \theta_0)(-x^{(i)})
∂θ1∂J=2m1i=1∑m2(y(i)−θ1x(i)−θ0)(−x(i))
故梯度下降算法可写成:
R
e
p
e
a
t
{
Repeat\{ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \
Repeat{
θ
0
:
=
θ
0
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
\theta_0 := \theta_0 - \alpha \frac {1}{m} \sum ^{m}_{i=1}(h_\theta(x^{(i)})-y^{(i)})
θ0:=θ0−αm1i=1∑m(hθ(x(i))−y(i))
θ
1
:
=
θ
1
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
⋅
x
(
i
)
\theta_1 := \theta_1 - \alpha \frac {1}{m} \sum ^{m}_{i=1}(h_\theta(x^{(i)})-y^{(i)})·x^{(i)}
θ1:=θ1−αm1i=1∑m(hθ(x(i))−y(i))⋅x(i)
}
\}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \
}
这个名字”批量梯度下降”,指的是在梯度下降的每一步中,我们都用到了所有的训练样本。在梯度下降中,在计算微分求导项时,我们需要进行求和运算,所以,在每一个单独的梯度下降中,我们最终都要对所有?个训练样本求和。因此,批量梯度下降法这个名字说明了我们需要考虑所有这一"批"训练样本。而事实上,有时也有其他类型的梯度下降法,不是这种"批量"型的,不考虑整个的训练集,而是每次只关注训练集中的一些小的子集。