使用 libsvm 提高标准化准确性的建议

Posted

技术标签:

【中文标题】使用 libsvm 提高标准化准确性的建议【英文标题】:Suggestions to improve my normalized accuracy with libsvm 【发布时间】:2013-11-20 08:36:57 【问题描述】:

我在尝试使用 libsvm 对数据进行分类时遇到问题。我的训练和测试数据非常不平衡。当我对 svm 参数进行网格搜索并使用类的权重训练我的数据时,测试给出了 96.8113% 的准确度。但由于测试数据不平衡,所有正确的预测值都来自负类,大于正类。

我尝试了很多方法,从更改权重到更改 gamma 和成本值,但每次尝试我的归一化准确度(考虑了正类和负类)都较低。使用默认的 grid.py 参数训练 50% 的正例和 50% 的负例,我的准确率非常低 (18.4234%)。

我想知道问题在于我的描述(如何构建特征向量),不平衡(我应该以其他方式使用平衡数据吗?)还是我应该更改我的分类器?

【问题讨论】:

【参考方案1】:

更好的数据总是有帮助的。

我认为不平衡是问题的一部分。但问题的更重要部分是您如何评估分类器。考虑到数据中正面和负面的分布来评估准确性几乎没有用。 50% 和 50% 的训练以及 99% 和 1% 的分布数据测试也是如此。

现实生活中存在一些问题,就像您正在研究的问题一样(正面与负面之间存在很大的不平衡)。让我举两个例子:

信息检索:给定一个庞大集合中的所有文档,返回与搜索词 q 相关的子集。

人脸检测:这张大图标记了所有存在人脸的位置。

这类系统的许多方法都是基于分类器的。要评估两个分类器,通常使用两个工具:ROC curves、Precision Recall 曲线和F-score。这些工具提供了一种更有原则的方法来评估一个分类器何时比另一个更好。

【讨论】:

以上是关于使用 libsvm 提高标准化准确性的建议的主要内容,如果未能解决你的问题,请参考以下文章

使用 libsvm 训练多类时的数据要求是啥?

如何使用带有词袋直方图的 libsvm

Libsvm使用资料

MLP中实现dropout,批标准化

如何利用python使用libsvm

为啥进行python标准化