如何测试分类器是否过度匹配?

2024-05-16 23:19:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我在.tsv文件中有一组可用的数据here。我写了几个分类来决定一个网站是昙花一现还是常青。在

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

最好的办法是什么?我愿意接受所有的建议!在

我花了几个星期的时间在google上搜索了这个话题,但没有找到一个规范的或可信的方法来有效地做到这一点,所以任何回应都将受到赞赏。我将悬赏给这个问题。在

编辑:

假设我的分类师吐出一个.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

Tags: or文件the数据方法heretsv分类器
2条回答

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

  • 把你的数据,我们称之为X
  • 将X分成K批大小相等的批
  • 对于i=1到K:
    • 在所有批次中训练你的分类器
    • 在i'th测试
  • 返回平均结果

另一个更重要的方面是,如果你的分类器使用任何参数、一些常数、阈值等,这些参数不是经过训练的,而是由用户提供的,那么在上述过程中,你不能只选择给出最佳结果的参数。这个必须在“除了i'th以外的所有批次上训练分类器”中以某种方式自动化。换句话说,您不能使用测试数据来拟合模型中的任何参数。一旦这样做,有四种可能的结果:

  • 训练误差较低,但远低于测试误差-过拟合
  • 两个错误均为低-正常
  • 这两个错误都是高度不合拍的
  • 训练误差很高,但测试误差很小-实现中的误差或非常小的数据集

人们有很多方法来处理过度合身的问题:

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

相关问题 更多 >