gradient descent

大多数数据科学算法是优化问题,其中梯度下降算法是最常用的算法之一。

 

对于初学者,梯度下降算法这个名字听起来就很吓人。希望通过这篇文章可以改变这种看法。

 

我们举这样一个例子:以住房数据来预测住房价格。

 

应用住房历史数据,构建已知房子大小时的新房价格预测模型。

 

 

 

对于新房,已知其规模(X),那么价格(Y)是多少?

 

首先分析住房历史数据:

 

 

 

 

我们使用历史数据构建一个简单的线性模型,用于预测已知其大小(X)的新房子的价格(Ypred)。

 

 

 

 

在上面的图表中,已知房子大小(X),红线为预测的房价(Ypred)。

Ypred = a + bX

 

蓝线是依据历史数据给出的实际房价 (Yactual)。

 

Yactual和Ypred之间的偏差(由黄色虚线表示)是预测误差(E)。

 

因此,我们需要利用a,b权重系数找到一个符合历史数据的最优值,以减少预测误差,提高预测精度。

 

所以,我们的目标是找到最优a和b,使得住房价格的实际值和预测值之间的误差最小:

 

Sum of Squared Errors (SSE) = ½ a (Actual House Price – Predicted House Price)2=  ½ a(Y – Ypred)2

 

(请注意,还有其他衡量误差的方法。方差和只是其中之一)。

 

这时候就要用到梯度下降法。梯度下降法就是一种寻找最优权重(a、b)的优化算法,以减少预测误差。

 

 


 

现在让我们一步一步了解梯度下降算法:

 

步骤1:用随机数初始化权重(a和b),计算误差(SSE)。

 

步骤2:a,b权重系统从初始随机值开始细微变化,误差(SSE)会随之变化。计算此时的梯度值。通过改变a,b值使得误差最小化。

 

步骤3:按照梯度调整系数,使得系数达到最优值,此时误差最小。

 

步骤4:使用新的权重系数来预测,并计算新的误差。

 

步骤5:重复步骤2和3,直到进一步调整权重对误差减少没有显著影响。

 

 


 

现在我们具体执行每一个步骤(我的步骤在excel中,粘贴如下)。在开始之前,我们必须先规范数据,使得优化过程更快。

 

 

 

步骤1:拟合Ypred = a + b X,a和b从随机值开始取值,计算预测误差(SSE);

 

 

 

步骤2:随着权重变化,计算误差变化梯度

 

 

 

∂SSE /∂a = -(Y-YP)

 

SSE /∂b = - X(Y-YP)

 

其中,SSE =½(Y-YP)2 =½(Y -(a + bX))2

 

你需要知道一些微积分,知道一点就可以!

 

∂SSE /∂a,∂SSE /∂b是梯度值,指导a,b值朝着误差变小的方向变化。

 

步骤3:按照梯度调整系数,使得系数达到最优值,此时误差最小。

 

 

我们需要更新随机值a、b,使得a、b值最优。

 

更新规则:

a - ∂SSE/∂a

b - ∂SSE /∂b

 

因此,按照更新规则:

1. New a = a – r * ∂SSE/∂a = 0.45-0.01*3.300 = 0.42

2. New b = b – r * ∂SSE/∂b= 0.75-0.01*1.545 = 0.73

 

其中,r是学习率r= 0.01,代表权重调整的步伐。

 

步骤4:使用新的a和b进行预测,并计算新的总SSE。

 

 

 

 

你可以得到新的预测值,总SSE也下降了(从0.677降至0.553)。这意味着预测精度得到了改善。

 

步骤5:重复步骤2和3,直到进一步调整权重对误差减少没有显著影响。此时      预测精度最高,a,b达到最优值。

 

这就是梯度下降算法。本优化算法及其变体形式是许多机器学习算法的核心,如神经网络算法,甚至深入学习算法。

 

 


 

◆免责声明◆:

 

请注意,这篇文章主要是作为教程,因此:

1.使用的数据是虚构的,且数据规模非常小。为了简化示例、数据和模型,选择了单变量的示例。

 

2.这篇文章主要是为了突出,通过excel如何简化我们对于梯度下降算法等数学算法的理解。因此这里并没有说梯度下降算法比最小二乘回归算法更好或者更差。

 

3.由于数据量很小,出于教程的目的,整个数据仅用于训练模型。然而,在构建实际的预测模型时,需要利用各种数据有效性验证技术(例如:训练测试数据分离、交叉验证法)。

posted on 2017-05-15 13:42  大大的橙子  阅读(372)  评论(0编辑  收藏  举报

导航