我想在已经分成10个折叠(即每个实例已分配到折叠)的数据集上使用Weka运行10倍交叉验证火车/测试实验。我知道,如果您给Weka一个完整的数据集,它可以为您创建折叠并运行10倍的CV,但是有办法告诉它哪些实例应属于哪个折叠,而不是手动将数据集分成10列/测试集并独立运行10个实验中的每一个?使用预定义折叠在Weka中进行交叉验证
谢谢
我想在已经分成10个折叠(即每个实例已分配到折叠)的数据集上使用Weka运行10倍交叉验证火车/测试实验。我知道,如果您给Weka一个完整的数据集,它可以为您创建折叠并运行10倍的CV,但是有办法告诉它哪些实例应属于哪个折叠,而不是手动将数据集分成10列/测试集并独立运行10个实验中的每一个?使用预定义折叠在Weka中进行交叉验证
谢谢
你会用Java吗?培训和评估使用Java接口分类一个简单的例子在这里给出摘录如下: 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
祝你好运!
其实我正在使用Python(是的,我知道我应该使用scikitlearn,我会最终达成这一目标)。基本上我的问题是有一个简单的方法可以告诉Weka折叠的地方,而不是写你自己的trainCV功能。如果没有,我可以使用python创建10个训练/测试拆分,并在每个拆分上运行Weka,我猜... – jjs
指定火车/测试实例应该足以告诉Weka折叠的位置,并且运行培训/评估你自己。从你的角度来看,这更多是为了管理(事实上,这是一种痛苦),但这是我知道的唯一方式(没有使用Weka一段时间)。 – Graham