Python 梯度下降

来源:互联网 发布:僵尸变脸软件 编辑:程序博客网 时间:2024/05/24 05:08

为了实现监督学习,我们选择采用自变量x1、x2的线性函数来评估因变量y值,得到:

这里,sita1、sita2代表自变量x1、x2的权重(weights),sita0代表偏移量。为了方便,我们将评估值写作h(x),令x0=1,则h(x)可以写作:

其中n为输入样本数的数量。为了得到weights的值,我们需要令我们目前的样本数据评估出的h(x)尽可能的接近真实y值。我们定义误差函数(cost function)来表示h(x)和y值相接近的程度:



这里的系数1/2是为了后面求解偏导数时可以与系数相互抵消,一般用2m,算法更优化。这里更新算法我们选择梯度下降算法,利用初始化的weights并且反复更新weights:

这里a代表学习率,表示每次向着J最陡峭的方向迈步的大小。为了更新weights,我们需要求出函数J的偏导数。首先计算只有一个数据样本(x,y)时,如何计算J的偏导数:

对于只含有一组数据的训练样本,我们可以得到更新weights的规则为:

扩展到多组数据样本,更新公式为:


该算法又叫做随机梯度下降法,这种算法不停的更新weights,每次使用一个样本数据进行更新。当数据量较大时,一般使用后者算法进行更新。


0 0