我知道一类 SVM (OSVM) 是在考虑到没有负数据的情况下提出的,并且他们试图找到将正集和一些负锚点分开的决策边界,比如起源。
2011 年的一项工作提出了Exemplar SVM (ESVM),它训练了一个声称与 OSVM 不同的“单个每个类别的分类器”,因为 ESVM 并不“需要将示例映射到一个共同的特征空间中,在该空间上可以使用相似性内核计算”。我不太明白这意味着什么以及 ESVM 与 OSVM 有何不同。那么,它们有何不同?以及如何在 ESVM 中避免这种相似性核计算?
我知道一类 SVM (OSVM) 是在考虑到没有负数据的情况下提出的,并且他们试图找到将正集和一些负锚点分开的决策边界,比如起源。
2011 年的一项工作提出了Exemplar SVM (ESVM),它训练了一个声称与 OSVM 不同的“单个每个类别的分类器”,因为 ESVM 并不“需要将示例映射到一个共同的特征空间中,在该空间上可以使用相似性内核计算”。我不太明白这意味着什么以及 ESVM 与 OSVM 有何不同。那么,它们有何不同?以及如何在 ESVM 中避免这种相似性核计算?
(你可能想先看看下面的“表格”)
让我们从“经典”支持向量机开始。这些学习区分两个类别。您收集 A 类的一些示例,B 类的一些示例,并将它们都传递给 SVM 训练算法,该算法会找到最能将 A 与 B 区分开来的线/平面/超平面。这很有效——而且通常效果很好——当您想要区分明确定义和互斥的类:男人与女人、字母表中的字母等等。
但是,假设您想要识别“A”。您可以将此视为分类问题:如何区分“A”和“非 A”。收集一个由狗的图片组成的训练集相当容易,但是你的非狗训练集应该包含什么?由于有无数种不是狗的东西,你可能很难构建一个包含所有非犬类的全面而有代表性的训练集。相反,您可以考虑使用一类分类器。传统的二类分类器找到一个将 A 与 B 分开的(超)平面。一类 SVM 而是找到将所有类内点(“A”)与原点分开的线/平面/超平面;
Ensemble SVM“系统”实际上是许多二类SVM“子单元”的集合。每个子单元使用单个一个类别的正面例子和另一个类别的大量负面例子。因此,不是区分狗与非狗示例(标准的二类 SVM)或狗与起源(一类 SVM),而是每个子单元区分特定的狗(例如,“雷克斯”)和许多非狗例子。为每个正类示例训练单个子单元 SVM,因此您将有一个 SVM 用于 Rex,另一个用于 Fido,另一个用于您邻居的狗,它在早上 6 点吠叫,依此类推。这些子单元 SVM 的输出经过校准和组合,以确定测试数据中是否出现了狗,而不仅仅是特定样本之一。我想您也可以将各个子单元视为一类 SVM,其中坐标空间发生了偏移,因此单个正示例位于原点。
总而言之,主要区别在于:
后记:您曾问过他们所说的“[其他方法] 需要将示例映射到可以计算相似性内核的公共特征空间中”是什么意思。我认为它们的意思是,传统的二类 SVM 是在类的所有成员都在某种程度上相似的假设下运行的,因此您希望找到一个内核,它将大丹麦人和腊肠犬彼此靠近,但远离其他一切。相比之下,集成 SVM 系统通过将某物称为狗来回避这一点,如果它是足够大的丹麦犬或腊肠犬或贵宾犬,而不担心这些样本之间的关系。
简而言之,ESVM 模型是训练有素的 SVM 集合,可以将每个训练集元素与所有其他元素区分开来,而 OSVM 是训练有素的 SVM 集合,可以区分属于一个类的训练元素的每个子集。因此,如果您在训练集中有 300 个猫和 300 个狗的示例,ESVM 将生成600 个SVM,每个用于一只宠物,而 OSVM 将生成两个SVM(第一个用于所有猫,第二个用于所有狗)。
这样,ESVM 不需要找到整个类聚集的空间,而是找到这个单个元素是异常值的空间,这可能更简单,并且精度很高。据说召回是由合奏提供的。