我是从math.stackexchange.com交叉发布的,因为我没有得到任何反馈,这对我来说是一个时间敏感的问题。
我的问题涉及支持向量机中与超平面的线性可分性。
根据Wikipedia:
...正式地,支持向量机 构造超平面或一组 超高或无限的超平面 尺寸空间,可以使用 用于分类,回归或 其他任务。直觉上,一个好的 分离是通过 具有最大的超平面 到最近的训练数据的距离 任何阶级的分数(所谓的 功能边际),一般来说 边际越大,越低 泛化误差 classifier.classifier。
超平面对类的线性分离直观地对我有意义。而且我认为我理解二维几何的线性可分性。但是,我正在使用流行的SVM库(libSVM)实现SVM,当弄乱数字时,我无法理解SVM如何在类之间创建曲线,或者在圆形曲线内将类别1中的中心点包围起来。如果n维空间V中的超平面是维度n - 1的“平坦”子集,或者对于二维空间 - 1D线,则由类别2中的点包围。
那不是超平面。这是循环的。这是如何运作的?或者SVM内部的维度是否比二维2D输入特征更多?
此示例应用程序可以下载here。
感谢您的全面解答。因此,SVM可以通过使用内核函数很好地分离奇怪的数据。在将数据发送到SVM之前将数据线性化是否有帮助?例如,我的一个输入要素(数值)有一个转折点(例如0),它完全符合第1类,但在零和零之下它适合第2类。现在,因为我知道这一点,它会不会帮助分类为SVM发送此功能的绝对值?
答案 0 :(得分:11)
正如mokus解释的那样,支持向量机使用内核函数将数据隐式映射到可以线性分离的特征空间:
不同的内核函数用于各种数据。请注意,图片中的变换会添加额外的维度(要素),但此功能从未在内存中实现。
(来自Chris Thornton, U. Sussex的插图。)
答案 1 :(得分:8)
查看此YouTube video,其中说明了线性不可分离的点的示例,当映射到更高维度时,这些点可被平面分离。
答案 2 :(得分:3)
我并不熟悉SVM,但是从我的研究中回忆起它们经常被用于“核心功能” - 实质上是标准内部产品的替代品,它有效地使空间非线性化。它非常等同于将空间的非线性变换应用到应用线性分类器的某个“工作空间”,然后将结果拉回原始空间,分类器使用的线性子空间不再是线性的。
维基百科的文章确实在“非线性分类”小节中提到了这一点,并提供了http://en.wikipedia.org/wiki/Kernel_trick的链接,它更一般地解释了这种技术。
答案 3 :(得分:2)
这是通过应用所谓的[Kernel Trick](http://en.wikipedia.org/wiki/Kernel_trick)来完成的 基本上做的是,如果在现有的输入空间(在你的情况下为2-D)中某些东西不是线性可分的,那么它将被投射到更高的维度,在这里可以分离。应用内核函数(可以是非线性的)来修改特征空间。然后在此特征空间中执行所有计算(也可能具有无限维度)。
使用此内核函数转换输入中的每个点,并执行所有进一步的计算,就像这是您的原始输入空间一样。因此,您的点可能在更高维度(可能是无限)中是可分离的,因此更高维度的线性超平面在原始维度上可能不是线性的。
举一个简单的例子,考虑XOR的例子。如果在X轴上绘制Input1,在Y轴上绘制Input2,则输出类将为:
正如您所看到的,它在2-D中不是线性可分离的。但是如果我在3-D中采用这些有序对,(通过在3-D中移动1个点)说:
现在你可以很容易地观察到三维中有一个平面线性地分离这两个类。
因此,如果您将输入投影到足够大的维度(可能是无限的),那么您将能够在该维度中线性地分离您的类。
这里需要注意的一点是(也许我也会回答你的另一个问题)是你不必自己做一个核心功能(就像我上面做的那样)。好处是内核函数会自动处理您的输入并找出如何线性化"它
答案 4 :(得分:1)
对于在二维空间中给出的问题中的SVM示例,让x1,x2为两个轴。您可以使用变换函数F = x1 ^ 2 + x2 ^ 2并将此问题转换为1-D空间问题。如果您仔细注意,您可以看到在变换空间中,您可以轻松地线性分离点(F轴上的阈值)。这里变换的空间是[F](1维)。在大多数情况下,您将增加维度以获得线性可分的超平面。
答案 5 :(得分:0)
答案 6 :(得分:0)
My answer to a previous question可能会对这种情况下发生的事情有所了解。我给出的例子是非常人为的,而不是真正在SVM中发生的事情,但它应该让你直觉。