假设我们有 5 个不同类别的样本,如 A、B、C、D 和 E。在我的例子中,要使用“一对一分类”方法,必须有 5 个一对一的 SVM 分类器,一些如下所示:
SVM1:A 与休息
SVM2:B 与休息
SVM3:C 与休息
SVM4:D 与休息
SVM5:E 与休息
这 5 个分类器使用训练样本进行训练,每个分类器使用不同的内核。新输入的样本被传递给 5 个分类器中的每一个进行分类。然后考虑这样一种情况:实际上属于“A”类的新样本被 SVM1 分类为“A”的成员(这是正确的),同时它被分类为“D”的成员SVM4(不正确),问题是如何找出这两个 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 是相当糟糕的分类器来源,我会考虑使用实际的 ML 包,它可以让您访问此类标准工具。特别是 libsvm,OpenCV 环绕 - 具有此功能。
关于c++ - 如何使用多个 SVM 分类器 - 每个分类器都有一个特定的内核 - 作为 "one vs rest classification"方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36987065/