支持向量机如何处理混淆的特征向量?

假设我有以下特征向量:

训练向量:

类别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有任何帮助?这更是一个理论问题,任何见解都将受到欢迎。


回答:

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

对于缩放不重要的特征向量,常见的做法是将所有测试和训练向量缩放到一个共同的长度。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注