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

我正在使用LibSVM分类一些文件。 最终结果显示,这些文件似乎有点难以分类。 但是,我注意到了一些训练我的模型。 也就是说:如果我的训练集是1000例如800左右被选为支持向量。 我到处寻找,看看这是好事还是坏事。 我的意思是支持向量的数量和分类器的性能有关系吗? 我已阅读此帖以前的职位 。 但是,我正在执行参数select,并且我确信特征向量中的属性都是有序的。 我只需要知道关系。 谢谢。 ps:我使用线性内核。

支持向量机是一个优化问题。 他们试图find一个超平面,把两个类别的边距分成最大。 支持向量是在这个边界内的点。 如果你从简单到复杂,最容易理解。

硬边缘线性SVM

在一个训练集中,数据是线性可分的,而且你使用的是一个硬边(不允许有松弛),支持向量就是支撑超平面上的点(超平面平行于分割超平面的边裕)

硬边缘支持向量机

所有的支持向量完全位于边缘。 无论数据集的数量或大小如何,支持向量的数量可能只有2个。

软边缘线性SVM

但是如果我们的数据集不是线性可分的呢? 我们引入软边缘SVM。 我们不再要求我们的数据点位于边界之外,我们允许其中一些数据偏离边界进入边界。 我们使用松弛参数C来控制这个。 (nu-SVM中的nu)这给我们在训练数据集上有更大的余量和更大的误差,但是改进了泛化和/或使我们能够find线性分离的不是线性可分的数据。

软边缘线性SVM

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

非线性SVM

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

在这里输入图像说明

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

在这里,准确性取决于可能过度拟合数据的高复杂度模型和为了更好地概括而将错误地分类一些训练数据的大的边缘之间的折衷。 如果您完全适合您的数据,则支持向量的数量可以从很less到每一个数据点。 这种权衡是通过C和通过select内核和内核参数来控制的。

我假设你说的performance是指准确性,但是我认为我也会用计算复杂度来expression性能。 为了使用SVM模型来testing数据点,您需要计算每个支持向量与testing点的点积。 因此,模型的计算复杂度在支持向量的数量上是线性的。 支持向量越less意味着testing点的分类越快。

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

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

听起来像你有没有足够的训练数据的主要问题。 另外,也许想想一些更好地分离这些数据的特定function。

样本 数量和属性数量都 可能影响支持向量的数量,使得模型更为复杂。 我相信你用单词甚至是ngram作为属性,所以其中有很多,而自然语言模型本身就非常复杂。 所以,1000个样本的800个支持向量似乎没问题。 (同时要注意@ karenu对C / nu参数的评论,这些参数对SV号码也有很大的影响)。

为了直观的了解这个回忆SVM的主要思想。 支持向量机在多维特征空间中工作,并试图find分离所有给定样本的超平面 。 如果你有很多的样本,只有2个特征(2维),数据和超平面可能是这样的:

在这里输入图像说明

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

现在想象一下,你有3维空间,因此支持向量由3个坐标定义。

在这里输入图像说明

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

当数据结构良好时(即保持良好的模式),可能只需要几个支持向量 – 其他所有的支持向量都会留下。 但是文本是非常非常糟糕的结构化数据。 支持向量机尽其所能,尽可能地适应样本,从而作为支持向量,甚至比滴落更多的样本。 随着样本数量的增加,这种“exception”减less了(出现更多不重要的样本),但支持向量的绝对数量保持非常高。

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

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