1.首先从典型的svm讲起,假设我们用A,B两个类的数据,我们需要训练一个分类器来区分这两类数据,那么我们可以通过训练一个two-class SVM,找到A,B之间的分割超平面。
2.如果我现在只有A的数据,并且我只想识别某个instance是不是A,应该怎么办呢?一般的想法是,我有的A的数据之后,我去搜集一些不是A类别的数据,然后训练一个two-class SVM。但这么做的问题在于,非A的dataset很大,并且不是representative的。这样训练出来的SVM效果可能不好。one-class SVM其实就是找到一个最小的sphere包括所有的A的instance。
3.exemplar SVM其实是two-class SVM的subunit,这里正样本只有一个,但是负样本有很多。比如我们需要训练一个狗的分类器,我们可以训练一个two-class SVM(dog vs not dog),我们可以训练一个one-class SVM(dog vs origin),我们也可以对于每一只具体的狗的instance,训练一个exemplar SVM。然后把所有的exemplar SVM ensemble起来,每一个exemplar SVM的训练是可以并行进行的,他们训练的时候也可以看成是在训练一个one-class svm。
总结一下,区别在于:
training data
1. two-class svm: positive samples and negative samples
2. one-class svm: positive samples only
3. ensemble svm: positive and negative samples. each