curValidSet = validSet;
validPredictions.setSample(curValidSet);
validPredictions.reset();
Ensemble ensemble = new Ensemble();
subLearner.setTreeWeight(treeWeight / bagCount);
for (int iteration = 1; iteration <= bagCount; iteration++) {
System.out.println("Iteration: " + iteration);
Sample subLearnerTrainSet = trainSet.getRandomSubSample(baggingTrainFraction, rnd);
//((TreeLearner) subLearner).setRnd();
Sample subLearnerOutOfTrainSet = trainSet.getOutOfSample(subLearnerTrainSet);
Sample subLearnerValidSet = (validSet == null || validSet.isEmpty() ? subLearnerOutOfTrainSet : validSet);
Ensemble subEnsemble = subLearner.learn(subLearnerTrainSet, subLearnerValidSet);
for (int t = 0; t < subEnsemble.getNumTrees(); t++) {
Tree tree = subEnsemble.getTreeAt(t);
double curTreeWeight = subEnsemble.getWeightAt(t);
if (backfit) {
tree.backfit(subLearnerOutOfTrainSet);
}
ensemble.addTree(tree, curTreeWeight);
System.out.println(tree.numLeaves);
}
if (validSet != null && !validSet.isEmpty()) {
for (int t = 0; t < subEnsemble.getNumTrees(); t++) {
validPredictions.update(subEnsemble.getTreeAt(t), 1.0 / bagCount);
}
lastValidMeasurement = validPredictions.evaluate(evaluationMetric);
if (printIntermediateValidMeasurements) {
printValidMeasurement(iteration, lastValidMeasurement, evaluationMetric);
}