如何(高效)判断数据是否"线性可分"

转载 2015年11月18日 09:11:11

很多机器学习分类算法,比如支持向量机(SVM),的介绍都说了假设数据要是线性可分。

如果数据不是线性可分的,我们就必须要采用一些特殊的方法,比如SVM的核技巧把数据转换到更高的维度上,在那个高维空间数据更可能是线性可分的(Cover定理)。


现在的问题是,如何判断数据是线性可分的?

最简单的情况是数据向量是一维二维或者三维的,我们可以把图像画出来,直观上就能看出来。

比如Håvard Geithus网友的图,非常简单就看出两个类的情形下X和O是不是线性可分。


但是数据向量维度一旦变得很高,我们怎么办?

答案是检查凸包(convex hull)是否相交。


什么是凸包呢?

简单说凸包就是一个的闭合曲线(曲面),而且它刚好住了所有的数据。

举个例子,下图的蓝色线就是一个恰好包住所有数据的闭合凸曲线。



知道了什么是凸包,我们就能检查我们的数据是不是线性可分了。

以二维的情况为例,如果我们的数据训练集有两类:M+和M-,

当我们画出两个类的凸包,如果两者不重叠,那么两者线性可分,反之则不是线性可分。

下图就是个线性可分的情况。


虽然现在我们比直接看数据判断是不是线性可分进了一步,但是好像还是靠画出图来人眼判断,这对高维度数据依然无效。

是这样么?当然不是。

因为判断两个凸包是不是有重叠可以通过判断凸包M+的边和凸包M-的边是否相交来实现,这就无需把凸包画出来了。


如何高效的找到一组数据的凸包?

如何高效的判断两个凸包是否重合?

网友Darren Engwirda 给出了很好的建议:

简单说,他的建议就是用quickhull算法来找到数据的凸包,sweepline算法判断凸包边缘是否有相交,两个步骤的复杂度都是O(nlogn)。其中quickhull已经在软件包qhull(http://www.qhull.org/)实现了。

英文原话:There are efficient algorithms that can be used both to find the convex hull (the qhull algorithm is based on an O(nlog(n))quickhull approach I think), and to perform line-line intersection tests for a set of segments (sweepline at  O(nlog(n))), so overall it seems that an efficient O(nlog(n)) algorithm should be possible.

This type of approach should also generalise to general k-way separation tests (where you have k groups of objects) by forming the convex hull and performing the intersection tests for each group.

It should also work in higher dimensions, although the intersection tests would start to become more challenging...




参考链接和图片来源:

更数学的对凸包的定义:http://www.nanshan.edu.cn/lxy/shuxuejm/jiao%20cai/31%E7%AC%AC%E4%B8%89%E5%8D%81%E4%B8%80%E7%AB%A0%20%20%E6%94%AF%E6%8C%81%E5%90%91%E9%87%8F%E6%9C%BA.pdf

wikipedia对凸包的介绍:http://zh.wikipedia.org/wiki/%E5%87%B8%E5%8C%85

Håvard GeithusDarren Engwirda(以及其他人)的问答:http://stackoverflow.com/questions/9779179/determine-whether-the-two-classes-are-linearly-separable-algorithmically-in-2d


SVM清晰讲解1__线性可分问题

作者:liangdas 出处:简单点儿,通俗点儿,机器学习   引言: 1995年Cortes和Vapnik于首先提出了支持向量机(Support Vector Machine),由于其能够适应小样本...

机器学习(7)——支持向量机(二):线性可分支持向量机到非线性支持向量机

线性可分支持向量机回顾前面总结了线性可分支持向量机,知道了支持向量机的最终目的就是通过“间隔最大化” 得到最优分类器,能够使最难区分的样本点得到最大的分类确信度,而这些难区分的样本就是支持向量。 还...

线性空间的一些直观感悟

第一部分 前不久chensh出于不可告人的目的,要充当老师,教别人线性代数。于是我被揪住就线性代数中一些务虚性的问题与他讨论了几次。很明显,chensh觉得,要让自己在讲线性代数的时候不被那位强势的学...
  • soudog
  • soudog
  • 2008年01月18日 01:18
  • 9531

如何(高效)判断数据是否线性可分

很多机器学习分类算法,比如支持向量机(SVM),的介绍都说了假设数据要是线性可分。 如果数据不是线性可分的,我们就必须要采用一些特殊的方法,比如SVM的核技巧把数据转换到更高的维度上,在那个高维空间数...

理解SVM(二)——线性不可分的情况

理解SVM(二)——线性不可分的情况     前面一篇介绍了SVM的

凸壳与线性可分

本篇博客是对《统计学习方法》中习题2.3的证明。

QuickHull 快速凸包算法

资料 http://hivemined.ir/wp-content/uploads/2012/04/convexHull.pdf

模式识别中感知器算法(Perceptron Approach)的实现

这学期在学模式识别,老师布置作业让实现一些比较基础简单的算法 下面是感知器算法的实现过程 感知器算法是线性分类器中一个比较基础但是比较重要的算法 W为权向量,g(x)为线性判别函数 通...

如何(高效)判断数据是否线性可分

很多机器学习分类算法,比如支持向量机(SVM),的介绍都说了假设数据要是线性可分。 如果数据不是线性可分的,我们就必须要采用一些特殊的方法,比如SVM的核技巧把数据转换到更高的维度上,在那个高维...

如何(高效)判断数据是否线性可分

很多机器学习分类算法,比如支持向量机(SVM),的介绍都说了假设数据要是线性可分。 如果数据不是线性可分的,我们就必须要采用一些特殊的方法,比如SVM的核技巧把数据转换到更高的维度上,在那个高维...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何(高效)判断数据是否"线性可分"
举报原因:
原因补充:

(最多只允许输入30个字)