支持向量的数量与训练数据和分类器性能之间的关系是什么?

时间:2012-02-28 10:57:12

标签: machine-learning classification svm libsvm

我正在使用LibSVM对某些文档进行分类。最终结果显示,这些文件似乎有点难以分类。但是,我在训练模型时注意到了一些事情。那就是:如果我的训练集是例如1000,则选择其中约800个作为支持向量。 我到处寻找,发现这是好事还是坏事。我的意思是支持向量的数量和分类器性能之间是否存在关系? 我已阅读此帖previous post。但是,我正在执行参数选择,并且我确信特征向量中的属性都是有序的。 我只需要知道这种关系。 谢谢。 p.s:我使用线性内核。

5 个答案:

答案 0 :(得分:141)

支持向量机是一个优化问题。他们试图找到一个超平面,将两个类划分为最大边距。支持向量是落在该边界内的点。如果你从简单到复杂的构建,最容易理解。

硬保证金线性SVM

在数据可线性分离的训练集中,并且您正在使用硬边距(不允许松弛),支持向量是位于支撑超平面上的点(与平面上的分割超平面平行的超平面)边缘的边缘)

Hard-Margin SVM

所有支持向量都位于边缘。无论数据集的维数或大小如何,支持向量的数量都可以少至2个。

Soft-Margin Linear SVM

但是如果我们的数据集不是线性可分的呢?我们介绍软边际SVM。我们不再要求我们的数据点位于保证金之外,我们允许它们中的一些数据流入保证金。我们使用松弛参数C来控制它。 (nu-SVM中的nu)这为训练数据集提供了更大的余量和更大的误差,但改进了泛化和/或允许我们找到不可线性分离的数据的线性分离。

Soft-margin Linear SVM

现在,支持向量的数量取决于我们允许的松弛程度和数据的分布。如果我们允许大量的松弛,我们将拥有大量的支持向量。如果我们允许很少的松弛,我们将只有很少的支持向量。准确性取决于为所分析的数据找到合适的松弛程度。有些数据不可能获得高水平的准确性,我们必须找到最合适的数据。

非线性SVM

这将我们带到非线性SVM。我们仍在尝试线性划分数据,但我们现在正试图在更高维度的空间中进行。这是通过内核函数完成的,该函数当然有自己的一组参数。当我们将其转换回原始特征空间时,结果是非线性的:

enter image description here

现在,支持向量的数量仍取决于我们允许的松弛程度,但它也取决于我们模型的复杂性。在输入空间的最终模型中的每个扭曲和转弯都需要一个或多个支持向量来定义。最终,SVM的输出是支持向量和alpha,它实质上定义了特定支持向量对最终决策的影响程度。

这里,准确性取决于可能过度拟合数据的高复杂性模型与大边际之间的权衡,这将大大地分类一些训练数据以便更好地概括。如果完全过度拟合数据,支持向量的数量可以从极少数到每个数据点。这种权衡是通过C和内核和内核参数的选择来控制的。

我假设当你说表现时你指的是准确性,但我想我也会谈到计算复杂性方面的表现。为了使用SVM模型测试数据点,您需要使用测试点计算每个支持向量的点积。因此,模型的计算复杂度在支持向量的数量上是线性的。支持向量越少意味着测试点的分类越快。

一个好的资源: A Tutorial on Support Vector Machines for Pattern Recognition

答案 1 :(得分:20)

1000中的800个基本上告诉您SVM需要使用几乎每个训练样本来编码训练集。这基本上告诉您数据没有太多规律性。

听起来你没有足够的训练数据存在重大问题。此外,可以考虑一些可以更好地分离这些数据的特定功能。

答案 2 :(得分:12)

样本数属性数 可能影响支持向量的数量,使模型更加复杂。我相信你使用单词甚至ngram作为属性,所以它们中有很多,自然语言模型本身就非常复杂。因此,1000个样本的800个支持向量似乎没问题。 (另请注意@karenu关于C / nu参数的评论,这些评论对SV数量也有很大影响)。

直观了解这种召回SVM的主要思想。 SVM在多维特征空间中工作,并尝试查找分隔所有给定样本的超平面。如果您有大量样本且只有2个特征(2维),则数据和超平面可能如下所示:

enter image description here

这里只有3个支持向量,其他所有支持向量都在其后面,因此不起任何作用。请注意,这些支持向量仅由2个坐标定义。

现在假设您有3维空间,因此支持向量由3个坐标定义。

enter image description here

这意味着还需要调整一个参数(坐标),并且此调整可能需要更多样本才能找到最佳超平面。换句话说,在最坏的情况下,SVM每个样本只找到1个超平面坐标。

当数据结构良好(即保持模式很好)时,可能只需要几个支持向量 - 所有其他支持向量都将保留在这些向量之后。但是文本结构化数据非常非常糟糕。 SVM尽力而为,尽可能地拟合样本,因此作为支持向量的样本甚至比滴数更多。随着样本数量的增加,这种“异常”减少(出现更多不重要的样本),但支持向量的绝对数量仍然很高。

答案 3 :(得分:6)

SVM分类在支持向量(SV)的数量上是线性的。在最坏的情况下,SV的数量等于训练样本的数量,因此800/1000还不是最差的情况,但它仍然非常糟糕。

然后,1000个培训文件是一个小培训集。您应该检查当您扩展到10000或更多文档时会发生什么。如果事情没有改善,可以考虑使用LibLinear训练的线性SVM进行文档分类;那些扩展得更好(模型大小和分类时间在特征数量上是线性的,与训练样本的数量无关)。

答案 4 :(得分:0)

来源之间存在一些混淆。例如,在教科书ISLR第6版中,C被描述为“边界违规预算”,从中可以得出更高的C将允许更多的边界违规和更多的支持向量。 但是在R和python中的svm实现中,参数C被实现为“违规惩罚”,这是相反的,然后您将观察到,对于更高的C值,支持向量更少。