回归(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),分别对应于截距和斜率。我们所要做的是选择合适的参数使其最大程度地拟合我们的数据。
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)
最小二乘法是一种对该问题的最优化方法。
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)
} \}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }
这个名字”批量梯度下降”,指的是在梯度下降的每一步中,我们都用到了所有的训练样本。在梯度下降中,在计算微分求导项时,我们需要进行求和运算,所以,在每一个单独的梯度下降中,我们最终都要对所有?个训练样本求和。因此,批量梯度下降法这个名字说明了我们需要考虑所有这一"批"训练样本。而事实上,有时也有其他类型的梯度下降法,不是这种"批量"型的,不考虑整个的训练集,而是每次只关注训练集中的一些小的子集。