前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >机器学习入门 6-7 sklearn中的随机梯度下降法

机器学习入门 6-7 sklearn中的随机梯度下降法

作者头像
触摸壹缕阳光
发布2019-11-13 14:13:47
1K0
发布2019-11-13 14:13:47
举报

本系列是《玩转机器学习教程》一个整理的视频笔记。本小节主要介绍改进上一小节代码,封装自己的随机梯度下降法并应用,之后应用sklearn实现随机梯度下降法。

封装自己的随机梯度法

在上一小节中,介绍了通过随机梯度下降法来寻找损失函数最小值的策略。接下来将随机梯度法封装在我们自己的"LinearRegression"这个类中。下面的代码是参考上一小节在jupyter中的随机梯度下降法:

但是这里有了问题:

代码语言:javascript
复制
for cur_iter in range(n_iters):    rand_i = np.random.randint(m)    gradient = dJ_sgd(theta, X_b[rand_i], y[rand_i])    theta = theta - learning_rate(cur_iter) * gradient

上面代码中我们每次迭代都随机的选择样本,很可能有些样本被计算了很多遍,而有一些样本则可能一次都没有计算。正如上一小节,只查看三个之一样本数,这样显然是不科学的,更加科学的方式是把所有的样本都至少计算一遍,这样才能够保证所有的样本信息都被考虑进来了。所以我们针对性的进行两处改进:

  1. 当把所有样本都考虑进来的话,n_iters不在是循环迭代的次数,而是被定义成轮数,也就是遍历一遍样本的次数。比如此时n_iters设置为5(在sklearn中实现SGD时候默认为5),也就是将整个样本遍历5遍,相当于随机梯度下降法一共迭代了n_iters * 样本数量这么多。我们称n_iters为轮数;
  2. 如何保证每一轮所有样本都会被计算而且还能够保证随机呢?此时我们做两层循环,外层循环就是对n_iters进行循环,内层循环是对m个样本进行循环,为了保证每一轮都能计算所有样本并且具有随机性,可以对原始样本进行乱序排序,然后遍历乱序后的样本,这样做:
    1. 保证了每一轮将所有样本看一遍;
    2. 保证了随机性;

针对上面的两点,将代码做一下改进:

接下来就是改进的地方:

在jupyter调用我们自己封装的随机梯度下降法,首先是先在虚拟数据上验证算法正确性,然后应用真实的数据。

sklearn实现随机梯度下降法

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI机器学习与深度学习算法 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档