【机器学习】梯度下降法求解线性回归参数

对于一元线性函数:
y ( x , w ) = w 0 + w 1 x y ( x , w ) = w _ { 0 } + w _ { 1 } x y(x,w)=w0+w1x

定义其平方损失函数为:
f = ∑ i = 1 n ( y i − ( w 0 + w 1 x i ) ) 2 f = \sum _ { i = 1 } ^ { n } \left( y _ { i } - \left( w _ { 0 } + w _ { 1 } x _ { i } \right) \right) ^ { 2 } f=i=1n(yi(w0+w1xi))2

接下来,求平方损失函数 1 阶偏导数:
∂ f ∂ w 0 = − 2 ∑ i = 1 n ( y i − ( w 0 + w 1 x i ) ) \frac { \partial f } { \partial w _ { 0 } } = - 2 \sum _ { i = 1 } ^ { n } \left( y _ { i } - \left( w _ { 0 } + w _ { 1 } x _ { i } \right) \right) w0f=2i=1n(yi(w0+w1xi))

∂ f ∂ w 1 = − 2 ∑ i = 1 n x i ( y i − ( w 0 + w 1 x i ) ) \frac { \partial f } { \partial w _ { 1 } } = -2 \sum _ { i = 1 } ^ { n } x _ { i } \left( y _ { i } - \left( w _ { 0 } + w _ { 1 } x _ { i } \right) \right) w1f=2i=1nxi(yi(w0+w1xi))
当使用最小二乘法时,我们令 ∂ f ∂ w 0 = 0 \frac{\partial f}{\partial w_{0}}=0 w0f=0 以及 ∂ f ∂ w 1 = 0 \frac{\partial f}{\partial w_{1}}=0 w1f=0,但是梯度下降法求解参数:
w 0 = w 0 − l r ∗ ∂ f ∂ w 0 w _ { 0 } = w _ { 0 } - l r * \frac { \partial f } { \partial w _ { 0 } } w0=w0lrw0f

w 1 = w 1 − l r ∗ ∂ f ∂ w 1 w _ { 1 } = w _ { 1 } - l r * \frac { \partial f } { \partial w _ { 1 } } w1=w1lrw1f

其中lr为学习率。

python实现:

def ols_gradient_descent(x, y, lr, num_iter):
    """
    参数:
    x -- 自变量数组
    y -- 因变量数组
    lr -- 学习率
    num_iter -- 迭代次数

    返回:
    w1 -- 线性方程系数
    w0 -- 线性方程截距项
    """
    w1=0#随机值
    w0=0
    for i in range(num_iter):#迭代
        y_=w0+w1*x
        w1 -= lr*(-2*sum(x*(y-y_)))
        w0 -= lr*(-2*sum(y-y_))
    return w1, w0

运行测试:

w1_, w0_ = ols_gradient_descent(x, y, lr=0.00001, num_iter=100)
round(w1_,3), round(w0_,3)

输出:(1.264, 0.038)

即为:
y = 1.264 ∗ x + 0.038 y=1.264∗x+0.038 y=1.264x+0.038
线性回归方法之所以使用普通最小二乘法来求解,是因为我们可以很方便地求出损失函数的最小值。但是,机器学习中的很多问题,往往会面对非常复杂的损失函数,这些损失函数一般无法直接求得最小值,只能使用迭代方法来求取局部或全局极小值。这也就是我们学习梯度下降等迭代方法的原因。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chaoql

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值