来自 libsvm 的 100% 准确度

Posted

技术标签:

【中文标题】来自 libsvm 的 100% 准确度【英文标题】:100% accuracy from libsvm 【发布时间】:2014-02-19 01:06:42 【问题描述】:

我正在使用 libSVM(带有线性内核)训练和交叉验证(10 倍)数据。

数据包含 1800 个 fMRI 强度体素,表示为单个数据点。 svm-train 的训练集文件中有大约 88 个数据点。

训练集文件如下所示:

+1 1:0.9 2:-0.2 ... 1800:0.1

-1 1:0.6 2:0.9 ... 1800:-0.98

...

我还应该提到我正在使用 svm-train 脚本(与 libSVM 包一起提供)。

问题在于,在运行 svm-train 时 - 结果是 100% 准确度!

这似乎并不能反映真实的分类结果! 数据不是不平衡的,因为

#datapoints labeled +1 == #datpoints labeled -1

我还检查了缩放器(缩放正确),还尝试随机更改标签以查看它如何影响准确性 - 它从 100% 下降到 97.9%。

你能帮我理解这个问题吗? 如果是这样,我该怎么做才能解决它?

谢谢,

女星

【问题讨论】:

我认为没有问题。您的 SVM 可以轻松地为训练集提供 100% 的拟合,这非常好。这称为过度拟合en.wikipedia.org/wiki/Overfitting 我认为您需要阅读样本内和样本外的训练。 这个问题似乎跑题了,因为它是关于机器学习的。 如何阅读样本内和样本外的训练? 我的意思是阅读一些关于这个主题的文献 :) 这个问题太大了,无法概括为答案,有很多关于适当训练和交叉验证的研究。如果你不知道这意味着什么,这是你在进行任何编码之前需要知道的...... 嗨,所以基本上你认为如果我将体素强度从 1800 减少到更小的数量,可能会得到更好的结果,也许是通过选择正确的代表性体素? 【参考方案1】:

确保在svmtrain 选项中包含'-v 10'。我不确定您的 100% 准确度来自训练样本或验证样本。由于样本数比特征数少得多,因此很有可能获得 100% 的训练准确率。但如果你的模型存在过拟合,验证准确率可能会很低。

【讨论】:

感谢您的回答:) 我使用了 -v 10 选项。过度拟合可能是问题所在。不过,它应该会导致高结果吗? 有可能。我建议你缩小你感兴趣的区域,从而减少体素数量(特征),然后再次观察交叉验证结果。

以上是关于来自 libsvm 的 100% 准确度的主要内容,如果未能解决你的问题,请参考以下文章

帮助——LibSVM 100% 的准确度?

将 LIBSVM grid.py 用于不平衡数据?

LibSVM 的准确度下降

LIBSVM:未知的预测标签给出的准确度为 0%

如何使用 Libsvm - SVM_Predict.exe 计算“准确度”

为啥 LibSvm 准确率不超过 50%?