线性回归

线性回归

线性回归试图学得一个线性模型以尽可能准确地预测实值输出标记;

1、模型

其向量形式:

f(x)=WTx+b f ( x ) = W T ∗ x + b

2、策略

下面将使用最简单的形式来分析线性回归:
y=wx+b y = w ∗ x + b

1、绝对值损失函数

Loss=|y0y|={y0y,yy0,y0>yy0y L o s s = | y 0 − y ′ | = { y 0 − y ′ , y 0 > y ′ y ′ − y 0 , y 0 ≤ y ′

y0>y y 0 > y ′ 为例,对参数w,b进行导数:

dErrordw=y0wx0bdw=x0 d E r r o r d w = y 0 − w ∗ x 0 − b d w = − x 0

dErrordb=y0wx0bdb=1 d E r r o r d b = y 0 − w ∗ x 0 − b d b = − 1


根据梯度下降进行更新参数w,b:
w=w(x0)=w+x0 w = w − ( − x 0 ) = w + x 0

b=b(1)=b+1 b = b − ( − 1 ) = b + 1

由上述的更新函数可知,参数w的变化量与 x0 x 0 的值有关,当 x0 x 0 的值很大时,w的变化也很大,这时就有可能会出现梯度爆炸;参数b的变化量是一个固定值1,但如果b本来就很小,那1相对于b来说也是一个大值,因此也有可能会出现梯度爆炸;为解决梯度爆炸的问题,需要添加一个学习率 λ λ λ λ 值不能太小,不然会出现梯度消失的情况。

最终得到更新函数:
y=(w+λx0)x+(b+λ) y = ( w + λ ∗ x 0 ) ∗ x + ( b + λ )

2、平方损失函数

Loss=12(y0y)2 L o s s = 1 2 ( y 0 − y ′ ) 2

注:为什么会有个 12 1 2 的系数?为了在导数后消除系数。

对参数w,b进行导数:
dErrordw=d12(y0wx0b)2dw=122(y0wx0b)(x0)=(y0y)x0 d E r r o r d w = d 1 2 ( y 0 − w ∗ x 0 − b ) 2 d w = 1 2 ∗ 2 ∗ ( y 0 − w ∗ x 0 − b ) ∗ ( − x 0 ) = − ( y 0 − y ′ ) ∗ x 0

dErrordb=d12(y0wx0b)2db=122(y0wx0b)(1)=(y0y) d E r r o r d b = d 1 2 ( y 0 − w ∗ x 0 − b ) 2 d b = 1 2 ∗ 2 ∗ ( y 0 − w ∗ x 0 − b ) ∗ ( − 1 ) = − ( y 0 − y ′ )


根据梯度下降进行更新参数w,b:
w=wλ((y0y)x0)=w+λx0(y0y) w = w − λ ( − ( y 0 − y ′ ) ∗ x 0 ) = w + λ ∗ x 0 ∗ ( y 0 − y )
b=bλ((y0y))=b+λ(y0y) b = b − λ ( − ( y 0 − y ′ ) ) = b + λ ∗ ( y 0 − y )


最终得到更新函数:
y=(w+λx0(y0y))x+(b+λ(y0y)) y = ( w + λ ∗ x 0 ∗ ( y 0 − y ) ) ∗ x + ( b + λ ∗ ( y 0 − y ) )

3、算法

以平方损失函数、小批量梯度下降为例:
1、随机初始化参数w、b值;
2、计算损失函数:

Loss=1mi=1m(y0y)2 L o s s = 1 m ∑ i = 1 m ( y 0 − y ′ ) 2

3、更新参数:
ww+λ1mi=1m(x0(y0y)) w ← w + λ ∗ 1 m ∑ i = 1 m ( x 0 ∗ ( y 0 − y ) )

bb+λ1mi=1m(y0y) b ← b + λ ∗ 1 m ∑ i = 1 m ( y 0 − y )

4、重复2、3、4步,直到w、b的变化量均小于阀值(该阀值在sklearn内部框架中已经设定,不需要手工操作)。

4、小批量梯度下降

随机梯度下降:逐个地在每个数据点应用平方(或绝对)误差,并重复这一流程很多次。

批量梯度下降:同时在每个数据点应用平方(或绝对)误差,并重复这一流程很多次。

以上两种方法在实际运用中不常用,因为,如果你的数据十分庞大,两种方法的计算速度都将会很缓慢。线性回归的最佳方式是将数据拆分成很多小批次。每个批次都大概具有相同数量的数据点。然后使用每个批次更新权重。这种方法叫做小批次梯度下降法

5、绝对损失函数VS平方损失函数

如上图,A、B、C三条直线的绝对损失函数一样,其中B的平方损失函数最低。

6、scikit-learn中的线性回归

from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(x_values, y_values)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值