【问题标题】:SVM CV error decreases with number of features increased, but it's overfit. Why?SVM CV 误差随着特征数量的增加而减少,但它是过拟合的。为什么?
【发布时间】:2020-02-01 21:13:20
【问题描述】:

我正在使用 RBF 内核 libsvm 进行分类任务。 我的数据集大约有 700 个向量,非常不平衡,大约 20% 正:80% 负。

我使用了几种特征评级算法,例如 libsvm 中的 boruta 或 fselect.py 来构建范围特征评级列表,然后从该列表中选择一些顶级特征。

我使用重复(大约 20 次)10 倍 CV 进行 SVM 参数 C 和 G 搜索。 ROC曲线的曲线下面积(AUC)值估计的误差。

问题是,当我获取更多特征时,AUC 值变得相当高(特征越多,AUC 值越大,超过 0.95),但测试误差在某些时候会增加,即它与大量特征过拟合!

特征的最佳数量位于中间的某个位置(在我的例子中大约是 30 个)。

增加 CV 中的重复或折叠数并没有多大帮助

我怎样才能避免这种情况? 我希望正确实现的 CV 总能在特征数量方面给出良好的正则化结果,即它应该给出具有大量特征的小 AUC 值。

【问题讨论】:

    标签: machine-learning svm


    【解决方案1】:

    交叉验证与过度拟合无关,不能使您的模型泛化到看不见的数据。相反,它可能让您估计您的模型在处理新的和不可见的数据时的表现。因此,不要期望通过实施交叉验证或更改折叠数来提高测试准确性。
    您的问题的答案在于对机器学习的基本直觉:您拥有的功能越多,训练一个好的模型所需的数据就越多。如果您的模型将许多特征作为输入,但缺乏足够的数据进行训练,那么无论实现得有多好,它都无法很好地泛化和执行。

    现在,一些建议:

    • 如果具有最佳功能数量(如您所说的大约 30 个)的性能足够好,请坚持下去。
    • 如果您需要更好的性能并认为性能不佳是由于特征数量较少,请尝试使用其他特征减少技术(例如主成分分析)来减少特征数量,同时尽可能保留其有用数据。李>
    • 如果上述方法都不能很好地发挥作用,请尝试其他分类算法以找到最佳方法。

    【讨论】:

    • 好吧,根据这个:elitedatascience.com/overfitting-in-machine-learning 和许多其他来源,CV 是一种防止过拟合的方法:“交叉验证是防止过拟合的有力预防措施”。我忘了提一下:所有特征集(从 20 到 100)中支持向量的数量几乎保持不变:大约是数据集大小的 30%。因此,这意味着模型之间的泛化程度相同。那么,如何改进 CV 以使其与测试更加一致?
    猜你喜欢
    • 2013-01-09
    • 2017-01-23
    • 1970-01-01
    • 2021-11-29
    • 2017-03-18
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 2020-01-06
    相关资源
    最近更新 更多