区分多分类问题的OneVsOne和OneVsAll方法

OneVsAll和OneVsOne是对于二分类器如支持向量机解决多分类问题的两种解决办法。这篇文章主要讲一下他们之间的区别。


假如数据有N个类别,OneVsAll将对N类中的每个类别训练一个分类器,对于class i,将label==i的样本设为正类,其余样本设为负类,以此训练出分类器i。这种方法会导致样本不均衡,一般的svm可能不起作用。


区分多分类问题的OneVsOne和OneVsAll方法


OneVsOne方法则需要每两类就训练一个分类器,这样N个类别需要训练N(N-1)/ 2个分类器。

区分多分类问题的OneVsOne和OneVsAll方法


sklearn中有这两种方法的实现,最后附上分别使用两种方法的svm代码:

from sklearn import svm
from sklearn.multiclass import OneVsOneClassifier,OneVsRestClassifier
ova_svc = OneVsRestClassifier(svm.LinearSVC(random_state = 0))
ovo_svc = OneVsOneClassifier(svm.LinearSVC(random_state = 0))
ova_svc.fit(X_train,y_train)
ovo_svc.fit(X_train,y_train)
y_pred1 = ova_svc.predict(X_test)
y_pred2 = ovo_svc.predict(X_test)



评论