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