package quickml.supervised.predictiveModelOptimizer; import com.google.common.base.Preconditions; import quickml.data.instances.Instance; import quickml.supervised.PredictiveModel; import quickml.supervised.PredictiveModelBuilder; import quickml.supervised.crossValidation.SimpleCrossValidator; import quickml.supervised.crossValidation.LossChecker; import quickml.supervised.crossValidation.data.TrainingDataCycler; import java.util.Map; public class SimplePredictiveModelOptimizerBuilder<PM extends PredictiveModel, T extends Instance> { private Map<String, ? extends FieldValueRecommender> valuesToTest; private PredictiveModelBuilder modelBuilder; private TrainingDataCycler<T> dataCycler; private LossChecker<PM, T> lossChecker; private int iterations = 5; public SimplePredictiveModelOptimizerBuilder<PM, T> valuesToTest(Map<String, ? extends FieldValueRecommender> valuesToTest) { this.valuesToTest = valuesToTest; return this; } public SimplePredictiveModelOptimizerBuilder<PM, T> lossChecker(LossChecker<PM, T> lossChecker) { this.lossChecker = lossChecker; return this; } public SimplePredictiveModelOptimizerBuilder<PM, T> dataCycler(TrainingDataCycler<T> dataCycler) { this.dataCycler = dataCycler; return this; } public SimplePredictiveModelOptimizerBuilder<PM, T> modelBuilder(PredictiveModelBuilder modelBuilder) { this.modelBuilder = modelBuilder; return this; } public SimplePredictiveModelOptimizerBuilder<PM, T> iterations(int iterations) { this.iterations = iterations; return this; } public PredictiveModelOptimizer build() { Preconditions.checkArgument(modelBuilder != null, "You must supply a model builder"); Preconditions.checkArgument(dataCycler != null, "You must supply a data cycler"); Preconditions.checkArgument(lossChecker != null, "You must supply a loss checker"); Preconditions.checkArgument(valuesToTest != null, "You must supply a map of configurations to check"); return new PredictiveModelOptimizer(valuesToTest, new SimpleCrossValidator<>(modelBuilder, lossChecker, dataCycler), iterations); } }