如何将数据拆分为训练和测试集?

时间:2014-04-17 05:30:31

标签: database machine-learning weka

将数据分成两个不相交的集合,一个用于训练,一个用于测试的方法是将前80%作为训练集,其余作为测试集。是否有另一种方法将数据分成训练和测试集?

**例如,我有一个包含20个属性和5000个对象的数据。因此,我将12个属性和1000个对象作为我的训练数据,将12个属性中的3个属性作为测试集。这种方法是否正确?

2 个答案:

答案 0 :(得分:2)

不,那是无效的。您将始终使用所有数据集中的所有功能。你用"对象"分开(例子)。

目前尚不清楚为什么你只拿走了1000个物体并试图从中提取训练集。你扔掉的其他4000人怎么了?

训练4000个物体/ 20个特征。对500个对象/ 20个功能进行交叉验证。评估剩余的500个对象/ 20个功能的性能。

答案 1 :(得分:1)

如果你的训练产生了一个基于12个特征的分类器,那么根据这些特征的子集(你的分类器期待12个输入和你的分类)来评估它在测试集上的表现可能非常困难。只给3)。

如果您的数据包含许多冗余或不相关的功能,则

Feature/attribute selection/extraction非常重要。因此,您只能识别和使用信息量最大的功能(可能包含12个功能),但您的培训/验证/测试集应基于相同数量的功能(例如,因为您提及weka Why do I get the error message 'training and test set are not compatible'?)。

继续进行培训/验证/测试拆分(坚持方法),您可能遇到的问题是样本可能不具代表性。

例如,某些类可能只用很少的实例表示,甚至根本没有实例。

可能的改进是分层:在课堂上进行培训和测试的抽样。这确保了每个类在两个子集中的比例大致相等。

但是,通过将可用数据划分为固定的训练/测试集,可以大大减少可用于学习模型的样本数。另一种选择是cross validation