转载自:https://www.cnblogs.com/CheeseZH/p/5265959.html

SVM实现多分类的三种方案

        </h1><div class="clear"></div><div class="postBody">

SVM本身是一个二值分类器

  SVM算法最初是为二值分类问题设计的,当处理多类问题时,就需要构造合适的多类分类器。

  目前,构造SVM多类分类器的方法主要有两类

  (1)直接法,直接在目标函数上进行修改,将多个分类面的参数求解合并到一个最优化问题中,通过求解该最优化问题“一次性”实现多类分类。这种方法看似简单,但其计算复杂度比较高,实现起来比较困难,只适合用于小型问题中;

  (2)间接法,主要是通过组合多个二分类器来实现多分类器的构造,常见的方法有one-against-one和one-against-all两种。

一对多法(one-versus-rest,简称OVR SVMs)

  训练时依次把某个类别的样本归为一类,其他剩余的样本归为另一类,这样k个类别的样本就构造出了k个SVM。分类时将未知样本分类为具有最大分类函数值的那类。

  假如我有四类要划分(也就是4个Label),他们是A、B、C、D。

  于是我在抽取训练集的时候,分别抽取

  (1)A所对应的向量作为正集,B,C,D所对应的向量作为负集;

  (2)B所对应的向量作为正集,A,C,D所对应的向量作为负集;

  (3)C所对应的向量作为正集,A,B,D所对应的向量作为负集;

  (4)D所对应的向量作为正集,A,B,C所对应的向量作为负集;

  使用这四个训练集分别进行训练,然后的得到四个训练结果文件。

  在测试的时候,把对应的测试向量分别利用这四个训练结果文件进行测试。

  最后每个测试都有一个结果f1(x),f2(x),f3(x),f4(x)。

  于是最终的结果便是这四个值中最大的一个作为分类结果。

评价:

  这种方法有种缺陷,因为训练集是1:M,这种情况下存在biased.因而不是很实用。可以在抽取数据集的时候,从完整的负集中再抽取三分之一作为训练负集。

一对一法(one-versus-one,简称OVO SVMs或者pairwise)

  其做法是在任意两类样本之间设计一个SVM,因此k个类别的样本就需要设计k(k-1)/2个SVM。

  当对一个未知样本进行分类时,最后得票最多的类别即为该未知样本的类别。

  Libsvm中的多类分类就是根据这个方法实现的。

  假设有四类A,B,C,D四类。在训练的时候我选择A,B; A,C; A,D; B,C; B,D;C,D所对应的向量作为训练集,然后得到六个训练结果,在测试的时候,把对应的向量分别对六个结果进行测试,然后采取投票形式,最后得到一组结果。

  投票是这样的:
  A=B=C=D=0;
  (A,B)-classifier 如果是A win,则A=A+1;otherwise,B=B+1;
  (A,C)-classifier 如果是A win,则A=A+1;otherwise, C=C+1;
  ...
  (C,D)-classifier 如果是A win,则C=C+1;otherwise,D=D+1;
  The decision is the Max(A,B,C,D)

评价:这种方法虽然好,但是当类别很多的时候,model的个数是n*(n-1)/2,代价还是相当大的。

层次支持向量机

层次分类法首先将所有类别分成两个子类,再将子类进一步划分成两个次级子类,如此循环,直到得到一个单独的类别为止。对层次支持向量机的详细说明可以参考论文《支持向量机在多类分类问题中的推广》(刘志刚,计算机工程与应用,2004)

作者: ZH奶酪——张贺
Q Q: 1203456195
邮箱: cheesezh@qq.com
出处: http://www.cnblogs.com/CheeseZH/
* 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

分类: b:Machine Learning

SVM多分类的几种方式相关推荐

  1. php 递归实现无限极分类和排序_无限极分类的两种方式,递归和引用

    说到无限极分类,比较常见的做法是在建表的时候,增加一个parnet_id字段用来区别自己所属的分类(是顶级分类还是子分类) 由于展示数据的时候,需要表达出这种所属关系,所以必然要在读取数据的时候进行一 ...

  2. php 无限极分销,PHP实现无限极分类的两种方式

    无限极分类说简单点就是一个类可以分成一个分子类,然后一个子类又可以分另一个子类这样无限分下去,就是好象windows可以新建一个文件夹,然后在这个文件夹里又可以建一个文件夹,PHP要实现无限极分类有两 ...

  3. 版本控制的分类(三种方式)

    大家好,今天分享版本控制的三大分类 第一种: 本地版本控制: 本地版本控制就是把版本信息放在你的自己的电脑里,可以对每一个版本做一个快照,要使用的时候,在你自己计算机上获取就可以了 第二种: 集中式版 ...

  4. php无限极分类并添加指定值,PHP实现无限极分类的两种方式,递归和引用

    function generateTree($array){//第一步 构造数据 $items = array();foreach($array as $value){$items[$value['i ...

  5. python3解释器执行not 1 and 1_编程语言的分类,python解释器多版本共存.执行python的两种方式,变量,用户与程序交互...

    一.编程语言的分类? 机器语言:直接使用二进制指令编程,直接操作硬件,必须考虑硬件细节. 汇编语言:用简写的英文标识符取代二进制去编写程序,直接操作硬件,必须考虑硬件细节. 高级语言:通过人类能够理解 ...

  6. libsvm多分类python,SVM实现多分类的三种方案

    转载自:http://www.cnblogs.com/CheeseZH/p/5265959.html SVM本身是一个二值分类器 SVM算法最初是为二值分类问题设计的,当处理多类问题时,就需要构造合适 ...

  7. 【Java基础】IO流概述分类、字节流写数据、字节流写数据的三种方式及写数据的两个小问题

    目录 一.IO流概述和分类 二.字节流写数据 三.字节流写数据的三种方式 四.字节流写数据的两个小问题 一.IO流概述和分类 IO流介绍: ● IO:输入/输出(Input/Output) ● 流:是 ...

  8. [Python从零到壹] 十四.机器学习之分类算法五万字总结全网首发(决策树、KNN、SVM、分类对比实验)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  9. 支持向量机(SVM)-文本分类 (1)

    谢谢你能看我一本正经的胡说八道. 0) 缘由 为什么要写这么一篇博文呢? 我在很多次面试中,都被问到SVM算法.惭愧的是,我近两年一直关注深度学习算法,对SVM的理论本来就掌握得不熟,加上时间一久,被 ...

  10. 支持向量机鸢尾花Iris数据集的SVM线性分类练习

    支持向量机&鸢尾花Iris数据集的SVM线性分类练习 摘要 一.SVM基础 1.三种支持向量机 2.非线性支持向量机 二.鸢尾花实例 1.认识鸢尾花 2.鸢尾花实例演示 3.使用多项式特征和核 ...

最新文章

  1. ServiceHot告诉你美国的程序员们各编程语言薪资情况
  2. 【若依(ruoyi)】swagger 生成接口文档
  3. Linux下查看TOMCAT控制台
  4. c语言mc协议,easymc - C语言开发的简易消息通道库
  5. TeamViewer免费版和付费版有什么不同
  6. 【R】函数-数学函数
  7. flexgdsgen
  8. 5年5亿美金,一年送出 1000 张训练卡,华为昇腾如何吸引AI开发者?
  9. GBDT算法原理以及实例理解
  10. 25 张图详解交换机:秒懂二层交换机的 16 个问题
  11. 怎么将几张pdf合并成一张_Adobe Acrobat怎么将多个PDF文件合并成一个pdf页面?
  12. Python图像处理之图片文字识别(OCR)
  13. 解决报错:Source does not fit in dest 异常
  14. python 聚合_Python数据聚合
  15. 配色工具Material Design
  16. 笔记本合上后再打开电源键常亮,无法唤醒,只能强制开机
  17. Python实例之调用百度API实现车牌识别
  18. 数据治理建设管理办法(参考)(粉丝福利)
  19. 访问学者在美国访学衣食住行的小妙招
  20. springcloud gateway

热门文章

  1. java p2p编程_JXTA-JAVA P2P网络编程技术(入门篇)
  2. 完成例如12345转换为中文大写1万两千三百四十五
  3. 7 Web前端性能优化
  4. 文档管理专家Aspose 2017年首季更新大合集
  5. 5个好用的开源网络监控工具
  6. 中科院-杨力祥视频教程 08课程
  7. 【操作系统】为什么需要内核
  8. 好程序员Java教程分享使用HttpClient抓取页面内容
  9. springboot毕设项目作业查重系统i667s(java+VUE+Mybatis+Maven+Mysql)
  10. python如何读取二进制文件为图片_python之读取二进制文件