玩一玩梯度下降可视化

玩一玩梯度下降可视化

如果你只会调包,只会import sklearn,本文想让你更进一步,真正动手实现机器学习的算法。发明这些算法的人当然很厉害,但技术就是技术,不会由于过于神秘而不可触碰。既然学了机器学习,为什么不能自己实现算法,那些开源的库,不也是从空白的文件写起的吗?只要你了解部分以下内容,就可以畅通无阻地阅读本文:

  • 识别英文单词
  • Python简单语法,numpy简单语法
  • 简单的加减乘除,简单的微积分常识

本文探索各种各样梯度下降的运行过程,观察参数变化的规律,以求获得更深的理解。你可以复制我的代码,改改数字,看看算法是怎样运行的,play around & have fun。

本文md源码地址:AnBlogs

本文使用简单的一元线性回归模型举例子,以求简单, y ^ = θ x + b \hat y = \theta x+b y^=θx+b,损失函数和梯度为:
L ( θ , b ) = 1 2 ( θ x + b − y ) 2 , ∂ L ∂ θ = ( θ x + b − y ) x , ∂ L ∂ b = θ x + b − y L(\theta,b)=\frac{1}{2}(\theta x+b-y)^2,\frac{\partial L}{\partial \theta}=(\theta x+b-y)x,\frac{\partial L}{\partial b}=\theta x+b-y L(θ,b)=21(θx+by)2,θL=(θx+by)x,bL=θx+by
如果你对线性回归不了解,且对其有兴趣,请看:线性回归

使用的数据

准备工作

为了让模型尽量简单,减少运行时间,我使用了人造的数据。产生数据的代码如下:

X = np.arange(0, 100, 1.0)
y = X * 4

就是简单的 y = 4 x y=4x y=4x x x x [ 0 , 100 ) [0,100) [0,100)之间取值。

为了记录算法运行的过程,准备两个数组,记录每次循环得到的参数值 θ , b \theta,b θ,b

theta_time = []
bias_time = []

可以画出参数经过的轨迹:

plt.plot(theta_time, bias_time)
plt.show()

标准模型试一下

先使用sklearn的线性回归工具试一下,让心里踏实点。几行代码就能实现:

from sklearn import linear_model
lr = linear_model.LinearRegression()
lr.fit(X.reshape(-1,1), y)
lr.coef_, lr.intercept_

得到的结果:

(array([4.]), 0.0)

确实符合预期,非常精确。sklearn永远滴神!

各种梯度下降尝试

初始化

先初始化参数 θ , b \theta,b θ,b,暂时初始化为0。

theta = 0
bias = 0

学习率暂时初始化为1e-6

rate =
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值