如何使用多个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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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