在训练 SVM 时惩罚误报

Posted

技术标签:

【中文标题】在训练 SVM 时惩罚误报【英文标题】:Penalize false positives in training SVM 【发布时间】:2015-03-12 01:13:09 【问题描述】:

我正在尝试使用 Encog 内部的 SVM 训练二进制正/负分类器。在这种特定情况下,数据集高度不平衡,负例与正例的比例大约为 30:1。

在模型的训练中,我故意对负例进行欠采样,以大致平衡给予模型的正例/负例,这种方法对我解决其他问题很有效。然而,在这种情况下,最终模型的误报率高得令人无法接受,在不平衡的测试集上进行测试时,误报的数量超过了真阳性的数量。

关于如何训练以降低误报率有什么建议吗?使用不平衡数据(或使用更接近观察到的平衡)进行训练会减少总体正面预测的数量,但似乎不会增加真阳性与假阳性的比率。

【问题讨论】:

这已在另一篇文章中得到解答。 ***.com/questions/18078084/… 【参考方案1】:

听起来您的数据集是不可分离的。在这种情况下,不平衡的集合可能会导致性能不佳。在 libsvm 中,您可以为具有很少表示的标签分配更高的权重。

首先我建议保留所有底片,因为底片的特征空间可能要大得多,如果保留所有样本,则更有可能被覆盖。其次,您必须决定要优化什么,例如(TP+TN)/(TP+TN+FP+FN)。现在,您对正标签使用不同的权重值运行训练/评估,以根据您的定义找到最大性能。最终性能取决于数据的可分离性。

【讨论】:

以上是关于在训练 SVM 时惩罚误报的主要内容,如果未能解决你的问题,请参考以下文章

cvSVM 训练对 HOGDescriptor 产生较差的结果

使用线性内核调整 SVM 时,R 插入符号异常缓慢

SVM 训练 C++ OpenCV

SVM用于线性回归

在训练 SVM 对图像进行分类时设置具有序列错误的数组元素

使用 scikit-learn 训练数据时,SVM 多类分类停止