为什么在支持向量机中需要进行特征缩放?

42

我发现在SVM(支持向量机)问题中进行缩放确实可以提高其性能。

我已阅读了这个解释:

缩放的主要优点是避免具有较大数值范围的属性支配具有较小数值范围的属性。

不幸的是,这没有帮助我。能否有人提供更好的解释?


你是在谈论对数据进行对数归一化吗? - Leo
4
也许你应该到http://stats.stackexchange.com/上提出这个问题 - 这个论坛是用于编程问题的,而你的问题听起来更像是一个理论性的问题。 - Leo
7个回答

62

特征缩放是应用于优化问题(不仅是 SVM)的一种常见技巧。解决 SVM 优化问题的基本算法是梯度下降。Andrew Ng 在他的 Coursera 视频这里中有很好的解释。

我将在此说明核心思想(借用了 Andrew 的幻灯片)。假设您只有两个参数,其中一个参数可以取相对较大的值范围。那么代价函数的轮廓可能看起来像非常高而瘦的椭圆形(请参见下面的蓝色椭圆形)。您的梯度(梯度路径以红色绘制)可能需要很长时间前后移动才能找到最佳解。
enter image description here

相反,如果您缩放了特征,则代价函数的轮廓可能看起来像圆形;然后梯度可以采用更加直接的路径并更快地实现最优点。 enter image description here


非常感谢您的回答,greeness。您的回答非常清晰,但是我所问的是为什么缩放可以提高计算速度而不是准确性。在我看来,谢谢! - Kevin
@Venik,我认为以上问题的原因在他的回答中。虽然我不是很确定:<<你的梯度(梯度路径以红色绘制)可能需要很长时间来前后寻找最优解。>> - Autonomous
这个答案是不正确的,大多数实现中SVM并不使用SGD进行求解,而特征缩放的原因也完全不同。 - lejlot
3
我不同意。避免大值的主导效应可能是主要优点。然而,libsvm的作者也指出特征缩放有防止数值问题的优点。请参见第2.2节 http://www.csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf - greeness
我也不知道你为什么认为在大多数实现中,梯度下降法不用来解决支持向量机问题。在libsvm的不同版本中,我看到了坐标梯度下降和次梯度下降的实现。 - greeness
显示剩余2条评论

49
SVM中对特征进行缩放的真实原因是,这个分类器不具有仿射变换不变性。换句话说,如果将某个特征乘以1000,那么SVM给出的解决方案将完全不同。这几乎与底层优化技术无关(尽管它们会受到这些规模问题的影响,但它们仍应收敛于全局最优解)。
请考虑一个例子:你有一个男人和一个女人,通过他们的性别和身高(两个特征)进行编码。让我们假设有这样的数据,其中:
0 -> 男人 1 -> 女人
╔═════╦════════╗
║ sex ║ height ║
╠═════╬════════╣
║  1  ║  150   ║
╠═════╬════════╣
║  1  ║  160   ║
╠═════╬════════╣
║  1  ║  170   ║
╠═════╬════════╣
║  0  ║  180   ║
╠═════╬════════╣
║  0  ║  190   ║
╠═════╬════════╣
║  0  ║  200   ║
╚═════╩════════╝

让我们做点儿傻事。训练它来预测人的性别,因此我们试图学习 f(x,y)=x(忽略第二个参数)。

很容易看出,对于这样的数据,最大间隔分类器将在高度“175”左右水平“切割”平面,因此当我们得到新的样本“0 178”(一个身高为178厘米的女性)时,我们会得到她是男性的分类。

然而,如果我们将所有内容缩小到 [0,1] 范围内,我们会得到类似以下结果:

╔═════╦════════╗
║ sex ║ height ║
╠═════╬════════╣
║  1  ║  0.0   ║
╠═════╬════════╣
║  1  ║  0.2   ║
╠═════╬════════╣
║  1  ║  0.4   ║
╠═════╬════════╣
║  0  ║  0.6   ║
╠═════╬════════╣
║  0  ║  0.8   ║
╠═════╬════════╣
║  0  ║  1.0   ║
╚═════╩════════╝

现在,最大间隔分类器“切割”平面几乎是垂直的(正如预期的那样),因此给定一个新样本“0 178”,它也被缩放到大约“0 0.56”,我们得出它是一个女人(正确!)

总的来说,缩放确保仅仅因为某些特征很大而不会将它们用作主要预测因子


4
另一个直观的例子:假设我们想根据身高(以米为单位)和体重(以千克为单位)等属性对一组人进行分类。身高属性具有较低的变异性,范围从1.5米到1.85米,而体重属性可能从50千克到250千克不等。如果不考虑属性的量度尺度,则距离测量可能会受到个人体重差异的支配。来源:《数据挖掘导论》第5章,谭盼宁 - ruhong
我仍然不明白为什么网络不会自动缩放特征。难道训练不会设置权重来为您缩放数据吗?就像这些评论中的身高和体重示例一样...我认为训练会使用大权重来缩放低变异属性和较小权重来缩放高变异特征。为什么不会发生这种情况呢? - Kevlar
同意第一张表格后的帖子,我认为关键应该是0-女人,1-男人,第一张表格应该是0 150、0 160、0 170、1 180、1 190、1 200。 - Joffer

2

从另一个角度来看的个人想法。
1. 为什么特征缩放会影响结果?
在应用机器学习算法时,有一句话叫做“垃圾进,垃圾出”。您的特征越真实反映数据,算法的准确性就越高。这也适用于机器学习算法如何处理特征之间的关系。与人类大脑不同,当机器学习算法进行分类时,所有特征都由相同的坐标系表达和计算,这在某种程度上建立了特征之间的先验假设(并不是数据本身的真实反映)。此外,大多数算法的本质是找到最合适的权重百分比,以最适合数据。因此,当这些算法的输入是未经缩放的特征时,大规模数据对权重的影响更大。实际上,这并不是数据本身的反映。
2. 为什么通常情况下特征缩放可以提高准确性?
无监督机器学习算法中关于超参数(或超-超参数)选择(例如,层次狄利克雷过程、hLDA)的普遍做法是,您不应该添加任何个人主观假设关于数据。最好的方法只是假设它们具有相等的出现概率。我认为这也适用于这里。特征缩放只是试图假设所有特征具有平等的影响权重的机会,这更真实地反映了您对数据所知道的信息/知识。通常也会导致更好的准确性。

顺便说一下,关于仿射变换不变和更快收敛的问题,这里有一个有趣的链接(英文)在stats.stackexchange.com上。


2
我们可以通过将输入值保持在大致相同的范围内来加快梯度下降的速度。这是因为当变量非常不平衡时,θ会在小范围内快速下降,在大范围内缓慢下降,并且不会有效地震荡到最优解。这是来自于Andrews NG coursera课程。
因此,我们需要进行类似标准化数据的操作。有时研究人员想要知道特定观察是否普遍存在或是例外。用标准差的数量表达得分就是所谓的z值。如果我们将原始分数重新编码成z值,则称我们标准化了一个变量。

1
根据我在Coursera上学习Andrew Ng课程的经验,特征缩放可以帮助我们更快地实现梯度下降。如果数据更加分散,也就是说,如果它具有更高的标准差,则相对于通过特征缩放来缩放数据的情况,计算梯度下降需要更长的时间。

1
缩放的想法是通过将所有变量标准化到同一比例来消除特定变量上的过多计算,这样我们可以更轻松地计算斜率(y = mx + c),其中我们将M参数归一化以尽快收敛。

1

如果没有归一化,轮廓会很细,因此需要进行归一化:

  1. 数值将在范围内
  2. 加速theta的计算,因为需要计算的次数会减少

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接