我想展示一个过度拟合测试集的模型示例,并且不能很好地概括未来的数据。
我将新闻数据集分为3组:
train set length: 11314
test set length: 5500
future set length: 2031
我正在使用文本数据集并构建CountVectorizer
。
我正在创建一个网格搜索(没有交叉验证),每个循环将测试矢量化器上的一些参数('min_df','max_df')和模型LogisticRegression
上的一些参数('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
如何演示我为我的测试集配备过多的情况,以便它不能很好地概括为未来的数据?
答案 0 :(得分:2)
你有一个训练有关“火车组”数据的模型。
对这些数据执行分类任务后,得分为92%。
然后您将获取培训期间未见的新数据,例如“测试集”或“未来集”。
对任何这些看不见的数据集执行分类任务,得分为65%。
这正是过度拟合的模型的定义:它具有非常高的方差,在看到和看不见的数据之间的性能差异很大。
顺便说一句,考虑到您的具体情况,可能导致过度拟合的一些参数选择如下:
答案 1 :(得分:0)
我写了一篇关于奥拉的回答的评论,但我认为我真的应该将其作为一个实际答案进行扩展。
正如我所说,没有办法“过度拟合”测试集,因为过度拟合意味着一些消极的东西。理论模型适合92%的测试设置,但仅适合65%的训练设置是一个非常好的模型(假设您的设置是平衡的)。
我认为你所说的“测试集”实际上可能是一个验证集,而你的“未来集”实际上就是测试集。让我们澄清一下。
你有18,845个例子。你把它们分成3组。
训练集:模型可以查看和学习的示例。每当你的模型从这个集合中猜测时,你会告诉它它是对还是错,并相应地进行调整。
验证集:在每个纪元(运行训练集的时间)之后,您将检查这些示例中的模型,这是以前从未见过的。您将训练损失和训练准确性与验证损失和验证准确性进行比较。如果训练准确度>验证准确度或训练损失<验证损失,那么你的模型是过度拟合的,应该停止训练以避免过度拟合。您可以提前停止(提前停止)或添加辍学。您应不根据验证集中的示例向模型提供反馈。只要您遵循上述规则并且只要您的验证集充分混合,就不能过度拟合这些数据。
测试集:用于在培训完成后评估模型的准确性。这是重要的,因为它基于您的模型以前从未见过的示例。再次,你不能过度拟合这些数据。
在您的18,845个示例中,训练集中有11314个,验证集中有5500个,测试集中有2031个。