gpt4 book ai didi

machine-learning - 使用预定义折叠在 Weka 中进行交叉验证

转载 作者:行者123 更新时间:2023-11-30 08:35:23 25 4
gpt4 key购买 nike

我想使用 Weka 在已分为 10 个折叠的数据集上运行 10 折叠交叉验证训练/测试实验(即每个实例已分配给一个折叠)。我知道如果你给 Weka 一个完整的数据集,它可以为你创建折叠并运行 10 折 CV,但是有没有办法告诉它哪些实例应该属于哪个折叠,而不是手动将数据集分成 10 个训练集/测试集并独立运行 10 个实验?

谢谢

最佳答案

你会使用Java吗?这里给出了使用 Java 接口(interface)训练和评估分类器的简单示例,摘录如下: http://www.programcreek.com/2013/01/a-simple-machine-learning-example-in-java/

第一步是创建分割:

// Do 10-split cross validation
Instances[][] split = crossValidationSplit(data, 10);

// Separate split into training and testing arrays
Instances[] trainingSplits = split[0];
Instances[] testingSplits = split[1];

然后进行典型的培训/评估:

// For each training-testing split pair, train and test the classifier
for (int i = 0; i < trainingSplits.length; i++) {
Evaluation validation = classify(models[j], trainingSplits[i], testingSplits[i]);

predictions.appendElements(validation.predictions());
}

相比之下,我之前的一些代码使用 trainCV/testCV函数来获取这些实例集。您可以编写一个新函数,返回已知折叠的这些数据子集。

也许 Instances.trainCV 的源代码是如何构建实例集的一个很好的例子: http://grepcode.com/file/repo1.maven.org/maven2/nz.ac.waikato.cms.weka/weka-stable/3.6.7/weka/core/Instances.java

关键行是对 copyInstances 的调用.

copyInstances(0, train, first);
copyInstances(first + numInstForFold, train,
numInstances() - first - numInstForFold);
return train;

也许也可以使用new Instances(java.lang.String name, java.util.ArrayList<Attribute> attInfo, int capacity)简单地创建一个空实例。并使用 Instances.get 进行填充来自所有实例的超集。

另一种方法是使用过滤器,就像下面的摘录示例一样,当我训练具有相同分割的多个分类器时(在 Matlab/java 中):

filterRand = Randomize();
filterRange = RemoveRange();

%if the filterInst parameter is active, take a subsample of training
if doFilterTrain
rangeStr = sprintf('%g-%g', 1, learnParams.trainSizeMax );
filterRange.setInstancesIndices( rangeStr );
filterRange.setInvertSelection( 1 );
end

if doFilterTrain
filterRand.setInputFormat( instTrain );
filterRange.setInputFormat( instTrain );

instTrainSub = Filter.useFilter(instTrain, filterRand);
instTrainSub = Filter.useFilter(instTrainSub, filterRange);
end

祝你好运!

关于machine-learning - 使用预定义折叠在 Weka 中进行交叉验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22790122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com