支持向量机如何处理令人困惑的特征向量?
Posted
技术标签:
【中文标题】支持向量机如何处理令人困惑的特征向量?【英文标题】:How does Support Vector Machine deal with confusing feature vectors? 【发布时间】:2016-08-17 11:10:15 【问题描述】:假设我有以下特征向量:
训练向量:
第 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 从这些特征向量中学习是否会令人困惑?
当然,当我进行矢量缩放时,差异仍然存在:
例如在对第 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]
基本上,这是一个现实世界的问题,我之所以问这个问题,是因为我已经开发出一种方法来为我的特定情况预缩放这些特征向量。
所以在我使用我的预缩放方法之后,第 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】:是的,它会影响 SVM 的性能。您的测试向量似乎只是您的训练向量的缩放版本。 SVM 无法知道缩放与您的情况无关(除非您向它展示许多不同缩放的训练向量)
对于缩放无关紧要的特征向量的一种常见做法是将所有测试和训练向量缩放到一个共同的长度。
【讨论】:
以上是关于支持向量机如何处理令人困惑的特征向量?的主要内容,如果未能解决你的问题,请参考以下文章