对于支持向量机,其是一个二类分类器,但是对于多分类,SVM也可以实现。主要方法就是训练多个二类分类器。
一、多分类方式
1、一对所有(One-Versus-All OVA)
给定m个类,需要训练m个二类分类器。其中的分类器 i 是将 i 类数据设置为类1(正类),其它所有m-1个i类以外的类共同设置为类2(负类),这样,针对每一个类都需要训练一个二类分类器,最后,我们一共有 m 个分类器。对于一个需要分类的数据 x,将使用投票的方式来确定x的类别。比如分类器 i 对数据 x 进行预测,如果获得的是正类结果,就说明用分类器 i 对 x 进行分类的结果是: x 属于 i 类,那么,类i获得一票。如果获得的是负类结果,那说明 x 属于 i 类以外的其他类,那么,除 i 以外的每个类都获得一票。最后统计得票最多的类,将是x的类属性。
2、所有对所有(All-Versus-All AVA)
给定m个类,对m个类中的每两个类都训练一个分类器,总共的二类分类器个数为 m(m-1)/2 .比如有三个类,1,2,3,那么需要有三个分类器,分别是针对:1和2类,1和3类,2和3类。对于一个需要分类的数据x,它需要经过所有分类器的预测,也同样使用投票的方式来决定x最终的类属性。但是,此方法与”一对所有”方法相比,需要的分类器较多,并且因为在分类预测时,可能存在多个类票数相同的情况,从而使得数据x属于多个类别,影响分类精度。
对于多分类在matlab中的实现来说,matlab自带的svm分类函数只能使用函数实现二分类,多分类问题不能直接解决,需要根据上面提到的多分类的方法,自己实现。虽然matlab自带的函数不能直接解决多酚类问题,但是我们可以应用libsvm工具包。libsvm工具包采用第二种“多对多”的方法来直接实现多分类,可以解决的分类问题(包括C- SVC、n - SVC )、回归问题(包括e - SVR、n - SVR )以及分布估计(one-class-SVM )等,并提供了线性、多项式、径向基和S形函数四种常用的核函数供选择。
二、用libsvm在matlab中实现多分类(训练函数svmtrain+预测函数svmpredict)
对于libsvm中训练模型的函数svmtrain来