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

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)

libsvm多分类python,SVM实现多分类的三种方案相关推荐

  1. ML之FE:数据处理—特征工程之特征选择常用方法之基于搜索策略的三种分类、基于评价准则划分的三种分类(Filter/Wrapper/Embedded)及其代码实现

    ML之FE:数据处理-特征工程之特征选择常用方法之基于搜索策略的三种分类.基于评价准则划分的三种分类(Filter/Wrapper/Embedded)及其代码实现 目录 Wrapper包裹式/封装式- ...

  2. python csv库,Python 中导入csv数据的三种方法

    Python 中导入csv数据的三种方法,具体内容如下所示: 1.通过标准的Python库导入CSV文件: Python提供了一个标准的类库CSV文件.这个类库中的reader()函数用来导入CSV文 ...

  3. python打开文件不存在-Python判断文件是否存在的三种方法

    原标题:Python判断文件是否存在的三种方法 通常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错.所以最好在做任何操作之前,先判断文件是否存在. 这里将介绍三种判断文件 ...

  4. python 命令-python解析命令行参数的三种方法详解

    这篇文章主要介绍了python解析命令行参数的三种方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 python解析命令行参数主要有三种方法: ...

  5. python判断字符串合法,详解Python判定IP地址合法性的三种方法 python中判断一个字符串是否是IP地址...

    html 中 鼠标放在标签上会显示小手状,其它标签在其他标签上,美工给加了一些样式,鼠标放上去也显示小手状.有哪位大手状样式 有什么不懂的前端问题可以去菜鸟驿站.全都是泡沫,只一刹的花火,所谓的友情, ...

  6. python判断回文数字,Python判断回文数的三种方法实例

    需求: 从控制台输入一个五位数,如果是回文数就打印"是回文数",否则打印"不是回文数",例如:11111 12321 12221 "回文"是 ...

  7. python 爬虫 数据抓取的三种方式

    python 爬虫   数据抓取的三种方式 常用抽取网页数据的方式有三种:正则表达式.Beautiful Soup.lxml 1.正则表达式 正则表达式有个很大的缺点是难以构造.可读性差.不易适用未来 ...

  8. 在python里调用C函数的三种方式

    一个python项目快速开发完以后,常常针对瓶颈进行优化,其中一种方式就是对于性能至关重要的部分,使用C重写,这已经是一种最佳实践.如果整个项目完全使用C,开发效率就没有保障.python运行环境(C ...

  9. Python 高等数学应用 求导数的三种方式

    Python 高等数学应用 求导数的三种方式 方式一 使用SymPy的diff 函数, 可以得到函数的导数表达式,给出数学表达式里的数学符号描述符 本例使用了此方法 方式二 使用spicy.misc模 ...

最新文章

  1. 比特币现金今日价格_比特币现金价格_今日比特币现金价格_06.12 上午 比特币现金价格 6060.87
  2. datatable 前台和后台数据格式
  3. PCB布线技术 很好很强大
  4. uclibc和glibc的差别
  5. 模拟上帝之手的对抗博弈——GAN背后的数学原理
  6. 0726------Linux基础----------线程池
  7. Facebook 开源的快速文本分类器 FastTex
  8. mysql输出重定向_将MySQL输出内容写入(重定向到)文件
  9. 2019年第一份DApp调查报告出炉
  10. 推荐几个微信小程序开源项目
  11. Kafka下载安装及部署
  12. AI发票扫描识别sdk软件接口
  13. 设计模式第一篇---懒汉模式
  14. 推荐几个高质量图片网站,再也不怕没图装X了
  15. linux 设置网卡mac地址命令,linux/Centos下查看和修改网卡Mac地址(ifconfig命令)
  16. 几个内核函数:filp_open、filp_read、IS_ERR、ERR_PTR、PTR_ERR
  17. 旅游订票订酒店团购(APP,JAVA后台管理,MYSQL)
  18. 重装系统后电脑耳机插前面没有声音输出怎么办?
  19. 元宇宙到底是什么?让我们来看看科技达人们是怎么讲的。
  20. socket.io简易教程(群聊,发送图片,分组,私聊)

热门文章

  1. 通过 IDEA 检查代码 Inspect Code,查找无用的方法、类等问题
  2. JavaScript简单实现论坛发帖(留言)
  3. ISO19702毒性测试
  4. c语言课程设计 学生成绩管理系统
  5. PDF控件PDFToolkit VCL V5.0.0.612发布 | 修复了PDF查看器和打印机
  6. 32位古董级CPU-N270群晖系统安装手册
  7. java反编译教程_Java反编译工具 - JD-GUI 下载地址及使用手册
  8. 2023年美赛C题 预测Wordle结果Predicting Wordle Results这题太简单了吧
  9. 海康威视网络摄像头开发流程(五)------- 直播页面测试
  10. 网易云音乐开发--通过网易云音乐api,游客登录页面验证效果实现