为什么梯度下降比最小二乘法给了我更好的相对平方误差?

数据挖掘 机器学习 深度学习 梯度下降
2021-09-18 03:22:52

我是否正在使用 7 个因变量和 10000 个数据点进行回归任务。SGD 在测试和训练数据集上给了我 22% 的平均绝对百分比误差。而使用 numpy scipy.optimize.least_squares 的最小二乘法只给了我 58%(我尝试了不同的设置。)。我认为最小二乘法应该在这种大小的数据集上提供相同或更好的性能。可能是什么原因?

1个回答

原因是平均绝对百分比误差(MAPE) 和均方误差(MSE) 这两个指标针对不同的目标进行了优化。改进一个可以以牺牲另一个为代价。

作为一个简单的例子,考虑这个数据:

x = [ 0,  1,  2,  3,  4,  5]
y = [ 3,  5, 10, 10, 11, 15]

此数据上一条线的最佳拟合均方误差 (MSE) 是 y^=2.23x+3.43,其 MSE 为 1.18,以及平均绝对百分比误差 (MAPE) 11.0%。

此数据上一条线的最佳拟合平均绝对百分比损失是 y^=2.35x+2.99,其 MSE 为 1.24, 和一个 MAPE 8.34%。

您可以看到,针对 MAPE 进行优化会产生更差的 MSE,反之亦然。

当 y 值的范围很大(就覆盖的数量级而言)时,差异可能会变得极端,因为针对 MAPE 的优化将有利于在较小的值上更准确,而以较大的值为代价。因此,如果我们将 y 更改为:

y = [ 1,  2, 10, 10, 11, 20]

然后优化平均绝对百分比给出了这条线y^=3.78x+1.05与 MSE7.09和 MAPE21.9%。但是优化均方误差给出了y^=3.49x+0.286与 MSE 4.56和 MAPE62.9% - 这是一个更大的差异,我怀疑您的数据有很大范围的目标变量会导致类似的效果。


通过使用转换后的目标变量,您可以使用最小二乘回归器获得更接近的结果z=log(y)并在最后转变回来。这仍然不会完全相同,但它确实显着减少了差异 - 在我的最后一个示例中,如果我尝试这个,我会得到 MAPE24.2% - 相比 21.9% 用于直接优化 MAPE。