Machine learning 我如何能够自愿地过度拟合文本分类模型

Machine learning 我如何能够自愿地过度拟合文本分类模型,machine-learning,classification,logistic-regression,Machine Learning,Classification,Logistic Regression,我想展示一个模型的例子,该模型过度拟合测试集,不能很好地概括未来的数据 我将新闻数据集分为3组: train set length: 11314 test set length: 5500 future set length: 2031 我正在使用一个文本数据集并构建一个countvectorier。 我正在创建一个网格搜索(无交叉验证),每个循环将测试向量器上的一些参数('min_-df','max_-df')和我的模型上的一些参数logisticReturnal('C','fit_-int

我想展示一个模型的例子,该模型过度拟合测试集,不能很好地概括未来的数据

我将新闻数据集分为3组:

train set length: 11314
test set length: 5500
future set length: 2031
我正在使用一个文本数据集并构建一个
countvectorier
。 我正在创建一个网格搜索(无交叉验证),每个循环将测试向量器上的一些参数('min_-df','max_-df')和我的模型上的一些参数
logisticReturnal
('C','fit_-intercept','tol',…)。 我得到的最好结果是:

({'binary': False, 'max_df': 1.0, 'min_df': 1},
{'C': 0.1, 'fit_intercept': True, 'tol': 0.0001},
 test set score: 0.64018181818181819,
 training set score: 0.92902598550468451)
但是现在如果我在未来的测试集上运行它,我将得到与测试集类似的分数:

clf.score(X_future, y_future): 0.6509108813392418

我如何证明我过度拟合了测试集,因此无法很好地推广到未来的数据?

您有一个在某些数据“训练集”上训练的模型

对这些数据执行分类任务,您的得分为92%

然后获取培训期间未看到的新数据,如“测试集”或“未来集”

对这些看不见的数据集中的任何一个执行分类任务,您的得分为65%

这正是过度拟合模型的定义:它具有非常高的方差,可见和不可见数据之间的性能差异很大

顺便说一下,考虑到您的具体情况,可能导致过度拟合的一些参数选择如下:

  • 最小值df=0
  • 逻辑回归的高C值(这意味着低正则化)

我对阿尔索拉的答案写了一篇评论,但我认为我真的应该把它作为一个实际的答案加以扩展

正如我所说的,没有办法“过度拟合”测试集,因为过度拟合意味着负面的东西。理论模型符合测试集的92%,但只符合训练集的65%,这确实是一个非常好的模型(假设你的测试集是平衡的)

我认为您所指的“测试集”实际上可能是一个验证集,而您的“未来集”实际上就是测试集。让我们澄清一下

您有一组18845个示例。你把它们分成三组

培训集:模型可以查看和学习的示例。每次你的模型从这个集合中做出猜测时,你都会告诉它是对还是错,并相应地进行调整

验证集:在每个历元(在训练集中运行的时间)之后,您都会在这些示例上检查模型,这是以前从未见过的。将训练损失和训练精度与验证损失和验证精度进行比较。如果“训练精度>验证精度”或“训练损失<验证损失”,则表示您的模型过度拟合,应停止训练以避免过度拟合。您可以提前停止(提前停止)或添加退出。您不应该根据验证集中的示例向模型提供反馈。只要遵循上述规则,并且验证集充分混合,就不能过度拟合此数据

测试集:用于在培训完成后评估模型的准确性。这一点很重要,因为它基于您的模型以前从未见过的示例。同样,您不能过度拟合此数据


在您的18845个示例中,培训集中有11314个,验证集中有5500个,测试集中有2031个。谢谢,这一点非常清楚。我知道有可能构建一个模型,该模型将过度拟合测试集而不是训练集。你能想出一个策略来生成这样的模型吗?因为我使用测试集上的分数来调整参数,理论上可能会发生这种情况,但这很难做到。没有办法“过度拟合”测试集,因为过度拟合意味着一些负面的东西。理论模型符合测试集的92%,但只符合训练集的65%,这确实是一个非常好的模型(假设你的测试集是平衡的)。也不要使用测试集来调整参数。编辑:我认为你所说的“测试集”实际上可能是一个验证集,而你的“未来集”实际上就是测试集。是的,你是对的。给你们所有的信息,我想让这个视频我看到的意义。我试图模拟Kaggle用户在使用私有数据集时发生的情况。似乎他们在公共测试数据集上做得很好,但在私有测试数据集上做得不好,所以我猜他们使用公共测试数据集作为验证测试(而且他们过度拟合),并且没有很好地推广到未来的数据(私有测试数据集),谢谢Tryer,你是对的。我试图模拟一些Kaggle用户在这段视频中犯的错误,他们基本上过度拟合了公共测试数据集,无法在私有数据集上进行概括。我试着用一个简单的例子来模拟发生在他们身上的事情。如果我真的要解决这个问题,我将使用kfold对训练集进行交叉验证,创建许多不同的验证集,然后使用测试集来检查它的泛化性,但我试着做的是模拟一些人所犯的错误(正如你在我之前的评论中可以看到的)“ReleleOK,我明白。一个模型在验证集上做得很好,但是在测试集上很差的一种方式是,如果验证集与测试集没有很好的混合。作为一个例子,考虑一个具有3个类的任务。如果测试集被均匀地划分(每个类的33%个例子)。,但验证集划分得很差(比如80%的类别1、10%的类别2、10%的类别),那么这将导致同样的现象。我不确定如何为您的问题设计这样的情况,但可能故意使验证集不平衡可能会实现。是的,我明白了。现在我正在跳出框框思考,这些用户可能会将公共测试集混合到培训集中,并对整个过程进行培训。这样做您可以做到吗将在公共测试集上运行良好,因为它将过拟合。