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

时间:2014-01-19 06:29:09

标签: python machine-learning artificial-intelligence classification scikit-learn

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

现在,我想让它们变得更好。通过与人交谈,我知道我的分类器“过度拟合”数据;我正在寻找的是一个可靠的方法来证明这一点,以便下次我编写一个分类器时,我将能够进行测试,看看我是否过度拟合或不合适。

这样做的最佳方式是什么?我对所有建议持开放态度!

我花了几周时间搜索这个主题,发现没有规范或可靠的方式来有效地做到这一点,所以任何回复都将受到赞赏。我将在这个问题上给予赏金

编辑:

让我们假设我的clasifier吐出一个包含以下内容的.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

2 个答案:

答案 0 :(得分:3)

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

  • 获取您的数据,我们称之为X
  • 将X拆分为K批次相同的尺寸
  • 对于每个i = 1到K:
    • 在所有批次上训练你的分类器,但我
    • 第i次测试
  • 返回平均结果

另一个重要方面 - 如果您的分类器使用任何参数,某些常量,阈值等未经过培训,而是由用户提供,您不能只选择效果最佳的参数。上述程序。这个必须以某种方式自动化“在所有批次中训练你的分类器但是我”。换句话说 - 您不能使用测试数据来为模型拟合任何参数。完成此操作后,有四种可能的结果:

  • 训练错误很少,但远低于测试错误 - 过度拟合
  • 两个错误都很低 - 好的
  • 两个错误都很高 - 不合适
  • 培训错误很高,但测试很少 - 实施中的错误或非常小的数据集

答案 1 :(得分:1)

人们试图处理过度拟合的方法很多:

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