以房价为例:
θ 0 , θ 1 θ_0,θ_1 θ0,θ1为参数,我们需要找到合适的 θ 0 , θ 1 θ_0,θ_1 θ0,θ1,使得我们的预测结果更为准确,换言之就是使 h ( x i ) − y i h(x^i)-y^i h(xi)−yi的值尽可能的接近0。不难想到,我们需要求出合适的 θ 0 , θ 1 θ_0,θ_1 θ0,θ1,使 1 2 m ∑ 1 m ( h ( x i ) − y i ) 2 \frac1{2m}\sum_1^m(h(x^i)-y^i)^2 2m1∑1m(h(xi)−yi)2尽可能小(差的平方和最小)。我们将此称之为代价函数(误差函数),记作J( θ 0 , θ 1 θ_0,θ_1 θ0,θ1)= 1 2 m ∑ i = 1 m ( h ( x i ) − y i ) 2 \frac1{2m}\sum_{i=1}^m(h(x^i)-y^i)^2 2m1i=1∑m(h(xi)−yi)2在这里,我们要求出 θ 0 , θ 1 θ_0,θ_1 θ0,θ1,可以使用梯度下降算法。
梯度下降算法:首先给定 θ 0 , θ 1 θ_0,θ_1 θ0,θ1初始值,一般都取为0。显然,此时的J( θ 0 , θ 1 θ_0,θ_1 θ0,θ1)未取到最小值。因此,改变 θ 0 , θ 1 θ_0,θ_1 θ0,θ1的值,使得J( θ 0 , θ 1 θ_0,θ_1 θ0,θ1)的值不断变化,直到取到最小值或局部最小值。此处,我们直接给出梯度下降算法中θ的更新公式: θ j = θ j − α ∂ J ( θ 0 , θ 1 ) ∂ θ j θ_j=θ_j-α\frac{\partial J(θ_0,θ_1)}{\partial θ_j} θj=θj−α∂θj∂J(θ0,θ1)(j=0,1),此处的α称为学习率,这个参数决定了 θ 0 , θ 1 θ_0,θ_1 θ0,θ1改变的快慢(这个公式在NG的视频里已经讲得很清楚了,在这边写下来也比较麻烦,就不赘述了)。需要注意的是, θ 0 , θ 1 θ_0,θ_1 θ0,θ1这两个参数在更新时要同步更新,即取临时参数
将J( θ 0 , θ 1 θ_0,θ_1 θ0,θ1)= 1 2 m ∑ i = 1 m ( h ( x i ) − y i ) 2 \frac1{2m}\sum_{i=1}^m(h(x^i)-y^i)^2 2m1i=1∑m(h(xi)−yi)2和 h ( x i ) = θ 0 + θ 1 x i h(x_i)=θ_0+θ_1x_i h(xi)=θ0+θ1xi带入上式,求出偏导数,则
类似的,以房价为例:
面积 | 卧室 | 楼层 | 房屋年龄 | 价格 |
---|---|---|---|---|
100 | 2 | 8 | 20 | 150 |
120 | 2 | 14 | 30 | 200 |
200 | 3 | 24 | 25 | 400 |
… | … | … | … | … |
为了方便表达,对于 h ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 3 + . . . + θ n x n h(x)=θ_0+θ_1x_1+θ_2x_2+θ_3x_3+...+θ_nx_n h(x)=θ0+θ1x1+θ2x2+θ3x3+...+θnxn,我们可认为还存在 x 0 x_0 x0=1,则 h ( x ) = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 3 + . . . + θ n x n h(x)=θ_0x_0+θ_1x_1+θ_2x_2+θ_3x_3+...+θ_nx_n h(x)=θ0x0+θ1x1+θ2x2+θ3x3+...+θnxn,因此, x 0 ( i ) x^{(i)}_0 x0(i)=1,即对于任意样本中, x 0 x_0 x0都为1。此时,
取X= (4) [ x 0 x 1 x 2 . . . x n ] \begin{bmatrix} x_0 \\ x_1 \\ x_2\\ .\\ .\\ .\\ x_n \end{bmatrix} \tag{4} ⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡x0x1x2...xn⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤(4)
取θ= (4) [ θ 0 θ 1 θ 2 . . . θ n ] \begin{bmatrix} θ_0 \\ θ_1 \\ θ_2\\ .\\ .\\ .\\ θ_n \end{bmatrix} \tag{4} ⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡θ0θ1θ2...θn⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤(4)
则h(x)= θ T X θ^TX θTX。
类似的,我们可以得出h(x)= θ T X = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 3 + . . . + θ n x n θ^TX=θ_0x_0+θ_1x_1+θ_2x_2+θ_3x_3+...+θ_nx_n θTX=θ0x0+θ1x1+θ2x2+θ3x3+...+θnxn,代价函数J(θ)= J ( θ 0 , θ 1 . . . θ n ) J(θ_0,θ_1...θ_n) J(θ0,θ1...θn)= 1 2 m ∑ i = 1 m ( h ( x i ) − y i ) 2 \frac1{2m}\sum_{i=1}^m(h(x^i)-y^i)^2 2m1i=1∑m(h(xi)−yi)2 θ的更新公式为 θ j = θ j − α ∂ J ( θ ) ∂ θ j = θ j − α θ_j=θ_j-α\frac{\partial J(θ)}{\partial θ_j}=θ_j-α θj=θj−α∂θj∂J(θ)=θj−α 1 m ( h θ ( x i ) − y i ) ∗ x j ( i ) \frac1m(h_θ(x^i)-y^i)*x^{(i)}_j m1(hθ(xi)−yi)∗xj(i)(同步更新)。
在处理不同的、大量的数据时,这些数据的范围可以大不相同。为了使梯度下降的过程更快速并使预测结果尽可能准确,我们可以通过对特征值进行特征缩放(归一化),将特征值都映射到某一小区间内,如[-1,1]。例如: x 1 x_1 x1的范围是0~1000,则对 x 1 x_1 x1的缩放可以作如下处理: x 1 x_1 x1= x 1 − μ 1 m a x − m i n \frac{x_1-μ_1}{max-min} max−minx1−μ1(其中 μ 1 μ_1 μ1为样本x的均值,max和min分别为样本的最大值和最小值)。
对于实际中的某些数据集,其实直线并不能很好的拟合这些数据。此时,这根据具体情况选择合适的模型,例如二次函数,三次函数等等。常见的处理模型: h ( x ) = θ 0 + θ 1 x h(x)=θ_0+θ_1x h(x)=θ0+θ1x, h ( x ) = θ 0 + θ 1 x + θ 2 x 2 h(x)=θ_0+θ_1x+θ_2x^2 h(x)=θ0+θ1x+θ2x2, h ( x ) = θ 0 + θ 1 x + θ 2 x 2 + θ 3 x 3 h(x)=θ_0+θ_1x+θ_2x^2+θ_3x^3 h(x)=θ0+θ1x+θ2x2+θ3x3, h ( x ) = θ 0 + θ 1 x + θ 2 x h(x)=θ_0+θ_1x+θ_2\sqrt{x} h(x)=θ0+θ1x+θ2x。在实际应用中,我们需要从合适的角度寻找特征,找到更符合数据的模型。
在上面讲述的线性回归中,我们需要通过梯度下降,不断迭代,求出θ的值,使得代价函数J(θ)最小。在这里,我们介绍一种更简单的方法来求得θ。
首先,我们需构建一个矩阵X,称之为设计矩阵(包含了样本的所有特征值)。X= (4) [ ( x ( 1 ) ) T ( x ( 2 ) ) T . . . ( x ( m ) ) T ] \begin{bmatrix} (x^{(1)}) ^T \\ (x^{(2)}) ^T \\ .\\ .\\ .\\ (x^{(m)}) ^T \end{bmatrix} \tag{4} ⎣⎢⎢⎢⎢⎢⎢⎡(x(1))T(x(2))T...(x(m))T⎦⎥⎥⎥⎥⎥⎥⎤(4)
X为m*(n+1)维矩阵。
另y= (4) [ y 0 y 1 . . . y n ] \begin{bmatrix} y^0 \\ y^1 \\ .\\ .\\ .\\ y^n \end{bmatrix} \tag{4} ⎣⎢⎢⎢⎢⎢⎢⎡y0y1...yn⎦⎥⎥⎥⎥⎥⎥⎤(4)
举个具体的例子,当前数据集如下表(共有4个输入)
面积 | 卧室 | 楼层 | 房屋年龄 | 价格 |
---|---|---|---|---|
100 | 2 | 8 | 20 | 150 |
120 | 2 | 14 | 30 | 200 |
200 | 3 | 24 | 25 | 400 |
150 | 2 | 5 | 12 | 300 |
为每一个样本添加 x 0 ( i ) = 1 x^{(i)}_0=1 x0(i)=1
x 0 x_0 x0 | 面积 | 卧室 | 楼层 | 房屋年龄 | 价格 |
---|---|---|---|---|---|
1 | 100 | 2 | 8 | 20 | 150 |
1 | 120 | 2 | 14 | 30 | 200 |
1 | 200 | 3 | 24 | 25 | 400 |
1 | 150 | 2 | 5 | 12 | 300 |
则设计矩阵X= [ 1 , 100 , 2 , 8 , 20 1 , 120 , 2 , 14 , 30 1 , 200 , 3 , 24 , 25 1 , 150 , 2 , 5 , 12 ] \begin{bmatrix} 1,100,2,8,20\\ 1,120,2,14,30\\ 1,200,3,24,25\\ 1,150,2,5,12 \end{bmatrix} ⎣⎢⎢⎡1,100,2,8,201,120,2,14,301,200,3,24,251,150,2,5,12⎦⎥⎥⎤
y= (4) [ 150 200 400 300 ] \begin{bmatrix} 150 \\ 200 \\ 400\\ 300 \end{bmatrix} \tag{4} ⎣⎢⎢⎡150200400300⎦⎥⎥⎤(4)
则θ= ( X T X ) − 1 X T y (X^TX)^{-1}X^Ty (XTX)−1XTy(尚未推导),通过此公式求出的θ可使得代价函数J(θ)最小化。而且,在用正规方程时,无需对数据集进行特征缩放。
对于线性回归这一特定模型,我们可以使用梯度下降法或正规方程。下面将对两者有一个简单的比较。
一般来说,当n<10000时,可选择正规方程;当n>10000时,选择梯度下降法。