对于概率多类分类器,我们可以获得新点的隶属概率到每个班级; 如果有 3 个班级,假设我们得到,因此 x 的最可能类别是. 现在假设我们有一个多类支持向量机,我们可以获得分数每个类(根据与超线的距离);如果有 3 个班级,假设我们得到, 在这种情况下,第一、第二和第三最可能的类别如何?(不将这些分数转换为概率)?通常我会得到正值和负值,例如
根据与超线的距离的 SVM 置信度
实际上可以从支持向量机中获得概率,这可能比任意“分数”值更有用和更易于解释。有几种方法可以做到这一点:一个合理的起点是Platt (1999)。
大多数 SVM 包/库都实现了类似的功能(例如,-b 1 选项导致LibSVM产生概率)。如果您要自己滚动,您应该意识到存在一些潜在的数字问题,这些问题在Lin、Lin 和 Weng (2007)的这篇笔记中进行了总结。他们还提供了一些伪代码,这也可能会有所帮助。
编辑以回应您的评论:我有点不清楚为什么您更喜欢分数而不是概率,特别是因为您可以用最少的额外努力获得概率。尽管如此,大多数概率计算似乎都是从点和超平面之间的距离得出的。如果你看一下 Platt 论文的第 2 部分,他会遍历动机并说:
边缘之间的类条件密度显然是指数的。贝叶斯关于两个指数的规则建议使用 sigmoid 的参数形式:
这个 sigmoid 模型等价于假设 SVM 的输出与正训练示例的对数似然成正比。[MK:在别处被定义为原始 SVM 输出]。
方法部分的其余部分描述了如何拟合和sigmoid 的参数。在引言(第 1.0 和 1.1 节)中,Platt 回顾了 Vapnik、Wahba 和 Hasti & Tibshirani 的其他一些方法。这些方法还使用到超平面的距离之类的东西,以各种方式进行操作。这些似乎都表明到超平面的距离包含一些有用的信息,所以我想你可以使用原始距离作为一些(非线性)置信度度量。
如果训练数据集合理平衡并具有标准化特征,我将使用 SVM 分数作为对属于各个类别的置信度的度量。将分数转换为类概率量的所谓校准方法,例如 Platt scaling,通常使用单调函数(如逻辑函数)将分数映射到概率。因此,如果您只想比较学习的 SVM 模型在属于可能类的特定测试数据点中的置信度,您可以只比较得分值(而不是它们的绝对值),因为模型是从中学习的训练数据集相当平衡,没有任何不寻常的怪癖。