libsvm多分类python,SVM实现多分类的三种方案
转载自: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实现多分类的三种方案相关推荐
- ML之FE:数据处理—特征工程之特征选择常用方法之基于搜索策略的三种分类、基于评价准则划分的三种分类(Filter/Wrapper/Embedded)及其代码实现
ML之FE:数据处理-特征工程之特征选择常用方法之基于搜索策略的三种分类.基于评价准则划分的三种分类(Filter/Wrapper/Embedded)及其代码实现 目录 Wrapper包裹式/封装式- ...
- python csv库,Python 中导入csv数据的三种方法
Python 中导入csv数据的三种方法,具体内容如下所示: 1.通过标准的Python库导入CSV文件: Python提供了一个标准的类库CSV文件.这个类库中的reader()函数用来导入CSV文 ...
- python打开文件不存在-Python判断文件是否存在的三种方法
原标题:Python判断文件是否存在的三种方法 通常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错.所以最好在做任何操作之前,先判断文件是否存在. 这里将介绍三种判断文件 ...
- python 命令-python解析命令行参数的三种方法详解
这篇文章主要介绍了python解析命令行参数的三种方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 python解析命令行参数主要有三种方法: ...
- python判断字符串合法,详解Python判定IP地址合法性的三种方法 python中判断一个字符串是否是IP地址...
html 中 鼠标放在标签上会显示小手状,其它标签在其他标签上,美工给加了一些样式,鼠标放上去也显示小手状.有哪位大手状样式 有什么不懂的前端问题可以去菜鸟驿站.全都是泡沫,只一刹的花火,所谓的友情, ...
- python判断回文数字,Python判断回文数的三种方法实例
需求: 从控制台输入一个五位数,如果是回文数就打印"是回文数",否则打印"不是回文数",例如:11111 12321 12221 "回文"是 ...
- python 爬虫 数据抓取的三种方式
python 爬虫 数据抓取的三种方式 常用抽取网页数据的方式有三种:正则表达式.Beautiful Soup.lxml 1.正则表达式 正则表达式有个很大的缺点是难以构造.可读性差.不易适用未来 ...
- 在python里调用C函数的三种方式
一个python项目快速开发完以后,常常针对瓶颈进行优化,其中一种方式就是对于性能至关重要的部分,使用C重写,这已经是一种最佳实践.如果整个项目完全使用C,开发效率就没有保障.python运行环境(C ...
- Python 高等数学应用 求导数的三种方式
Python 高等数学应用 求导数的三种方式 方式一 使用SymPy的diff 函数, 可以得到函数的导数表达式,给出数学表达式里的数学符号描述符 本例使用了此方法 方式二 使用spicy.misc模 ...
最新文章
- 比特币现金今日价格_比特币现金价格_今日比特币现金价格_06.12 上午 比特币现金价格 6060.87
- datatable 前台和后台数据格式
- PCB布线技术 很好很强大
- uclibc和glibc的差别
- 模拟上帝之手的对抗博弈——GAN背后的数学原理
- 0726------Linux基础----------线程池
- Facebook 开源的快速文本分类器 FastTex
- mysql输出重定向_将MySQL输出内容写入(重定向到)文件
- 2019年第一份DApp调查报告出炉
- 推荐几个微信小程序开源项目
- Kafka下载安装及部署
- AI发票扫描识别sdk软件接口
- 设计模式第一篇---懒汉模式
- 推荐几个高质量图片网站,再也不怕没图装X了
- linux 设置网卡mac地址命令,linux/Centos下查看和修改网卡Mac地址(ifconfig命令)
- 几个内核函数:filp_open、filp_read、IS_ERR、ERR_PTR、PTR_ERR
- 旅游订票订酒店团购(APP,JAVA后台管理,MYSQL)
- 重装系统后电脑耳机插前面没有声音输出怎么办?
- 元宇宙到底是什么?让我们来看看科技达人们是怎么讲的。
- socket.io简易教程(群聊,发送图片,分组,私聊)
热门文章
- 通过 IDEA 检查代码 Inspect Code,查找无用的方法、类等问题
- JavaScript简单实现论坛发帖(留言)
- ISO19702毒性测试
- c语言课程设计 学生成绩管理系统
- PDF控件PDFToolkit VCL V5.0.0.612发布 | 修复了PDF查看器和打印机
- 32位古董级CPU-N270群晖系统安装手册
- java反编译教程_Java反编译工具 - JD-GUI 下载地址及使用手册
- 2023年美赛C题 预测Wordle结果Predicting Wordle Results这题太简单了吧
- 海康威视网络摄像头开发流程(五)------- 直播页面测试
- 网易云音乐开发--通过网易云音乐api,游客登录页面验证效果实现