【机器学习】梯度下降法求解线性回归参数
梯度下降法求解线性回归参数对于一元线性函数:y(x,w)=w0+w1xy ( x , w ) = w _ { 0 } + w _ { 1 } xy(x,w)=w0+w1x定义其平方损失函数为:f=∑i=1n(yi−(w0+w1xi))2f = \sum _ { i = 1 } ^ { n } \left( y _ { i } - \left( w _ { 0 } + w _ { 1 } x _
对于一元线性函数:
y(x,w)=w0+w1x y ( x , w ) = w _ { 0 } + w _ { 1 } x y(x,w)=w0+w1x
定义其平方损失函数为:
f=∑i=1n(yi−(w0+w1xi))2 f = \sum _ { i = 1 } ^ { n } \left( y _ { i } - \left( w _ { 0 } + w _ { 1 } x _ { i } \right) \right) ^ { 2 } f=i=1∑n(yi−(w0+w1xi))2
接下来,求平方损失函数 1 阶偏导数:
∂f∂w0=−2∑i=1n(yi−(w0+w1xi)) \frac { \partial f } { \partial w _ { 0 } } = - 2 \sum _ { i = 1 } ^ { n } \left( y _ { i } - \left( w _ { 0 } + w _ { 1 } x _ { i } \right) \right) ∂w0∂f=−2i=1∑n(yi−(w0+w1xi))
∂f∂w1=−2∑i=1nxi(yi−(w0+w1xi)) \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) ∂w1∂f=−2i=1∑nxi(yi−(w0+w1xi))
当使用最小二乘法时,我们令 ∂f∂w0=0\frac{\partial f}{\partial w_{0}}=0∂w0∂f=0 以及 ∂f∂w1=0\frac{\partial f}{\partial w_{1}}=0∂w1∂f=0,但是梯度下降法求解参数:
w0=w0−lr∗∂f∂w0 w _ { 0 } = w _ { 0 } - l r * \frac { \partial f } { \partial w _ { 0 } } w0=w0−lr∗∂w0∂f
w1=w1−lr∗∂f∂w1 w _ { 1 } = w _ { 1 } - l r * \frac { \partial f } { \partial w _ { 1 } } w1=w1−lr∗∂w1∂f
其中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.264∗x+0.038
线性回归方法之所以使用普通最小二乘法来求解,是因为我们可以很方便地求出损失函数的最小值。但是,机器学习中的很多问题,往往会面对非常复杂的损失函数,这些损失函数一般无法直接求得最小值,只能使用迭代方法来求取局部或全局极小值。这也就是我们学习梯度下降等迭代方法的原因。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)