如何使用多个SVM分类器(每个使用特定核函数)作为“一对多分类”方案?

假设我们有5个不同类别的样本,如A、B、C、D和E。在我的情况下,为了使用“一对多分类”方法,必须有5个一对多SVM分类器,类似于下面的设置:

SVM1: A 对抗其他

SVM2: B 对抗其他

SVM3: C 对抗其他

SVM4: D 对抗其他

SVM5: E 对抗其他

这5个分类器使用训练样本进行训练,并且每个分类器使用不同的核函数。当有新的样本输入时,会被传递给这5个分类器进行分类。假设一个实际属于类别“A”的新样本被SVM1正确地分类为“A”,但同时被SVM4错误地分类为“D”,问题在于如何确定这两个SVM中的哪一个预测是正确的。我知道必须有一些标准来比较这两个预测的置信度。我使用的是OpenCV 2.4.8,通过以下语法可以预测新样本所属的类别标签:

float Response = SVM.predict(new_test_sample,false);

我还知道可以通过以下语法来确定新样本与SVM决策边界的距离:

float Distanc = SVM.predict(test, true);

由于我对每个SVM分类器使用了不同的核函数和参数(因此我知道不能简单地通过比较决策边界的距离来比较预测置信度…),我的问题是如何比较这些分类器的预测置信度,以便最终确定新样本属于哪个类别?谢谢大家


回答:

在这种情况下,通常的做法是使用Platt的缩放方法。有效地讲,这只是在你的决策函数之上拟合一个逻辑回归,以“校准”你的估计,使它们可以比较。结果,你会得到每个分类器的概率估计P(y|x),现在可以跨多个模型进行比较。

一般来说,OpenCV作为分类器的来源相当不好,我会考虑使用实际的机器学习包,这样你可以访问这些标准工具。特别是OpenCV包装的libsvm – 具有这个功能。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注