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;
}
}