线性回归

线性回归

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

1、模型

其向量形式:

f(x)=WTx+bf(x)=WT∗x+b

2、策略

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

1、绝对值损失函数

Loss=|y0y|={y0y,yy0,y0>yy0yLoss=|y0−y′|={y0−y′,y0>y′y′−y0,y0≤y′

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

dErrordw=y0wx0bdw=x0dErrordw=y0−w∗x0−bdw=−x0

dErrordb=y0wx0bdb=1dErrordb=y0−w∗x0−bdb=−1


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

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

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

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

2、平方损失函数

Loss=12(y0y)2Loss=12(y0−y′)2

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

对参数w,b进行导数:
dErrordw=d12(y0wx0b)2dw=122(y0wx0b)(x0)=(y0y)x0dErrordw=d12(y0−w∗x0−b)2dw=12∗2∗(y0−w∗x0−b)∗(−x0)=−(y0−y′)∗x0

dErrordb=d12(y0wx0b)2db=122(y0wx0b)(1)=(y0y)dErrordb=d12(y0−w∗x0−b)2db=12∗2∗(y0−w∗x0−b)∗(−1)=−(y0−y′)


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


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

3、算法

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

Loss=1mi=1m(y0y)2Loss=1m∑i=1m(y0−y′)2

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

bb+λ1mi=1m(y0y)b←b+λ∗1m∑i=1m(y0−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、付费专栏及课程。

余额充值