【问题标题】:Extracting a test set from a training dataset从训练数据集中提取测试集
【发布时间】:2012-07-06 08:20:21
【问题描述】:

我有一个数据集(其中每个数据都是带有相应类标签的属性向量)。我想将数据集拆分为训练集和测试集。无论如何可以自动执行此操作吗?

【问题讨论】:

  • 你用的是什么软件?大多数数据挖掘软件都在软件中提供此功能。
  • @GordonLinoff 告诉我使用什么。我不使用任何软件,我只是用 C++ 和 Python 编程。
  • @Anony-Mousse 但是 Weka 不会为我拆分数据集。我想获取两个文件 data_train.txt 和 data_test.txt,以便以后在我的实现中使用它们。
  • 哦,当然可以:weka.wikispaces.com/…
  • 我建议您重新提出问题,更好地描述您要完成的工作。您似乎正在自己实施数据挖掘软件。数据库从哪里来?为什么不直接使用 C++ 将数据拆分为两个文件?

标签: database dataset data-mining cluster-analysis cross-validation


【解决方案1】:

将建模数据集拆分为训练集、验证集和测试集的典型方法是使用随机样本。也就是说,分配一个介于 0 和 1 之间的随机数。如果要进行 40/30/30 拆分,则值介于 0 和 0.4 之间的行在训练中,在 0.4 和 0.7 之间在验证中,在 0.7 和 1.0 之间在测试中. 40/30/30 slpit 没有什么神奇之处。它恰好是 SAS Enterprise Miner 中的默认值(实际上,我经常将其更改为 60/30/10)。

对此有一些调整和可能的改进。如果您知道建模有重要的特征,例如地理,那么您可以进行分层样本。为此,您将按列对数据进行排序,然后基本上执行“每 n 个”记录样本。我说“基本上”,因为这对于 40% 的拆分要复杂一些。为了处理这个问题,一次取 10 个记录,选择 4 个作为训练集,3 个作为验证集,3 个作为测试集。你从这 10 个中选择哪一个并不重要。

更大的问题是当您拥有分层数据时,几乎所有用于建模的数据都是分层的。例如,您的客户数据可能包含大量描述客户人口普查区的列。如果这些变量作为预测变量很重要,那么您可以考虑在人口普查区域而不是客户级别进行抽样。也就是说,将人口普查区域(随机)分成三组,因此 40% 的客户进入训练集,30% 进入验证集,30% 进入测试集。

您要确保对数据进行分区,并且没有记录属于多个组。如果您不知道什么是训练、验证和测试集,那么我强烈建议您购买一本关于数据挖掘的书(例如“用于营销、销售和客户支持的数据挖掘技术,第三版”@@ 987654321@).

【讨论】:

  • 我知道训练集、验证集和测试集是什么,但我认为'validation'和'test'没有区别,后面这两者有什么区别?
  • 一些技术,例如决策树和神经网络,使用验证集从一系列相关模型中选择一个(修剪决策树,选择神经网络的权重生成,例如)。因此,所选模型使用来自训练集和验证集的信息。测试集根本不用于模型构建。它是一个单独的数据样本。
猜你喜欢
  • 2019-06-16
  • 1970-01-01
  • 1970-01-01
  • 2019-06-16
  • 1970-01-01
  • 1970-01-01
  • 2019-01-14
  • 2019-05-01
  • 2017-06-09
相关资源
最近更新 更多