[4-1]-线性回归模型

线性回归模型

线性回归

概述
  • 一种被广泛应用的回归技术
  • 机器学习里面最简单的一个模型
  • 本质是一系列特征的线性组合
  • 可以视为
    (1)二维空间中的一条直线
    (2)三维空间中的一个平面

线性回归最普通的形式是:
f ( x ) = w ′ x + b f(x)=w'x+b f(x)=wx+b
其中,向量x即{ x 1 , x 2 , x 3 , . . . , x n x_1,x_2,x_3,...,x_n x1,x2,x3,...,xn},其中, x 1 , x 2 , x 3 x_1,x_2,x_3 x1,x2,x3代表样本的各个特征, w w w是向量 x x x所占的权重,b是一个标量代表特征都为0时的预测值,可以视为模型的basis或者bias。
这里的 W W W乘以 x x x在线性代数中称作两个向量的内积(也称向量的点乘或者向量的数量积),假设 w w w x x x均为列向量,即代表了代表了 w w w x x x向量的内积 w ′ x w'x wx。这里的 x x x也可以是一个矩阵 X X X w w w X X X也可以写成 w ′ X w'X wX,但是 b b b也要相应的写为向量的形式。

线性回归示例
# w是列向量,矩阵是由一个个列向量构成,y=dot(w_t,X)+b
import numpy as np
w_t,b=np.array([1,2,3,4,5]),1
X=np.array([[1,1,1,1,1],[1,2,3,4,5],[1,4,5,6,6]]).T
y_hat=np.dot(w_t,X)+b
w_t
array([1, 2, 3, 4, 5])
X
array([[1, 1, 1],
       [1, 2, 4],
       [1, 3, 5],
       [1, 4, 6],
       [1, 5, 6]])
y_hat
array([16, 56, 79])
损失函数

线性回归模型的困难之处在于 w w w b b b的求解。
李航老师的《统计学习方法》中把一个学习过程分为了三部分:模型、策略、算法,为了求解 w w w b b b,我们需要指定一定的策略,而这个策略在机器学习的领域中,往往描述为真实值与回归值得偏差。
l o s s = ( f ( x ) − y ) 2 loss=(f(x)-y)^2 loss=(f(x)y)2
我们追求的是能够减少在测试集上的预测值 f ( x ) f(x) f(x)与真实值 y y y的差别,从而获得一个最佳的权重参数 w w w。这里采用最小二乘估计

注意:最小方差无偏估计最小二乘估计是不一样的,最直观的区别是最小二乘估计表示的是估计点与真实点的区别,而最小方差无偏估计表示的是估计点与真实数据期望的差别。

损失函数示例
y=np.array([1.5,3,6])
loss=(y_hat-y)**2
y
array([1.5, 3. , 6. ])
loss
array([ 210.25, 2809.  , 5329.  ])
优化方法

怎样调整 w w w才能使估计值与真实值的差别尽可能小呢?
常用的两种凸优化方法
+ 最小二乘优化
+ 梯度下降优化

最小二乘

最小二乘优化的思路是线性代数中的矩阵求导(复习一下导数:导数为0的点就是极值点,也就是使loss最大或最小的点(实际上是最小的点,因为loss一般是一个往下凸的函数, w w w无限大的时候,随便带进去一个值估计出来的loss都很大))

所以,任务转化为,求解 d ( w ′ X + b − y ) 2 d w = 0 \frac{d(w'X+b-y)^2}{dw}=0 dwd(wX+by)2=0 的数学问题
–> 2 ( w ′ X − y ) X T = 0 2(w'X-y)X^T=0 2(wXy)XT=0
–> w ′ X X T = y X T w'XX^T=yX^T wXXT=yXT
–> w ′ = ( y X T ) ( X X T ) − 1 w'=(yX^T)(XX^T)^{-1} w=(yXT)(XXT)1(如果 X X T XX^T XXT可逆)

w_t=np.dot(np.dot(y,X.T),np.linalg.inv(np.dot(X,X.T)))
w_t
array([-1.75  , -1.25  , 20.25  ,  7.5   , 11.4375])
梯度下降

梯度下降的策略与最小二乘优化不同,它采用的不是用数据方法一步求出解析解,而是一步一步的往让loss变到最小值的方向走,直到走到那个点。

为了说明方向的确定,我们引入梯度的概念。

The gradient points in the direction of the greatest rate of increse of the function,and its magnitude is the slope of the graph in that direction.—Wikipedia

梯度方向就是增长最快的方向,如果我们想要函数值减小,只需要沿着负梯度方向走就行了。具体求这个梯度(grad)的方法以一言以蔽之:对loss求偏导(参考《数学优化方法》)

具体来说,

g r a d = 2 ( w ′ X − y ) X T grad=2(w'X-y)X^T grad=2(wXy)XT

之后沿着这个方向走一小步

w < − − w + 0.1 ∗ g r a d w<--w+0.1*grad w<w+0.1grad

然后再重复求偏导–>走–>求偏导–>走,就可以得到最终的权重向量 w w w

注意:对于一个连续可导的函数而言,越靠近我们想要的那个极值点的地方,它的梯度就越小。类比场景:蚁人在浴缸里走的时候,浴缸边缘陡峭,中间平缓,故在实现的时候,只需要在走的很慢的时候(梯度小)停下。

while True:
    grad=np.dot((np.dot(w_t,X)-y),X.T)
    w_t-=0.1*grad
    if np.linalg.norm(w_t,ord=2)<1e-3:
        break
备注

linalg = linear(线性) + algebra(代数);
norm 表示范数

+1e-3表示1*10^-3,即0.001
注:阶码标志’E’或’e’之前必须有数字。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值