svm缩放输入值

use*_*593 15 machine-learning svm computer-vision libsvm

我正在使用libSVM.假设我的功能值采用以下格式:

                         instance1 : f11, f12, f13, f14
                         instance2 : f21, f22, f23, f24
                         instance3 : f31, f32, f33, f34
                         instance4 : f41, f42, f43, f44
                         ..............................
                         instanceN : fN1, fN2, fN3, fN4
Run Code Online (Sandbox Code Playgroud)

我认为可以应用两种缩放.

  1. 缩放每个实例向量,使得每个向量具有零均值和单位方差.

        ( (f11, f12, f13, f14) - mean((f11, f12, f13, f14) ). /std((f11, f12, f13, f14) )
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将上述矩阵的每个列缩放到一个范围.例如[-1,1]

根据我对RBF内核(libSVM)的实验,我发现第二个缩放(2)将结果提高了大约10%.我不明白为什么(2)给我一个改进的结果.

任何人都可以解释一下应用缩放的原因是什么,为什么第二个选项会给我带来改进的结果?

小智 19

标准的做法是使每个维度(或属性或列(在您的示例中))具有零均值和单位方差.

这使得SVM的每个维度具有相同的幅度.来自http://www.csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf:

缩放的主要优点是避免较大数值范围内的属性占主导较小数值范围的属性.另一个优点是在计算过程中避免数字困难.因为内核值通常取决于特征向量的内积,例如线性内核和多项式内核,所以大的属性值可能会导致数值问题.我们建议将每个属性线性缩放到[-1,+ 1]或[0,1]范围.

  • 是的,缩放列是正常的方法。缩放行并没有真正的意义:如果您仅有的两个功能是年龄(以年为单位)和薪水(以千美元为单位),则将得出一个15岁的年薪为15,000美元和一个60岁的年薪为60,000美元的信息。看起来完全一样! (2认同)