【问题标题】:How to combine LIBSVM probability estimates from two (or three) two class SVM classifiers.如何组合来自两个(或三个)两类 SVM 分类器的 LIBSVM 概率估计。
【发布时间】:2014-09-05 20:26:42
【问题描述】:

我的训练数据分为两类,假设是和否。数据代表三个任务,简单、中等和困难。一个人执行这些任务并因此被分类为两个类别之一。每个任务被独立分类,然后将结果组合起来。我正在使用 3 个独立训练的 SVM 分类器,然后对最终结果进行投票。

我希望提供与每个分类相关的置信度或概率度量。 LIBSVM 可以提供概率估计以及每个任务的分类(简单、中等和困难,比如PePmPd),但我不确定如何最好地将这些组合成最终的总体估计人的分类(我们称之为Pp)。

到目前为止,我的尝试都是简单的平均线:

Pp = (Pe + Pm + Pd) / 3

逆方差加权平均值(因为每个任务重复几次并且可以计算样本方差(VAReVARmVARd) - 在这种情况下,Pe 将是所有简单的示例):

Pp = (Pe/VARe + Pm/VARm + Pd/VARd) / (( 1/VARe ) + ( 1/VARm ) + ( 1/VARd ))

或乘法(假设这些事件是独立的,我不确定,因为底层任务是相关的):

Pp = Pe * Pm * Pd

乘法将提供一个非常低的数字,因此当投票结果非常明确时,如何将其解释为总体概率尚不清楚。

这三个选项中的任何一个是最好的还是我忽略了其他一些方法/细节?

【问题讨论】:

  • 为什么不将所有三个任务的特征添加到单个 2 类分类器中?为什么要尝试进行中间预测?
  • @BenAllison 因为我们发现这个带有投票的中间步骤提供了更好的结果,更准确。此外,这似乎更可靠,与缺失数据有关。

标签: svm probability libsvm


【解决方案1】:

根据您的评论,我将提出以下建议。如果您需要作为 SVM 执行此操作(并且正如您所说,这样做会获得更好的性能),请从中间分类器获取输出并将它们作为特征提供给最终分类器。更好的是,切换到多层神经网络,其中您的输入代表中间问题的输入,(第一个)隐藏层代表中间问题的输出,后续层代表您想要的最终决定。通过这种方式,您可以获得中间层的好处,但其输出经过优化以帮助进行最终预测,而不是其本身的准确性(我假设您并不真正关心)。

这些测试的正确生成模型可能如下所示:

  1. 生成智力/能力分数i
  2. 对于每个测试 t:根据 p_t(pass | i) 生成通过/失败

这是简化的,但我认为它应该说明你有一个潜在变量 i 依赖于这些测试(并且它们之间也有结构,因为大概是 p_easy(pass|i) > p_medium (pass|i) > p_hard(pass|i); 您可以将其建模为具有连续“硬度”特征的逻辑回归)。我怀疑您要问的是一种对 i 的某些阈值函数进行推断的方法,但是您希望以分类方式而不是概率模型来进行推断。这很好,但是如果不显式编码潜在变量和测试之间的结构,它会很困难(并且没有概率的平均值可以解释缺失的结构)。

希望对您有所帮助——如果我做出了不合理的假设,请随时纠正。

【讨论】:

  • 我曾想过这样做,将第一个分类器的输出用作新分类器的输入,我会进一步研究,谢谢。
  • 您的假设 p_easy(pass|i) > p_medium(pass|i) > p_hard(pass|i) 在我们的案例中并不完全正确,即使是这样,艰巨的任务似乎是to hard,它作为分类参数的价值比其他的要小。这并不是真正的通过/失败任务,更多的是“移动你的身体,你是在痛苦还是在假装痛苦”。
  • 是的,我认为它更多的是一种期望,而不是一种硬性约束——但我期待它是一种考试(学生类型,而不是患者类型)。我会想更多,也许会修改
猜你喜欢
  • 2015-05-06
  • 2013-05-18
  • 2014-08-11
  • 2012-12-06
  • 2014-08-05
  • 2014-04-07
  • 2015-07-29
  • 2013-01-13
  • 2020-04-16
相关资源
最近更新 更多