使用 LIBSVM 进行分类的 100% 准确度 - 可能有啥问题?

Posted

技术标签:

【中文标题】使用 LIBSVM 进行分类的 100% 准确度 - 可能有啥问题?【英文标题】:100% accuracy in classification with LIBSVM- What could be wrong?使用 LIBSVM 进行分类的 100% 准确度 - 可能有什么问题? 【发布时间】:2017-02-05 09:13:51 【问题描述】:

我正在构建一个使用 LIBSVM 对恶性乳腺肿瘤进行分类的模型。这是我正在遵循的算法:

    使用反向消除进行特征选择。 使用网格搜索计算每组特征的 C 和 gamma。 使用 10 倍交叉验证推导出最优的 C 和 gamma。 使用上述步骤,找到可能的最佳特征子集和最大准确度。

问题是我在使用 LIBSVM 的 80:20 数据集上获得了 100% 的准确度。我没有排除任何功能,也没有对相同的数据进行培训和测试。任何提示我可能是错的?以下是一些其他相关信息:

cost = [2^-10, 2^-8, 2^-6, 2^-4, 2^-2, 0.5, 1,
        2, 2^2, 2^3, 2^4, 2^5, 2^6, 2^7, 2^8, 2^9, 2^10];
g = [2^-10, 2^-8, 2^-6, 2^-4, 2^-2, 2^-1, 1,
     2, 2^2, 2^3, 2^4, 2^5, 2^6, 2^7, 2^8, 2^9, 2^10];
most optimal C = 1;
most optimal gamma = 9.7656e-04;
Accuracy on 50:50 test:train dataset: 98.5337%
Accuracy on 70:30 test:train dataset: 99.5122%
Dataset used: University of Wisconsin breast cancer dataset (682 entries).

【问题讨论】:

【参考方案1】:

总结:你没有抱怨其他两个数据集; 100% 的准确度与这些相当一致。是什么让您认为您应该有较低的准确度?

让我们看看错误分类的计数:

50:50 data set -- 5 / 341 errors
70:30 data set -- 1 / 205 errors
80:20 data set -- 0 / 136 errors

80:20 的结果与您之前的结果非常一致:您的准确率已提高到(显然)超过 99.8%。

要求训练的最大准确性表明它可以很好地保留所有特征,但存在明显的过度拟合危险。但是,由于您显然发现前两个数据集是可以接受的,因此我直觉该数据集是高度自洽的。根据我的经验,我觉得这种一致性很奇怪,但你没有描述数据集的属性,甚至没有给我们样本或有用的链接来检查。

【讨论】:

这是一个非常标准的数据集。很抱歉评论晚了,但这里是链接:archive.ics.uci.edu/ml/machine-learning-databases/… 描述:archive.ics.uci.edu/ml/machine-learning-databases/… “相当标准的数据集”是一个疑问词;我想我从来没有遇到过。 :-) 是否有您希望看到错误分类的特定向量?除了仍然具有所有功能之外,您是否检查过模型的复杂性? 嘿伙计,我对 ML 很陌生。您能否详细说明如何检查模型的复杂性? 你能访问训练模型的系数吗?如果是这样,请检查它们,看看有多少特征对评分函数有显着贡献——比如对于某些边界分类向量来说至少有 10%。

以上是关于使用 LIBSVM 进行分类的 100% 准确度 - 可能有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章

使用java libsvm进行文本分类——模型、参数选择

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

即使使用训练数据,LIBSVM 也无法准确预测

使用 LIBSVM 进行测试

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

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