http://blog.csdn.net/u013300875/article/details/44081067

很多机器学习分类算法,比如支持向量机(svm),假设数据是要线性可分。

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

那么,我们如何判断数据是不是线性可分的?

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

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

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

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

什么是凸包呢?

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

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

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

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

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

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

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

是这样么?当然不是。

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

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

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

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

There are efficient algorithms that can be used both to find the convex hull (theqhull algorithm is based on anO(nlog(n)) quickhull approach I think), and to perform line-line intersection tests for a set of segments (sweepline atO(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 havek 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...

简单说,他的建议就是用quickhull算法来找到数据的凸包,sweepline算法判断凸包边缘是否有相交,两个步骤的复杂度都是O(nlogn)。

其中quickhull已经在软件包qhull(http://www.qhull.org/)实现了。

http://www.tuicool.com/articles/ERJVZv

转载于:https://www.cnblogs.com/lgdblog/p/6858832.html

线性可分 与线性不可分相关推荐

  1. 线性支持向量机、线性可分支持向量机、非线性支持向量机是怎么区分的?

    SVM(Support Vector Machine)是一种二类分类模型. 它的基本模型是定义在特征空间上的间隔最大的线性分类器. 支持向量就是最大间隔或者分割超平面上的那几个临界点,具体入下图所示: ...

  2. 特征空间、(数据集)线性可分:线性(二分类)模型

    文章目录 二分类问题 特征空间 线性可分 线性分类模型 在学习 SVM 时发现自己没能很好地理解在线性模型中充当决策函数角色的 符号函数Sign(),说明对线性模型的理解还不够到位,下面主要梳理一下对 ...

  3. PLA:从线性可分到线性不可分的演化过程

    从线性可分到线性不可分 PLA 从线性可分到线性不可分,有 3 种不同的形态. 线性可分:PLA 一点点错误:Pocket Algorithm 严格非线性:Φ(X)Φ(X)Φ(X) + PLA 接下来 ...

  4. 线性SVM,线性可分SVM与核函数

    SVM即支持向量机(support vector machine),是一种分类算法.SVM 适合中小型数据样本.非线性.高维的分类问题.它将实例的特征向量映射为空间中的一些点.如: 而SVM要做的事情 ...

  5. 五、【线性表】线性表的链式表示和实现

    线性表的链式表示和实现 上节提到,由于顺序表的特点是逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中任一元素.然而,这也导致了顺序表在执行插入或删除操作时,需要移动大量元素.本节来讨论 ...

  6. 【机器学习】Fisher线性判别与线性感知机

    来源 | AI小白入门 作者 | 文杰 编辑 | yuquanle 原文链接 Fisher线性判别与线性感知机 ​ Fisher线性判别和线性感知机都是针对分类任务,尤其是二分类,二者的共同之处在于都 ...

  7. 深度学习--TensorFlow(3)线性神经网络(线性输入非线性输入)(实现)

    目录 一.线性神经网络(线性输入) 1.基础理论 2.线性输入代码 奇葩错误: 二.线性神经网络(非线性输入) 0.引言 1.基础理论 三.线性神经网络(非线性输入)实战 1.设置初始参数 2.正向传 ...

  8. 【数字信号处理】线性常系数差分方程 ( 线性常系数差分方程 与 边界条件 总结 ) ★★★

    文章目录 一.线性常系数差分方程 与 边界条件 总结 一.线性常系数差分方程 与 边界条件 总结 " 线性常系数差分方程 " 中 , " 边界条件 / 初始条件 &quo ...

  9. 【数字信号处理】线性常系数差分方程 ( “ 线性常系数差分方程 “ 与 “ 线性时不变系统 “ 关联 | 根据 “ 线性常系数差分方程 “ 与 “ 边界条件 “ 确定系统是否是 线性时不变系统方法 )

    文章目录 一." 线性常系数差分方程 " 与 " 线性时不变系统 " 关联 二.根据 " 线性常系数差分方程 " 与 " 边界条件 ...

最新文章

  1. VS遇到的各种bug
  2. neural network神经网络识别手写字体
  3. ERROR 1044 (42000)报错的解决
  4. QString string char*互转
  5. JAVA中JPasswordField实现密码的确认
  6. Python中的Numpy模块(1,numpy创建)
  7. java中launch方法,Java AppUtils.launchApp方法代码示例
  8. JAVA编码 —— 字符串关键字内容替换
  9. 读【重构】(3)——感悟重构——Decompose Conditional(分解条件式)
  10. Windows下底层数据包发送实战
  11. restful可以转发么_RESTful 的收益是什么?
  12. linux查看磁盘io的几种方法
  13. Ionic开发框架的安装及Ionic项目的创建
  14. 特征点检测FAST算法
  15. Lvm linux磁盘分区管理(多个分区合并成一个)
  16. to be filed by oem
  17. 列出叶节点 python
  18. 监控摄像头RTSP低延时无插件直播解决方案
  19. ora00054 资源正忙
  20. CF #765C Road Optimization

热门文章

  1. 关于Retinex图像增强算法的一些新学习
  2. 帮朋友招一个IM开发人员
  3. 集群介绍 、keepalived介绍 、 用keepalived配置高可用集群
  4. BWA SAM文件格式
  5. MATLAB 数据分析方法(第2版)1.3 MATLAB基本语法
  6. httpd-2.2和httpd-2.4安装部署
  7. Linux中强制结束一个进程的终极方法
  8. 列出本机正在监控的端口
  9. VMWare 6.0桥接模式虚拟机网络配置
  10. 《人月神话》阅读笔记2