如何通过 LIBSVM 使用 platt 缩放和交叉验证?

Posted

技术标签:

【中文标题】如何通过 LIBSVM 使用 platt 缩放和交叉验证?【英文标题】:How to use platt scaling with cross-validation using LIBSVM? 【发布时间】:2016-07-30 21:46:44 【问题描述】:

有人能给我举个例子来说明如何在 libsvm 中的多类 SVM 分类中使用 platt scaling 和 k-fold 交叉验证吗?

我将整个数据集分为两部分:训练和测试。对于交叉验证,我对训练数据进行分区,其中 1 个分区用于测试,其余分区用于训练多类 SVM 分类器。

【问题讨论】:

【参考方案1】:

Platt 缩放与您的分区或多类设置无关。 Platt 缩放是每个单独的二进制 SVM 的内部技术,它仅使用训练数据。这实际上只是在您学习的 SVM 预测之上拟合逻辑回归。

【讨论】:

"交叉验证是一种比保留集更好的方法来估计参数 A 和 B。在 3 倍 CV 中,训练集分为 3 部分。每个 SVM 是对 3 部分中的 2 部分进行排列训练,并在剩余的第 3 部分评估 fi。所有三组 fi 的并集可以形成 sigmoid 的训练集(也可以用于调整 SVM 参数)。上面我引用了 Platt 的论文,但我似乎不明白它在谈论哪个训练集。它是我用来执行 10 倍 CV 来调整 C 和 Gamma 的相同训练集吗? 输入参数:deci = SVM 决策值数组 label = 布尔数组:示例是否标记为 +1?先验 1 = 正样本的数量 先验 0 = 负样本的数量 输出:A,B = sigmoid 的参数,但在上述论文状态中提供的伪代码中是 platt 的输入/输出参数。 'deci' 参数是来自 libsvmpredict 测试数据的输出决策分数吗?对于“标签”,这些标签对应于哪个示例?对应哪一套,没有。的积极和没有。它需要哪些反面例子? 在使用 K-fold CV 调整 C 和 gamma 时,我们是否也对测试集(每个折叠的 1 个分区)使用 platt 缩放,或者仅在之后的最终测试集上使用 platt 就足够了最后在整个数据集上进行训练。

以上是关于如何通过 LIBSVM 使用 platt 缩放和交叉验证?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 LIBSVM 模型(使用 LIBSVM 保存)读入 PySpark?

Libsvm - 预测结果为 NULL

在 scikit-learn SVM 中缩放数据

libsvm使用

R e1071 预测与 libsvm 不同

如何使用 LibSVM 进行“多分类”方法?