测试线性可分离性


20

有没有一种方法可以测试高维两类数据集的线性可分离性?我的特征向量长40。

我知道我总是可以进行逻辑回归实验,并确定命中率与误报率,以得出两类是否线性可分离的结论,但是最好知道是否已经存在标准方法来做到这一点。



绘制可比性很有用:x =错误分类的点垂直于分离平面,y =累积损耗(x)。(对于示例图,请尝试使用标签svm和数据可视化的新问题。)
denis

3类问题呢?是否所有3+类问题都是非线性的?
Rosy

Answers:


3

好吧,您正在寻找支持向量机(SVM)。例如,具有线性RBF内核的SVM将特征映射到更高维度的空间,并尝试通过线性超平面分离类。这是一个很好的简短SVM视频,说明了这个想法。

您可以使用用于特征选择(包装模型)的搜索方法包装SVM,然后尝试查看您的任何特征是否可以线性地稀疏您拥有的类。

有许多使用SVM的有趣工具,包括LIBSVMMSVMPackScikit-learn SVM


1
+1。几乎就像Nik在描述SVM一样,没有听说过它们。在R中,您可以将(神秘命名的)e1071svm与一起使用,kernel="linear"并查看预测与实际的对比。
韦恩

1
我了解SVM。只是我不知道可以在不对每个样本进行实际分类的情况下将它们用于测试线性可分离性。
Nik

4
@Wayne:Nik实际上不是在请求SVM。我在回答中解释了为什么这不是解决他问题的办法。
Raffael 2014年

2
线性RBF内核 ”不存在。
马克·克莱森

当然 !所谓的RBF内核是将数据映射到线性可分离的空间。
soufanom 2014年

17

在计算上,确定两组点是否线性可分的最有效方法是应用线性规划GLTK非常适合该目的,几乎每种高级语言都为此提供了接口-R,Python,Octave,Julia等。

关于建议使用SVM的答案

使用SVM是验证线性可分离性的次佳解决方案,其原因有两个:

  1. SVM是软边距分类器。这意味着线性内核SVM可能会适应一个分离平面,即使实际上可能,该平面也无法完美分离。如果您随后检查错误率,则错误率将不为0,并且您会错误地得出结论:这两组不是线性可分离的。通过选择非常高的成本系数C可以缓解此问题-但这本身以非常高的计算成本来实现。

  2. SVM是最大利润率分类器。这意味着该算法将尝试找到一个将两个类别分隔开的分隔平面,同时尝试尽可能远离两者。同样,这是一个不必要地增加计算工作量的功能,因为它计算出的内容与回答线性可分离性问题无关。


假设您有一组点A和B:

在此处输入图片说明

然后,在以下情况下,您必须最小化0:

(下面的A是一个矩阵,而不是上面的点集)

在此处输入图片说明

“最小化0”实际上意味着您不需要实际优化目标函数,因为不必找出集合是否可线性分离。

最后(在此处输入图片说明)定义分隔平面。


在此处输入图片说明

如果您对R中的工作示例或数学细节感兴趣,请查看此内容


3
SVM是软边距分类器 ...除非您使用硬边距SVM。也就是说,使用SVM就像用大炮射击苍蝇。
马克·克莱森

没错-尽管很多(或可能绝大多数)SVM库都不提供这种选择
Raffael 2014年

2
@Raffael所有SVM库都可用作硬边距分类器。您只需为参数选择一个高值C
iliasfl 2014年

0

如果存在,则线性感知器可以保证找到一种解决方案。这种方法对于大尺寸而言效率不高。计算上,确定两组点是否可线性分离的最有效方法是应用@Raffael提到的线性编程。

一种快速的解决方案是解决感知器。用一个例子A码来解决使用感知器在Matlab是这里

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.