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


76

我正在使用LibSVM对一些文档进行分类。正如最终结果所示,这些文档似乎很难归类。但是,在训练模型时,我注意到了一些东西。就是说:如果我的训练集例如是1000,那么大约有800个被选为支持向量。我到处都在寻找这是好事还是坏事。我的意思是支持向量的数量和分类器的性能之间有关系吗?我已经阅读了一篇文章,但是我正在执行参数选择,而且我还确定特征向量中的属性都是有序的。我只需要知道这种关系。谢谢。ps:我使用线性内核。


Fwiw,50000个MNIST数字(784d)上的RBF-SVM提供了14398个支持向量,占29%。
丹尼斯

Answers:


161

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

硬边距线性SVM

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

硬利润支持向量机

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

软边距线性SVM

但是,如果我们的数据集不是线性可分离的怎么办?我们介绍软边际支持向量机。我们不再要求我们的数据点位于边距之外,而是允许它们中的某些点越过边界进入边距。我们使用松弛参数C来控制它。(nu-SVM中的nu)这使我们在训练数据集上具有更大的裕度和更大的误差,但可以提高泛化性和/或允许我们找到不可线性分离的数据的线性分离。

软边距线性SVM

现在,支持向量的数量取决于我们允许的松弛量和数据的分布。如果我们允许大量的松弛,我们将有大量的支持向量。如果我们允许很少的松弛,那么支持向量将很少。准确性取决于为要分析的数据找到合适的松弛水平。某些数据将无法获得较高的准确性,我们必须简单地找到最合适的数据。

非线性SVM

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

在此处输入图片说明

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

在这里,准确性取决于可能使数据过度拟合的高复杂度模型与为更好地推广而将一些训练数据错误地分类的大利润之间的权衡。如果您完全过度拟合数据,则支持向量的数量范围可能从很少到每个数据点。这种权衡是通过C以及通过选择内核和内核参数来控制的。

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

很好的资源: 用于模式识别的支持向量机教程


好答案!但该链接不再起作用...您能更新它吗?
Matteo,


“如果完全过度拟合数据,则支持向量的数量可以从很少到每个数据点不等。” 总而言之,大量支持向量不好。所以问题是,在1000个训练样本中有800个SV是“大”的吗?
Kanmani '18

谢谢!...在链接和链接之后,我发现了这个很好的解释!:)
leandr0garcia 18-10-26

29

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

听起来好像您遇到的主要问题是培训数据不足。另外,也许考虑一些可以更好地分离此数据的特定功能。


9
我选择了这个作为答案。之前的冗长答案仅仅是与C&P SVM无关的解释
Valentin Heinitz,2015年

6
我同意。尽管其他答案试图给出一个很好的总结,但这与op最相关。如果SV的比例很大,则表示记忆,而不是学习,这意味着泛化不好=>样本错误(测试集错误)大。

12

两个样本数属性的数目 影响支持向量的数量,使模型更加复杂。我相信您使用单词甚至ngram作为属性,因此它们很多,自然语言模型本身也非常复杂。因此,可以支持1000个样本的800个支持向量。(还要注意@karenu关于C / nu参数的注释,这些注释对SV数量也有很大影响)。

为了获得有关此召回SVM主要思想的直觉。SVM在多维特征空间中工作,并尝试找到将所有给定样本分开的超平面。如果您有很多样本并且只有2个要素(2维),则数据和超平面可能如下所示:

在此处输入图片说明

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

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

在此处输入图片说明

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

当数据结构良好(即保持良好的模式)时,可能只需要几个支持向量,所有其他支持向量都将滞后。但是文本是非常非常糟糕的结构化数据。SVM尽其所能,尝试尽可能地适合样本,因此将比滴更多的样本作为支持向量。随着样本数量的增加,这种“异常”减少了(出现了更多无关紧要的样本),但是支持向量的绝对数量仍然很高。


谢谢您的回答!您对上一段提到的内容有什么参考吗?“当数据结构良好(即保持良好的模式)时,可能只需要几个支持向量,所有其他支持向量都将滞后。但是文本是非常非常糟糕的结构化数据。SVM会尽力而为,以适应样本尽可能地多,因此将比滴更多的样本作为支持向量。” thx
Hossein

这是不正确的-如果数据集是线性可分离的并且具有正确的分布,则您可以拥有仅包含2个支持向量的3维数据集。您也可以拥有相同的精确数据集,并得到80%的支持向量。这完全取决于您如何设置C。实际上,在nu-svm中,您可以通过将nu设置得非常低(.1)来控制支持向量的数量
karenu 2012年

@karenu:我并不是说属性数量的增长总是会导致支持向量数量的增长,我只是说即使使用固定的C / nu参数,支持向量的数量也取决于要素维数和样本数量。而且对于文本数据而言,由于其性质结构非常糟糕,因此页边空白内的支持向量数量(即使使用高阶内核,硬边距SVM也不适用于文本分类)。
ffriend

@侯赛因:我的意思是线性可分离性。想象一下垃圾邮件分类的任务。如果您的垃圾邮件几乎总是包含“ Viagra”,“ buy”,“ money”之类的单词,而您的火腿邮件仅包含“ home”,“ hello”,“ regards”,那么您的数据结构良好,可以很容易地分离这些词向量。但是,实际上,您会混用好词和坏词,因此您的数据没有任何明显的模式。如果您从垃圾邮件字典中获得3个单词,从火腿中获得3个单词,应该如何分类邮件?您需要更多功能,这就是SVM使用更多支持向量的原因之一。
ffriend

@ffriend我发现这有误导性。说这取决于我,这听起来好像您的数据集增加了,那么sv的数目也会增加,这在样本数(或维数)与支持向量数之间存在某种关系。模型和SV的复杂性之间存在关系,并且具有较大维的较大数据集的确具有建立更复杂模型的趋势,但是数据集的大小或维数并不直接决定SV的数量。
karenu

7

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

再说一次,一千个培训文档就是一个小的培训集。您应该检查在扩展到10000s或更多文档时会发生什么。如果情况没有改善,请考虑使用经过LibLinear培训的线性SVM进行文档分类;这样可以更好地扩展(模型大小和分类时间在特征数量上是线性的,并且与训练样本的数量无关)。


只是好奇,是什么让您假设OP尚未使用线性SVM?如果使用某些非线性内核,我一定会错过它。
克里斯·A Chris A.)

1
@ChrisA .:是的,我只在谈论速度。当使用相同的设置时,准确性应该大致相同(尽管LibSVM和LibLinear都使用了一些随机化,因此甚至不能保证在同一训练算法的多次运行中都具有相同的准确性)。
Fred Foo 2012年

1
等等,这种随机化是否可以解决最终分类器的问题?我没有看过任何一个库的代码,但这违反了我对这是一个具有最小最小值的凸优化问题的整体理解。
克里斯·A

1
这种随机化仅在训练阶段作为加速进行。优化问题确实是凸的。
弗雷德·富

1
随机化只是帮助它更快地收敛到最优解。
karenu

0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.