如何测试我的分类器是不是过拟合?

Posted

技术标签:

【中文标题】如何测试我的分类器是不是过拟合?【英文标题】:How can I test my classifier for overfitting?如何测试我的分类器是否过拟合? 【发布时间】:2014-02-08 10:30:51 【问题描述】:

我在一个可用的 .tsv 文件中有一组数据 here。我已经编写了几个分类器来确定给定网站是短暂的还是常青的。

现在,我想让它们变得更好。我从与人交谈中得知我的分类器“过度拟合”了数据;我正在寻找一种可靠的方法来证明这一点,以便下次我编写分类器时,我将能够运行测试,看看我是过拟合还是欠拟合。

这样做的最佳方法是什么?我愿意接受所有建议!

我已经花了数周时间在谷歌上搜索这个主题,但没有发现任何规范或可信的方法可以有效地做到这一点,因此我们将不胜感激。我会悬赏这个问题

编辑:

假设我的分类器吐出一个 .tsv 包含:

the website UID<tab>the likelihood it is to be ephemeral or evergreen, 0 being ephemeral, 1 being evergreen<tab>whether the page is ephemeral or evergreen

【问题讨论】:

只需收集足够多的数据(高达原始数据的 30%)并在其上运行分类器。如果性能明显低于您的训练集,则表示过度拟合 @VsevolodDyomkin 谢谢!因此,在我的测试数据上运行分类器,如果它得到 70% 的正确率并且它对我的训练数据得到 90% 的正确率,我是否过度拟合?抱歉,在我运行之前先澄清一下:) 任何分类器都会在训练数据上表现得非常好。您应该关注的是测试数据的准确性。通常,n 折交叉验证是确保没有过度拟合的好方法。 利用简单的内核,比如线性内核。 过拟合的简单定义是训练误差(基本上)低于测试误差。答案试图告诉你如何处理它 【参考方案1】:

人们尝试处理过拟合的方法有很多:

交叉验证,您可能还会看到它被称为 x 验证 详见 lejlot 的帖子 选择更简单的型号 线性分类器具有高偏差,因为模型必须是线性的,但由于高偏差,最优解的方差较低。这意味着在大量随机训练样本的情况下,您不会期望在最终模型中看到太大差异。 正则化是对抗过拟合的常见做法。 一般是在最小化函数中加一个项来完成 通常,该项是模型权重的平方和,因为它很容易区分。 通常有一个常数 C 与正则化项相关联。调整这个常数将增加/减少正则化的效果。应用于正则化的高权重通常有助于过度拟合。 C 应始终大于或等于零。 (注意:一些训练包使用 1/C 作为正则化权重。在这种情况下,越接近于 C 的值为零,正则化权重越大) 无论具体情况如何,正则化通过将模型偏向具有低正则化权重的解决方案来减少模型的方差。 最后,提升是一种神秘/神奇地不会过度拟合的训练方法。不确定是否有人发现了原因,但这是一个将高偏差低方差简单学习组合成高方差低偏差模型的过程。它非常漂亮。

【讨论】:

【参考方案2】:

检查分类器“效率”的最简单方法是执行交叉验证:

获取您的数据,我们称它们为 X 将 X 分成大小相等的 K 批 对于每个 i=1 到 K: 在除第 i 个批次之外的所有批次上训练您的分类器 第 i 个测试 返回平均结果

一个更重要的方面 - 如果您的分类器使用 任何 参数、一些常数、阈值等,这些参数未经训练,而是由用户给出,您不能只选择在上述程序。这必须在“在除 i'th 之外的所有批次上训练您的分类器”中以某种方式自动化。换句话说 - 您不能使用测试数据来拟合模型的任何参数。完成此操作后,有四种可能的结果:

训练误差很低,但远低于测试误差 - 过拟合 两个错误都很低 - 正常 两个错误都很高 - 欠拟合 训练错误高,但测试低 - 实施错误或数据集非常小

【讨论】:

我认为交叉验证最具破坏性的事情之一是人们倾向于使用它来代替开发集。 IE。运行交叉验证、观察结果、修改方法、观察新结果等。我想你可以将“方法”视为此处正在调整的参数;出于这个原因,我认为通常最好有单独的训练集、开发集和测试集,除非你受到可用数据的限制。 其次是@lejlot。我没有看到任何可以让这个答案变得不受欢迎的东西。

以上是关于如何测试我的分类器是不是过拟合?的主要内容,如果未能解决你的问题,请参考以下文章

如何正确转换和“拟合”文本分类器的值?

这是过拟合的情况吗? CNN图像分类器

不平衡数据集的 Knn 分类器

过拟合问题是什么?

交叉验证iris数据集

交叉验证iris数据集