Java 如何使用Weka将数据集划分为训练集和测试集?

Java 如何使用Weka将数据集划分为训练集和测试集?,java,csv,weka,Java,Csv,Weka,我想将一百万条CSV格式的记录数据集分成80%用于培训,20%用于测试。如何使用Java或Weka库对此进行编码?您可以使用名为 您可以先使用实例提供的方法将数据随机化 Random rand = new Random(seed); // create seeded number generator randData = new Instances(data); // create copy of original data randData.randomize(rand);

我想将一百万条CSV格式的记录数据集分成80%用于培训,20%用于测试。如何使用Java或Weka库对此进行编码?

您可以使用名为


您可以先使用
实例提供的方法将数据随机化

Random rand = new Random(seed);   // create seeded number generator
randData = new Instances(data);   // create copy of original data
randData.randomize(rand);         // randomize data with number generator
如果您的数据具有标称类,并且您希望执行分层交叉验证:

randData.stratify(folds);
现在,通常您需要执行交叉验证并执行以下操作:

for (int n = 0; n < folds; n++) {
    Instances train = randData.trainCV(folds, n);
    Instances test = randData.testCV(folds, n);

    // further processing, classification, etc.
    ...
}

为什么不使用标准的随机数生成器随机生成呢?正如JS Meier所说:逐行读取文件,然后决定是将该行放入TEST.csv文件还是TRAIN.csv文件中。网上有数百个关于如何处理文本文件的例子。我能理解你所说的。但朋友们,如果我要更改和更新数据集,我需要手动处理每个数据集。实际上,我想把这个用于机器学习,所以需要适当的随机数据集处理,你的想法会增加处理的成本。如果你能理解我说的话,那就给我另一个想法。@Sentry你的for循环如何划分训练集和测试集?例如,如果我希望我的数据的%90是训练集,而%10是测试集,那么如何创建它呢?按照我的方法(使用Weka的方法),数据总是被分割,以便(k-1)/k是训练集,1/k是测试集。如果你想除以90/10,你必须选择k=10。如果不希望有10个不同的拆分,请使用上述方法,不要使用for循环。
for (int n = 0; n < folds; n++) {
    Instances train = randData.trainCV(folds, n);
    Instances test = randData.testCV(folds, n);

    // further processing, classification, etc.
    ...
}
Instances train = randData.trainCV(folds, 0);
Instances test = randData.testCV(folds, 0);