生活中往往有两种人:一种喜欢谋定而后动,比较有全局观;另一种见机行事,根据外界环境不断调整自己的行为。命运给他们的馈赠也是不同的,前者可能大器晚成,后者容易惊喜不断,然而可能左右摇摆。不能说两种处事态度有什么优劣:思虑过多可能错失良机,贸然行动也可能事倍功半,总之“成功”这件事一半靠命运。顾城的诗中说:命运不是风,来回吹,命运是大地,走到哪你都在命运中。而我们能做的是发挥主观能动性,从而改变条件概率(指事件A在另外一个事件B已经发生条件下的发生概率。表示为:P(A|B),读作“在B条件下A的概率”)。
之前我们学习的梯度下降法都是批梯度下降法(Batch Gradient Descent),即当前点对于所有的样本所产生的Cost最陡的方向,而另一种随机梯度下降(Stochastic Gradient Descent)所找到的方向是当前点对于这一次所选取的样本所共同产生的Cost最陡的方向。小批量梯度下降法(Mini-batch Gradient Descent)是随机梯度方法的一种变种,用少量几个训练样本(通常是100-1000个,少是相对训练集大小而言的)一起计算梯度,更新模型参数。不能笼统的说随机梯度下降比梯度下降速度快,多数情况下,mini-batch会比sgd收敛要速度快。在训练样本多的情况下,sgd比gd的收敛速度快,一个原因是gd要通过所有样本计算梯度,而sgd通过一个样本计算一个近似的梯度,本身计算量就会小非常多。
batch gradient descent 一次更新需要计算一遍整个数据集:
stochastic gradient descent 一次更新只需计算一个数据点:
下面是随机梯度下降法的代码实现(还是鸢尾花数据集):
对比可以发现,本例中Stochastic gradient descent 的学习速率比 Batch gradient descnent 的高很多。
下周我们学习如何在Python中实现逻辑回归算法,敬请期待:)
原文:http://www.cnblogs.com/turingbrain/p/7471986.html