如何在不使用和拆分测试集的情况下将我的数据集拆分为训练和验证?

Posted

技术标签:

【中文标题】如何在不使用和拆分测试集的情况下将我的数据集拆分为训练和验证?【英文标题】:How can i split my dataset into training and validation with no using and spliting test set? 【发布时间】:2020-09-27 16:09:01 【问题描述】:

我知道这对于训练和验证集拆分是错误的,但你可以在这里理解我真正需要的东西。我只想使用训练集和验证集。我不需要任何测试集

#Data Split
from sklearn.model_selection import train_test_split 

x_train,x_val,y_train,y_val=train_test_split(x,y,test_size=0.976,random_state=0)

【问题讨论】:

【参考方案1】:

测试就是验证;

x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=0)

x_testy_test 是您的验证测试或测试集。他们是一样的。它只是xy 样本总数的一小部分,用于验证您的模型是否在尚未经过训练的数据上。

通过使用random_state,您可以获得可重现的结果。换句话说,每次运行脚本时都会得到相同的集合。

【讨论】:

你的意思是我可以将这些 x_test 和 y_test 用于验证集吗? 是的,在旧版本的 sklearn 中,它被称为 sklearn.cross_validation.train_test_split,现在移至 sklearn.model_selection.train_test_split。【参考方案2】:

术语validation set 和test set 有时可以互换使用,有时表示稍有不同。 @Sy Ker 的观点是正确的:您使用的 sklearn 模块确实为您提供了一个验证集,尽管该模块中使用的术语是 test。实际上,您所做的是获取用于训练的数据和用于评估的数据,无论使用什么术语。我添加这个答案是为了回答您实际上可能需要某种形式的测试集。

使用test_train_split 将为您提供一对允许您训练模型的集合(在百分比参数中指定比例 - 通常应该为 10-25% 左右,以确保它具有代表性子样本)。但我建议更广泛地考虑这个过程。

只需使用数据集底部的一些y% 行,就可以简单地(并且很可能是不正确地)拆分数据以用于测试和模型评估。如果正在进行标准化/标准化,请确保它在测试集上进行训练并将其应用于评估集,以便对两者应用相同的处理。

sklearn 和其他人也可以非常简单地进行交叉验证,在这种情况下,应该对“验证”集有一点不同的看法。交叉验证将获取您的一部分数据并将其细分为更小的组,以便重复测试和培训通过。在这种情况下,您可能会从train_test_split 中的数据拆分开始,并将在这种情况下设置的“测试”保留为完全保留——这意味着交叉验证过程从不使用(或“看到”)测试/训练过程中的数据。

然后,您从test_train_split 流程获得的测试集可以用作一组很好的数据,用于测试模型如何针对从未见过的数据执行。您可能会看到这被称为“holdout”集,或者再次称为“test”和/或“validation”的某个版本。

This link 对交叉验证和保持集有一个快速但直观的描述。

【讨论】:

以上是关于如何在不使用和拆分测试集的情况下将我的数据集拆分为训练和验证?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不拆分数据帧的情况下传递不同的数据集进行训练和测试。 (Python)?

QDA |训练和测试数据集的长度 |如何拆分训练数据和测试数据?

如何在不破坏单词的情况下将字符串拆分为行?

试图将我的数据框拆分为具有代表性的训练集和测试集

使用 tensorflow 将数据集拆分为训练和测试

Pandas:如何在不使用 scikit 的情况下进行交叉验证?