package tr.gov.ulakbim.jDenetX.tasks;
import tr.gov.ulakbim.jDenetX.classifiers.ActiveClusterBaggingASHT;
import tr.gov.ulakbim.jDenetX.classifiers.Classifier;
import tr.gov.ulakbim.jDenetX.core.ObjectRepository;
import tr.gov.ulakbim.jDenetX.streams.InstanceStream;
/**
* Created by IntelliJ IDEA.
* User: caglar
* Date: Sep 7, 2010
* Time: 4:30:45 PM
* To change this template use File | Settings | File Templates.
*/
public class LearnClusterBaggingModel extends LearnModel {
// public ClassOption learnerOption = new ClassOption("learner", 'l',
// "Classifier to train.", Classifier.class, "ActiveClusterBaggingASHT");
public LearnClusterBaggingModel() {
}
public LearnClusterBaggingModel(Classifier learner, InstanceStream stream,
int maxInstances, int numPasses) {
super(learner, stream, maxInstances, numPasses);
}
@Override
public Object doMainTask(TaskMonitor monitor, ObjectRepository repository) {
System.out.println(learnerOption.getName());
Classifier learner = (Classifier) getPreparedClassOption(learnerOption);
InstanceStream stream = (InstanceStream) getPreparedClassOption(this.streamOption);
learner.setModelContext(stream.getHeader());
int numPasses = this.numPassesOption.getValue();
int maxInstances = this.maxInstancesOption.getValue();
for (int pass = 0; pass < numPasses; pass++) {
long instancesProcessed = 0;
monitor.setCurrentActivity("Training learner"
+ (numPasses > 1 ? (" (pass " + (pass + 1) + "/"
+ numPasses + ")") : "") + "...", -1.0);
if (pass > 0) {
stream.restart();
}
while (stream.hasMoreInstances()
&& ((maxInstances < 0) || (instancesProcessed < maxInstances))) {
if (instancesProcessed == maxInstances - 1) {
((ActiveClusterBaggingASHT) learner).setCheckSize(false);
}
// System.out.println(stream.nextInstance());
learner.trainOnInstance(stream.nextInstance());
instancesProcessed++;
if (instancesProcessed % INSTANCES_BETWEEN_MONITOR_UPDATES == 0) {
if (monitor.taskShouldAbort()) {
return null;
}
long estimatedRemainingInstances = stream
.estimatedRemainingInstances();
if (maxInstances > 0) {
long maxRemaining = maxInstances - instancesProcessed;
if ((estimatedRemainingInstances < 0)
|| (maxRemaining < estimatedRemainingInstances)) {
estimatedRemainingInstances = maxRemaining;
}
}
monitor
.setCurrentActivityFractionComplete(estimatedRemainingInstances < 0 ? -1.0
: (double) instancesProcessed
/ (double) (instancesProcessed + estimatedRemainingInstances));
if (monitor.resultPreviewRequested()) {
monitor.setLatestResultPreview(learner.copy());
}
}
}
}
learner.setModelContext(stream.getHeader());
return learner;
}
}