过度拟合和数据分割

时间:2016-02-02 06:01:37

标签: machine-learning

我们说我有一个数据文件:


指数product_buying_date,COL1,COL2
0,2013-01-16,34,杰克
1,2013-01-12,43,莫莉
2,2013-01-21,21,亚当
3,2014-01-09,54,皮尔斯
4,2014-01-17,38,戈德堡
5,2015-01-05,72,钱德勒
..
..
2000000,2015-01-27,32,麦克

有一些更多的数据,我有一个目标变量y。根据您的方便假设一些东西。

现在我知道我们将数据分为两部分,即训练和测试。然后我们将Train划分为70:30,用70%建立模型并用30%验证它。我们调整参数,以便模型不会过度拟合。然后用测试数据预测。例如:我将2000000分成两个相等的部分。 1000000是火车,我把它除以验证,即1000000的30%,即300000和70%是我建造模型的地方,即700000。

问题:上述逻辑取决于原始数据的分割方式吗?

通常我们将数据混洗,然后将其分解为训练,验证和测试。 (火车+验证=火车)。 (请不要在这里混淆) 但如果分裂是交替的呢?就像当我首先在Train和Test中划分它时,我给偶数行测试和奇数行训练。 (这里的数据最初是基于" product_buying_date'列进行排序的,所以当我将它分成奇数行和偶数行时,它会被统一分割。

当我使用Train构建模型时,我会过度使用它,以便获得最大的AUC和测试数据。

问题:在这种情况下,是否过度拟合?

1 个答案:

答案 0 :(得分:1)

  

问题:上述逻辑取决于原始数据的方式   分割?

如果数据集很大(数十万),您可以随机拆分数据,您不应该有任何问题,但如果数据集很小,那么您可以采用不同的方法,如交叉验证来生成数据集。交叉验证表明您对您的训练集进行了n次训练验证。

假设您有2000个数据点,则将其拆分为

1000 - 训练数据集

1000 - 测试数据集。

5交叉验证意味着您将制作5个800/200培训/验证数据集。

  

问题:在这种情况下,不是过度拟合吗?

机器学习的第一条规则是,您不要触摸测试数据集。这是一个不应该触及的冬青数据集。 如果您过度拟合测试数据以获得最大AUC分数,那么验证数据集将没有任何意义。任何ml算法的首要目标是减少泛化误差,即算法应该能够在看不见的数据上表现良好。如果您使用测试数据调整算法。你将无法达到这个标准。 在交叉验证中,您也不会触摸测试集。您选择算法。使用验证数据集调整其参数,完成后,将算法应用于测试数据集,这是您的最终得分。