10-fold cross-validation,用来测试精度。是常用的精度测试方法。将数据集分成十分,轮流将其中9份做训练1份做测试,10次的结果的均值作为对算法精度的估计,一般还需要进行多次10倍交叉验证求均值,例如10次10倍交叉验证,更精确一点。
参考文献:
[1] http://ks.cn.yahoo.com/question/1590000871462.html
[2] http://zhidao.baidu.com/question/37942877.html
2008-9-28 11:13:23
/**
*this.samples,this.trainSamples,this.testSamples,this.vcTrainSampleID,this.vcTestSampleID为类成员变量
*this.samples 样本集
*this.trainSamples 训练样本集
*this.testSamples 测试样本集
*this.vcTrainSampleID 训练样本集标号
*this.vcTestSampleID 测试样本集标号
*this.line 样本行数
*n n交叉
*startNum 开始样本标号
*/
CODE:
public void nCorssDivideSample(int n, int startNum) {
int testSamplesNum = 0;
int maxSampleNum = this.samples.length;
int counter = n - 1;
for (int i = 0; i < maxSampleNum; i++) {
if (i % n == 0) {
testSamplesNum++;
}
}
int counterTrain = 0, counterTest = 0;
this.trainSamples = new Sample[this.line - testSamplesNum];
this.testSamples = new Sample[testSamplesNum];
for (int i = 0; i < maxSampleNum; i++) {
if ((counter % n + 1) == n) {
this.testSamples[counterTest++] = this.samples[startNum];
this.vcTestSampleID.add(startNum);
} else {
this.trainSamples[counterTrain++] = this.samples[startNum];
this.vcTrainSampleID.add(startNum);
}
startNum++;
counter++;
startNum = startNum % maxSampleNum;
}
}