SVM用于多类分类

时间:2024-03-14 08:31:47
SVM用于多类分类

svm本身是一种典型的二分类器,那如何处理现实中的多分类问题呢?
常用的有三种方法:

一、一对多
也就是“一对其余”(One-against-All) 的方式,就是每次仍然解一个两类分类的问题。
这样对于n个样本会得到n个分类器。
但是这种方式可能会出现分类重叠现象或者不可分类现象
而且由于“其余”的数据集过大,这样其实就人为造成了“数据偏斜”的问题

二、一对一
每次选择一个类作为正样本,负样本只用选其余的一个类,这样就避免了数据偏斜的问题。
很明显可以看出这种方法训练出的分类个数是k*(k-1)/2,虽然分类器的个数比上面多了,但是训练阶段所用的总时间却比“一类对其余”方法少很多。
这种方法可能使多个分类器指向同一个类别,所以可以采用“投票”的方式确定哪个类别:哪个分类器获得的票数多就是哪个分类器。
这种方式也会有分类重叠的现象,但是不会有不可分类的情况,因为不可能所有类别的票数都是0。
但是也很容易发现这种方法是分类器的数目呈平方级上升。

、DAG SVM
假设有1、2、3、4四个类,那么可以按照如下方式训练分类器( 这是一个有向无环图,因此这种方法也叫做DAG SVM
SVM用于多类分类
这种方式减少了分类器的数量,分类速度飞快,而且也没有分类重叠和不可分类现象。
但是假如一开始的分类器回答错误,那么后面的分类器没有办法纠正,错误会一直向下累积。
为了减少这种错误累积,根节点的选取至关重要。

4. 基于决策树的方法

    其实上面2,3方法需要训练的分类器的数量都是可怕的,基于决策树的方法可以减少学习二类分类器个数的问题。对于一个数据集,我们可以采用一些聚类的方法(例如Kmeas)把数据集分成两个子类,然后对两个子类进一步划分,如此循环,直到子类中只包含一个类别为止。这样,就得到了一个倒立的二叉树。最后,在二叉树各决策节点训练支持向量机分类器,这里我们就可以发现我们需要的分类器已经减少了很多了。这里,我们构造不同的树的结构(不一定是完全二叉树),就会得到不同的方法。但是使用完全二叉树结构时,需要学习的二类分类器数目是最少的。

5. 基于纠错输出编码的方法

    假设一个数据集一共有K类,我们使用L种两类分类器(不仅仅是SVM),就会得到L个分类结果,每个结果用+1和-1来表示。这样,对于K类数据集,我们就可以学习到一个K*L的矩阵。

    然后,来了一个测试样本,我们就用同一样的方法得到测试样本的长度为L的向量,拿这个向量和K*L矩阵中的每一行做Hamming distance,距离最小的即为该测试样本的分类结果。

    以上5类方法都各有优缺点,具体应用的时候可以选择效果最好的一种使用。不过现在也已经出现了很多直接面向多类分类的数据挖掘方法。后面我们再一一介绍。