我有一个数据集(其中每个数据都是带有相应类标签的属性向量)。我想将数据集拆分为训练集和测试集。无论如何可以自动执行此操作吗?
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% 进入测试集。
您要确保对数据进行分区,并且没有记录属于一个以上的组。如果你不知道什么是训练集、验证集和测试集,那么我强烈建议你买一本关于数据挖掘的书(例如“面向营销、销售和客户支持的数据挖掘技术,第三版”,网址为http ://www.amazon.com/Data-Mining-Techniques-Relationship-Management/dp/0470650931/ref=pd_sim_b_5)。