从前面SVM学习中可以看出来,SVM是一种典型的两类分类器。而现实中要解决的问题,往往是多类的问题。如何由两类分类器得到多类分类器,就是一个值得研究的问题。

以文本分类为例,现成的方法有很多,其中一劳永逸的方法,就是真的一次性考虑所有样本,并求解一个多目标函数的优化问题,一次性得到多个分类面,就像下图这样:

多个超平面把空间划分为多个区域,每个区域对应一个类别,给一篇文章,看它落在哪个区域就知道了它的分类。 只可惜这种算法还基本停留在纸面上,因为一次性求解的方法计算量实在太大,大到无法实用的地步。

目前,存在的方法主要有:

1. “1-V-R方式”,就是每次仍然解一个两类分类的问题。比如我们有5个类别,首先把类别1的样本定为正样本,其余的样本合起来定为负样本,得到一个两类分类器,它能够指出新的样本是不是第1类的;然后我们把类别2的样本定为正样本,把1、3、4、5的样本合起来定为负样本,得到一个分类器,如此下去,最终可以得到5个这样的两类分类器。这种方法的好处是每个优化问题的规模比较小,而且分类的时候速度很快(对于k类问题,把其中某一类的n个训练样本视为一类,所有其他类别归为另一类,因此只有k个分类器)。

但有时可能会出现两种特殊情况,某样本属于多个类别(分类重叠现象)或者是某样本没有判别为任何类别(不可分类现象)。而且,如果各个类别的样本数目是差不多的,“其余”那一类样本数总是要数倍于正类,这就人为的造成了上一节所说的“数据集偏斜”问题。

2. “1-V-1方式”,也就是我们所说的one-against-one方式。这种方法把其中的任意两类构造一个分类器,共有(k-1)×k/2个分类器。虽然分类器的数目多了,但是在训练阶段所用的总时间却比“一类对其余”方法少很多。

最后预测中如果出现分类重叠现象,可以采用竞争方式(各个分类器向k个类别投票,取得票最高类)。但是如果类别数非常大时,要调用的分类器数目会达到类别数的平方量级,预测的运算量不可小觑。

3. “有向无环图(DAG-SVM)”,该方法在训练阶段采用1-V-1方式,而判别阶段采用一种两向无环图的方式。

如果类别数是k,则只调用k-1个分类器即可。但是如果开始的分类器回答错误,那么后面的分类器是无论如何也无法纠正它的错误的,其实对下面每一层的分类器都存在这种错误向下累积的现象。也有一些方法可以改善整体效果,我们总希望根节点少犯错误为好,因此参与第一次分类的两个类别,最好是差别特别大,或者取在两类分类中正确率最高的那个分类器作根节点,或者我们让两类分类器在分类的时候,不光输出类别的标签,还输出一个类似“置信度”,当它对自己的结果不太自信的时候,我们就不光按照它的输出走,它可会按照一定的概率走向另一分支。

LibSVM采用的是1-V-1方式,因为这种方式思路简单,并且许多实践证实效果比1-V-R方式要好。对于 nr_class 个类的组合方式为:

for(i=;i<nr_class;i++)
{
for(j=i+;i<nr_class;j++)
{类i–V–类j}
}

8.SVM用于多分类的更多相关文章

  1. SVM用于线性回归

    SVM用于线性回归 方法分析 在样本数据集()中,不是简单的离散值,而是连续值.如在线性回归中,预测房价.与线性回归类型,目标函数是正则平方误差函数: 在SVM回归算法中,目的是训练出超平面,采用作为 ...

  2. SVM 实现多分类思路

    svm 是针对二分类问题, 如果要进行多分类, 无非就是多训练几个svm呗 OVR (one versus rest) 对于k个类别(k>2) 的情况, 训练k个svm, 其中, 第j个svm用 ...

  3. 用于文本分类的RNN-Attention网络

    用于文本分类的RNN-Attention网络 https://blog.csdn.net/thriving_fcl/article/details/73381217 Attention机制在NLP上最 ...

  4. 将迁移学习用于文本分类 《 Universal Language Model Fine-tuning for Text Classification》

    将迁移学习用于文本分类 < Universal Language Model Fine-tuning for Text Classification> 2018-07-27 20:07:4 ...

  5. SVM入门(十)将SVM用于多类分类

    源地址:http://www.blogjava.net/zhenandaci/archive/2009/03/26/262113.html 从 SVM的那几张图可以看出来,SVM是一种典型的两类分类器 ...

  6. 将SVM用于多类分类

    转自:http://www.lining0806.com/%E5%B0%86svm%E7%94%A8%E4%BA%8E%E5%A4%9A%E7%B1%BB%E5%88%86%E7%B1%BB/ SVM ...

  7. SVM实现多分类的三种方案

    SVM本身是一个二值分类器 SVM算法最初是为二值分类问题设计的,当处理多类问题时,就需要构造合适的多类分类器. 目前,构造SVM多类分类器的方法主要有两类 (1)直接法,直接在目标函数上进行修改,将 ...

  8. SVM处理多分类问题(one-versus-rest和one-versus-one的不同)

    SVM算法最初是为二值分类问题设计的,当处理多类问题时,就需要构造合适的多类分类器. 目前,构造SVM多类分类器的方法主要有两类:一类是直接法,直接在目标函数上进行修改,将多个分类面的参数求解合并到一 ...

  9. SVM实现邮件分类

    首先学习一下svm分类的使用. 主要有以下步骤: Loading and Visualizing Dataj Training Linear SVM Implementing Gaussian Ker ...

随机推荐

  1. SQL Server相关书籍

    SQL Server相关书籍 (排名不分先后) Microsoft SQL Server 企业级平台管理实践 SQL Server 2008数据库技术内幕 SQL Server性能调优实战 SQL S ...

  2. 在离线环境中使用.NET Core

    在离线环境中使用.NET Core 0x00 写在开始 很早开始就对.NET Core比较关注,一改微软之前给人的印象,变得轻量.开源.跨平台.最近打算试着在工作中使用.但工作是在与互联网完全隔离的网 ...

  3. Asp.net Boilerplate源码中NotNullAttribute的用处

    看Asp.net Boilerplate 1.1.3.0源码时发现有一个NotNullAttribute的定义和27处的引用,就是不知道它的作用,当然顾名思义是可以的,就是不知道它是怎么判断的,在哪里 ...

  4. 【微框架】Maven +SpringBoot 集成 阿里大鱼 短信接口详解与Demo

    Maven+springboot+阿里大于短信验证服务 纠结点:Maven库没有sdk,需要解决 Maven打包找不到相关类,需要解决 ps:最近好久没有写点东西了,项目太紧,今天来一篇 一.本文简介 ...

  5. 将 instance 部署到 OVS Local Network - 每天5分钟玩转 OpenStack(130)

    上一节创建了 OVS 本地网络 first_local_net,今天我们会部署一个 instance 到该网络并分析网络结构.launch 一个 instance,选择 first_local_net ...

  6. [.NET] 利用 async & await 进行异步 IO 操作

    利用 async & await 进行异步 IO 操作 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/6082673.html  序 上次,博主 ...

  7. CRL快速开发框架系列教程十二(MongoDB支持)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  8. MAC Osx PHP安装指导

    php.ini的位置 Mac OS X中没有默认的php.ini文件,但是有对应的模版文件php.ini.default,位于/private/etc/php.ini.default 或者说 /etc ...

  9. 微信小程序中利用时间选择器和js无计算实现定时器(将字符串或秒数转换成倒计时)

    转载注明出处 改成了一个单独的js文件,并修改代码增加了通用性,点击这里查看 今天写小程序,有一个需求就是用户选择时间,然后我这边就要开始倒计时. 因为小程序的限制,所以直接选用时间选择器作为选择定时 ...

  10. 如何使用swing创建一个BeatBox

    首先,我们需要回顾一些内容(2017-01-04 14:32:14): 1.Swing组件 Swing的组件(component,或者称之为元件),是较widget更为正确的术语,它们就是会放在GUI ...