机器学习--线性回归

线性回归

引入

  我们在高中的时候都学过线性回归,在这我们回顾一下

  在高中的课程中,我们会被给得到一组 x m {x_m} xm 和一组 y m {y_m} ym,然后我们想用 h ( x ) = y ^ = a x + b h(x) = \hat{y} = ax + b h(x)=y^=ax+b 来拟合这组数据使得整体上 h ( x i ) ≈ y i h(x_i) \approx y_i h(xi)yi 也就是这样:

在这里插入图片描述

  而在高中教材中 a a a b b b 都给出的准确的计算式(其中 x ˉ \bar{x} xˉ y ˉ \bar{y} yˉ x m {x_m} xm y m {y_m} ym 的平均数):

b ^ = ∑ i = 1 m ( x i − x ˉ ) ( y i − y ˉ ) ∑ i = 1 m ( x i − x ˉ ) 2 = ∑ i = 1 m x i y i − m x ˉ y ˉ ∑ i = 1 m x i 2 − m x ˉ 2 a = y ˉ − b ^ x ˉ \begin{aligned} \hat{b} = & \frac{\sum\limits_{i = 1}^m(x_i - \bar{x})(y_i - \bar{y})}{\sum\limits_{i = 1}^m(x_i-\bar{x})^2} = \frac{\sum\limits_{i = 1}^mx_iy_i - m\bar{x}\bar{y}}{\sum\limits_{i = 1}^mx_i^2 - m\bar{x}^2} \\ a = & \bar{y} - \hat{b}\bar{x} \end{aligned} b^=a=i=1m(xixˉ)2i=1m(xixˉ)(yiyˉ)=i=1mxi2mxˉ2i=1mxiyimxˉyˉyˉb^xˉ

  而在机器学习中,我们希望计算机通过某种算法学习出一组 a , b a, b a,b,使得这条直线满足上述要求。

进入正题

  在我们要解决的线性回归问题中,我们不仅不能使用上述已知的表达式解,我们还可以将维度升高。比如我们的数组 x m {x_m} xm 中的每个 x ( i ) x^{(i)} x(i) 不再是一个标量,而是一个 n n n 维的向量,同理我们的 w ( i ) w^{(i)} w(i) 也是一个 n n n 维的向量:

x ( i ) = [ x 1 ( i ) x 2 ( i ) ⋮ x n ( i ) ]              w = [ w 1 ( i ) w 2 ⋮ w n ] x^{(i)} = \begin{bmatrix} x^{(i)}_1 \\ x^{(i)}_2 \\ \vdots \\ x^{(i)}_n \end{bmatrix} \;\;\;\;\;\; w = \begin{bmatrix} w^{(i)}_1 \\ w_2 \\\vdots \\ w_n \end{bmatrix} x(i)= x1(i)x2(i)xn(i) w= w1(i)w2wn

  然后我们就要用我们构造出来的 h ( x ( i ) ) h(x^{(i)}) h(x(i)) 来拟合 y ( i ) y^{(i)} y(i)

y ^ = h ( x ( i ) ) = ∑ j = 1 n w j x j ( i ) + b = w T x ( i ) + b \hat{y} = h(x^{(i)}) = \sum_{j = 1}^n w_jx^{(i)}_j + b = w^Tx^{(i)} + b y^=h(x(i))=j=1nwjxj(i)+b=wTx(i)+b

  在这里,我们定义 J ( w , b ) = 1 2 m ∑ i = 1 m ( h ( x ( i ) ) − y ( i ) ) 2 J(w, b) = \frac 1{2m}\sum\limits_{i = 1}^m(h(x^{(i)}) - y^{(i)})^2 J(w,b)=2m1i=1m(h(x(i))y(i))2 叫做损失函数 c o s t    f u n c t i o n cost\;function costfunction,这个损失函数描述的是预测值 y ^ \hat{y} y^ 与真实值 y y y 的差异程度,上述表达式很好的符合这个定义。

  并且显然的,我们希望这个 J ( w , b ) J(w, b) J(w,b) 越小越好。当 J ( w , b ) J(w, b) J(w,b) 取到最小值时,我们认为 h ( x ) h(x) h(x) y y y 的拟合达到最完美。

梯度下降—最小化 J ( w , b ) J(w, b) J(w,b)

  我们觉得写成 h ( x ) = w T x + b h(x) = w^Tx + b h(x)=wTx+b 太丑了,所以我们考虑令 x 0 ( i ) = 1 x^{(i)}_0 = 1 x0(i)=1,并新增 w 0 w_0 w0 使得每个 x ( i ) x^{(i)} x(i) w w w 都变成一个 n + 1 n + 1 n+1 维的向量:

x ( i ) = [ x 0 ( i ) x 1 ( i ) x 2 ( i ) ⋮ x n ( i ) ]              w = [ w 0 w 1 ( i ) w 2 ⋮ w n ] x^{(i)} = \begin{bmatrix} x^{(i)}_0 \\ x^{(i)}_1 \\ x^{(i)}_2 \\ \vdots \\ x^{(i)}_n \end{bmatrix} \;\;\;\;\;\; w = \begin{bmatrix} w_0 \\ w^{(i)}_1 \\ w_2 \\\vdots \\ w_n \end{bmatrix} x(i)= x0(i)x1(i)x2(i)xn(i) w= w0w1(i)w2wn

  于是 h ( x ) = w T x h(x) = w^Tx h(x)=wTx 这样就好看多了qwq,并且此时 J ( w ) = 1 2 m ∑ i = 1 m ( h ( x ( i ) ) − y ( i ) ) 2 J(w) = \frac 1{2m}\sum\limits_{i = 1}^m(h(x^{(i)}) - y^{(i)})^2 J(w)=2m1i=1m(h(x(i))y(i))2

  我们想做的就是一下描述的事情:

  1. 开始时对 w w w 随机赋值
  2. 持续改变 w w w 的值,使得 J ( w ) J(w) J(w) 的值减小,直到我们最后走到期望的最小值

  然后这里我们介绍一种名为梯度下降 g r a d i e n t    d e s c e n t gradient \; descent gradientdescent 的算法来执行第二部,感性的理解就是在某一点找到 “下山” 的方向,并沿着这个方向走一步,并且重复这个动作知道走到 “山脚下”。

  具体来说就是每次计算 J ( w ) J(w) J(w) 对每个 w i w_i wi 的偏导数,然后执行:

f o r    i    r a n g e    f r o m    0    t o    n {                  w j : = w j − α ∂ ∂ w j J ( w ) } \begin{aligned} &for \; i \; range \; from \; 0 \; to \; n \{ \\ &\;\;\;\;\;\;\;\; w_j := w_j - \alpha \frac{\partial}{\partial w_j}J(w) \\ &\} \end{aligned} forirangefrom0ton{wj:=wjαwjJ(w)}

  其中 α \alpha α 是 步长 l e a r n i n g    r a t e learning \; rate learningrate,表示这一步的大小。

  这样看着可能不太直观,我们举个二维的例子更清晰的展示一下:

在这里插入图片描述

  这里,这个红色的曲线就是我们的 J ( w ) J(w) J(w)。我们在起点对 J ( w ) J(w) J(w) 求导,得到了蓝色的切线的斜率,这个斜率显然是个正数,于是我们沿着负方向走一步,这一步的大小取决于 α \alpha α

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值