机器学习: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平方个分类器要减少很多
但问题在于存在误差累计,一旦犯错,后面都错的情况