本系列是《玩转机器学习教程》一个整理的视频笔记。本小节主要介绍改进上一小节代码,封装自己的随机梯度下降法并应用,之后应用sklearn实现随机梯度下降法。
一
封装自己的随机梯度法
在上一小节中,介绍了通过随机梯度下降法来寻找损失函数最小值的策略。接下来将随机梯度法封装在我们自己的"LinearRegression"这个类中。下面的代码是参考上一小节在jupyter中的随机梯度下降法:
但是这里有了问题:
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
上面代码中我们每次迭代都随机的选择样本,很可能有些样本被计算了很多遍,而有一些样本则可能一次都没有计算。正如上一小节,只查看三个之一样本数,这样显然是不科学的,更加科学的方式是把所有的样本都至少计算一遍,这样才能够保证所有的样本信息都被考虑进来了。所以我们针对性的进行两处改进:
针对上面的两点,将代码做一下改进:
接下来就是改进的地方:
在jupyter调用我们自己封装的随机梯度下降法,首先是先在虚拟数据上验证算法正确性,然后应用真实的数据。
二
sklearn实现随机梯度下降法