package cc.mallet.classify; import cc.mallet.optimize.Optimizer; import cc.mallet.optimize.OrthantWiseLimitedMemoryBFGS; import cc.mallet.types.InstanceList; public class MaxEntL1Trainer extends MaxEntTrainer { private static final long serialVersionUID = 1L; double l1Weight = 1.0; public MaxEntL1Trainer() { super(Double.MAX_VALUE); } public MaxEntL1Trainer(double l1wt) { super(Double.MAX_VALUE); this.l1Weight = l1wt; } public MaxEntL1Trainer(MaxEnt initClassifier) { super(initClassifier); this.gaussianPriorVariance = Double.MAX_VALUE; } public Optimizer getOptimizer() { if (optimizer == null && optimizable != null) optimizer = new OrthantWiseLimitedMemoryBFGS(optimizable, l1Weight); return optimizer; } // commented by Limin Yao, use L1 regularization instead public Optimizer getOptimizer(InstanceList trainingSet) { if (trainingSet != this.trainingSet || optimizable == null) { getOptimizable(trainingSet); optimizer = null; } if (optimizer == null) optimizer = new OrthantWiseLimitedMemoryBFGS(optimizable, l1Weight); return optimizer; } }