机器学习:SVM做多分类问题

   

引言

   

SVM做二分类问题很简单明了,但是如何用二分类构建多分类问题,自己查找了部分资料,发现普遍分为两种,一种是直接法,直接求解多目标函数优化问题,但这种方法计算量很大,不实用,另外一种是间接法,通过多个二分类来实现多分类,常见的有一对多和一对一两种

   

最后针对一对一要构建n平方个二分类器,如果n过大,那么分类器个数过多的情况,提出一种有向无环图的方法,这种方法只需要构建n个分类器,但存在误差累计的问题

   

直接法求多目标优化问题(不实用)

   

一次性考虑所有样本,并求解一个多目标函数的优化问题,一串心得到多个分类的面

   

   

每个区域对应一个类别

   

但这种一次性求解的方法计算量太大,大到无法实用的地步

   

一对多

   

将类别1看作正类,其余2,3,4,5看作负类(一对多),这样拿一个样本来,可以告诉你是不是属于类别1的,如果不属于,再在2,3,4,5中继续寻找

   

存在两个问题:

   

一个是一个样本可能同时属于几个类

   

那么看一下这个样本到各个超平面的距离,哪个远判给哪个

   

另一个是一个样本可能不属于任何一个

   

这样这个样本属于第6类,这个类的数目远大于5类之和,所以会造成数据偏斜问题

   

一对一

   

将类别1看作正类,不降2,3,4,5都看作负类,而是从1-5中任意选取2种类别来分类,得到5*4/2=10中分类器,每一个分类器只告诉你是第一类还是第二类,或者是第一类还是第三类,统计所有分类器的票数,根据票数得到分类结果

   

这种问题不会有样本不属于任何一类的情形出现

   

但如果类别数比较大,比如1000,那么分类器的数目要上升到类别数的平方级别

   

复杂度较大

   

有向无环图

   

不会走回头路 >>> 减少分类器的数目

   

   

先问是第一类还是第五类

   

如果是第五类,再问是第二类还是第五类

   

如果是第五类,然后再问是第三类还是第五类

   

这样的话得到最后的结果不管怎样都只调用N个分类器,N是类别的数目,比起上面要调用N平方个分类器要减少很多

   

但问题在于存在误差累计,一旦犯错,后面都错的情况

posted @ 2015-04-28 15:02  keedor  阅读(7050)  评论(0编辑  收藏  举报