Support Vector Machine如何处理令人困惑的特征向量?

时间:2016-04-23 22:32:46

标签: python machine-learning svm feature-extraction

想象一下,我有以下特征向量:

训练载体:

第1类: [3,5,4,2,0,3,2], [33,50,44,22,0,33,20]

第2类: [1,2,3,1,0,0,4], [11,22,33,11,0,0,44]

测试载体:

第1类: [330,550,440,220,0,330,200]

第2类: [110,220,333,111,0,0,444]

我正在使用SVM,它从训练向量中学习,然后对测试样本进行分类。

正如您所看到的那样,特征向量具有非常不同的维度:训练集特征是非常低的数值,并且测试集向量是非常高的数值。

我的问题是SVM是否难以从这些特征向量中学习?

当然,当我进行矢量缩放时,差异仍然存在:

例如在对Class 1的特征向量应用standardScaler()之后:

训练:

[0.19 1.53 0.86 -0.48 -1.82 0.19 -0.48]

[20.39 31.85 27.80 12.99 -1.82 20.39 11.64]

测试: [220.45 368.63 294.54 146.35 -1.82 220.45 132.88]

基本上,这是一个现实世界的问题,我问这个问题,因为我已经开发出一种方法来为我的特定情况预先缩放这些特征向量。

因此,在我使用预缩放方法之后,Class 1的特征向量将变为:

训练:

[3. 5. 4. 2. 0. 3. 2.]

[2.75 4.16666667 3.66666667 1.83333333 0. 2.75   1.66666667]

测试: [2.84482759 4.74137931 3.79310345 1.89655172 0. 2.84482759   1.72413793]

这使得它们在性质上非常相似。

当standardScaler()应用于预先缩放的向量时,这看起来更好:

训练:

[0.6 1. 0.8 0.4 0. 0.6 0.4]

[0.55 0.83333333 0.73333333 0.36666667 0. 0.55   0.33333333]

测试: [0.56896552 0.94827586 0.75862069 0.37931034 0. 0.56896552   0.34482759]

最终的问题是我的预缩放方法是否会以任何方式帮助SVM?这更像是一个理论问题,对此的任何见解都表示赞赏。

1 个答案:

答案 0 :(得分:3)

是的,它会影响SVM的性能。看起来您的测试向量只是训练向量的缩放版本。 SVM无法知道缩放与您的情况无关(除非您提供了大量不同比例的训练向量)

缩放无关的特征向量的常见做法是将所有测试和训练向量缩放到公共长度。