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

很多机器学习分类算法,比如支持向量机(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


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值