你能概率性地解释支持向量机的输出吗?

数据挖掘 机器学习
2021-10-09 02:36:28

我正在尝试使用不同的分类算法(如随机森林、支持向量机、AdaBoost)构建二进制分类系统。我想使用这些分类器的输出来可视化分数。例如,当使用随机森林时,我想使用属于 A 类的样本的概率来构建一个从 0 到 100 的分数。假设随机森林输出一个概率(从 0 到 1),使用它作为分数是直观(我只需将其乘以 100)。然而,鉴于 SVM 输出的是分类而不是概率输出(即到超平面的距离,而不是概率),将到超平面的距离用作某种“伪概率”是否合法?例如,我会

我想确定我可以使用到超平面的距离作为伪概率,并且这个伪概率与随机森林输出的属于给定类的概率相当。例如,根据 SVM,属于 A 类的概率为 0.80 的样本与属于 A 类的(最小-最大变换)概率的另一个样本相同。

2个回答

从 SVM 中获得“概率”的一种标准方法是使用Platt scaling例如,请参阅此 Wikipedia 页面Stats.SE 上的此问题Platt 缩放涉及拟合逻辑回归模型以基于到超平面的距离来预测“概率”。

正如@DW 提到的,您可以使用Platt scaling

但是,请记住,概率估计可能与预测不一致。
来自 sklearn 文档

不用说,Platt 缩放中涉及的交叉验证对于大型数据集来说是一项昂贵的操作。此外,概率估计可能与分数不一致,因为分数的“argmax”可能不是概率的argmax。(例如,在二元分类中,根据 predict_proba,可以通过 predict 将样本标记为属于概率 < 1/2 的类别。) Platt 的方法也存在理论问题。如果需要置信度分数,但不一定是概率,则建议设置probability=False 并使用decision_function 而不是predict_proba。