对数据集样本进行超参数调整不是一个好主意吗?


19

我有一个包含140000个示例和30个功能的数据集,我正在为其训练几个分类器以进行二进制分类(SVM,逻辑回归,随机森林等)

在许多情况下,使用网格搜索或随机搜索对整个数据集进行超参数调整在时间上过于昂贵。

我开始使用以下技术

  • 子样本我的数据集
  • 使用获得的分数来调整超参数
  • 使用获得的参数来使用整个数据集训练模型

为了评估在第二步骤I使用每组参数sklearnGridSearchCV与CV = 10。为了评估在第三步中创建的最终模型,我使用sklearncross_val_predict。从这种意义上来说,我评估模型时会遗漏10%的数据,然后对其余模型进行训练,然后对10%的预测准确性进行迭代10次,然后取平均分数。

让我担心的是,我在整个数据集上进行训练所获得的预测准确性确实接近我为最佳参数集调整参数时所获得的评估(每组经过测试的参数均输出通过平均10-交叉验证结果)。

在大多数情况下,cross_val_predict使用所有训练示例(整个数据集)测得的准确性略高于返回的最佳参数评估值。

为了说明这一点,这里是对一组参数的评估(在比我上面描述的更小的数据集上,但是效果是相同的)

Best parameters set found on development set:
{'kernel': 'rbf', 'C': 9, 'gamma': 0.1}
Scores for all sets of parameters
0.851 (+/-0.006) for {'kernel': 'rbf', 'C': 3, 'gamma': 0.5}
0.852 (+/-0.006) for {'kernel': 'rbf', 'C': 3, 'gamma': 0.1}
0.829 (+/-0.006) for {'kernel': 'rbf', 'C': 3, 'gamma': 0.001}
0.853 (+/-0.006) for {'kernel': 'rbf', 'C': 9, 'gamma': 0.1}
...

这是cross_val_predict我使用最佳参数对整个数据集进行训练后得到的平均得分(来自)

precision    recall  f1-score   support

      0       0.86      0.85      0.86     15417
      1       0.86      0.87      0.87     16561

avg / total       0.86      0.86      0.86     31978

acc score: 0.863750078179
roc au score: 0.863370490059
[[13147  2270]
 [ 2087 14474]]

如您所见,对整个数据集进行训练可以改善结果。我也验证了严重关注模型(例如使用默认值或随机值Cgamma)导致更糟糕的预测精度。

总的来说,我认为调整子集上的超参数不是理想的选择,但可能会导致相对较好的结果,而不必等待太久。例如,在使用该方法之前,我使用了optunity包来调整整个数据集的超参数。此过程将需要3-5天才能完成,并且所产生的结果要么具有很高的精确度,要么具有非常好的召回率,但不能兼而有之。因此,尽管对于每个班级,精确度或召回率都很高(比我其他任何一个都高分类器已实现)f1的测量值确实很低。相反,使用后一种方法会导致一些小时的培训和更好的f1测量。

我担心的是:

我会限制分类的准确性吗?我是否仅通过对子集进行调整来避免使用数据集可以提供的所有预测能力?如果发生这种性能损害,是否会受到某种因素的限制?


请阐明导致接近预测准确性的两种方法。您是否将数据分为训练集和验证集,其中验证集仅用于优化超参数,而不用于训练?
Iliyan Bobev

看到我更新的问题。我希望现在更加清楚。
LetsPlayYahtzee

Answers:


15

除了吉姆(+1)的答案:对于某些分类器,超参数值取决于训练示例的数量,例如对于线性SVM,主要优化问题是

一世ñ1个2w2+C一世=1个ξ一世

服从

ÿ一世X一世wb1个-ξ一世一种ñdξ一世0一世

请注意,优化问题基本上是对数据不匹配项(对的求和)和正则化项的度量,但是通常的重新粒度化参数与数据不匹配项一起放置。显然,我们拥有的训练模式数量越多,总和就越大,应越小,以保持权重大小的相同平衡。 Çξ一世C

SVM的一些实现重新参数化为

一世ñ1个2w2+C一世=1个ξ一世

为了补偿,但有些则没有。因此,需要考虑的另一点是,最佳超参数是否取决于训练示例的数量。

我同意Jim的观点,过度拟合模型选择标准可能更成问题,但如果即使子样本中也有足够的数据,那么这可能就不是一个实质性的问题。


11

对数据集样本进行超参数调整不是一个好主意吗?

答:是的,因为您可能会因选择的列车测试拆分而导致在特定测试集上过度拟合(超参数)。

我会限制分类的准确性吗?

答:是的,但是常见的机器学习智慧是:使用最佳超参数,说,在整个数据集上重新拟合模型,并使该模型成为新的,看不见的,将来的案例的最终模型。λ

我是否仅通过对子集进行调整来避免使用数据集可以提供的所有预测能力?

答:请参阅先前的答案。

如果发生这种性能损害,是否会受到某种因素的限制?

答:同上。

我使用10倍交叉来衡量我的准确性,因为我也用来评估参数

答:请注意,这与标题中的要求不同。10倍CV会迭代10个以上的测试列,以得出对概化性的“无偏”(偏少)估计(在这种情况下,以准确性衡量)。10折简历完全可以解决我在第一个答案中谈到的问题。

我对整个数据集进行训练所获得的预测准确性

答:这是一个“样本中”措施,可能会产生乐观的偏见。但是请不要忘记您有很多案例,而且功能相对较少,因此这种乐观偏见可能不会成为问题。机器学习块:“最佳正则化器是更多数据。”

[续]总是非常接近我在调整参数以获得最佳参数集时获得的评估。

答:请参阅先前的答案。看一下超参数图:调整会减少误差并减少多少?用您的话来说,调优并没有做太多。

您可以如下进行测试。进行70%-30%的火车测试拆分。比较以下各项的预测效果:

  1. 在火车上训练的未调整模型,
  2. 在火车上训练的10倍CV调整模型。

让两个模型预测测试集。如果性能非常接近,则调整不会做太多。如果在调整模型方面性能有所不同,则继续调整方法。


1

我将回答人工神经网络(ANN)。

ANN的超参数可以定义其学习过程(例如,学习率或小批量大小)或其体系结构(例如,隐藏单元或层的数量)。

在训练集的子集上调整架构超参数可能不是一个好主意(除非您的训练集确实缺乏多样性,即增加训练集的大小不会增加ANN的性能),因为架构超参数会改变ANN的容量。

我不太担心在训练集的子集上调整定义学习过程的超参数,但我想应该凭经验进行验证。



0

您可以使用支持多保真度评估的超参数优化算法,即对数据子集进行评估,以便获得有关整个数据集的最佳超参数值的粗略但有用的估计。这样的方法通常允许减少运行超参数优化所需的总计算成本。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.