package edu.stanford.nlp.classify; import edu.stanford.nlp.ling.BasicDatum; import edu.stanford.nlp.ling.Datum; import java.util.ArrayList; import java.util.List; /** * Sample code that illustrates the training and use of a linear classifier. * This toy example is taken from the slides: * Christopher Manning and Dan Klein. 2003. Optimization, Maxent Models, * and Conditional Estimation without Magic. * Tutorial at HLT-NAACL 2003 and ACL 2003. * * @author Dan Klein */ public class ClassifierExample { protected static final String GREEN = "green"; protected static final String RED = "red"; protected static final String WORKING = "working"; protected static final String BROKEN = "broken"; private ClassifierExample() {} // not instantiable protected static Datum<String,String> makeStopLights(String ns, String ew) { List<String> features = new ArrayList<>(); // Create the north-south light feature features.add("NS=" + ns); // Create the east-west light feature features.add("EW=" + ew); // Create the label String label = (ns.equals(ew) ? BROKEN : WORKING); return new BasicDatum<>(features, label); } public static void main(String[] args) { // Create a training set List<Datum<String,String>> trainingData = new ArrayList<>(); trainingData.add(makeStopLights(GREEN, RED)); trainingData.add(makeStopLights(GREEN, RED)); trainingData.add(makeStopLights(GREEN, RED)); trainingData.add(makeStopLights(RED, GREEN)); trainingData.add(makeStopLights(RED, GREEN)); trainingData.add(makeStopLights(RED, GREEN)); trainingData.add(makeStopLights(RED, RED)); // Create a test set Datum<String,String> workingLights = makeStopLights(GREEN, RED); Datum<String,String> brokenLights = makeStopLights(RED, RED); // Build a classifier factory LinearClassifierFactory<String,String> factory = new LinearClassifierFactory<>(); factory.useConjugateGradientAscent(); // Turn on per-iteration convergence updates factory.setVerbose(true); //Small amount of smoothing factory.setSigma(10.0); // Build a classifier LinearClassifier<String,String> classifier = factory.trainClassifier(trainingData); // Check out the learned weights classifier.dump(); // Test the classifier System.out.println("Working instance got: " + classifier.classOf(workingLights)); classifier.justificationOf(workingLights); System.out.println("Broken instance got: " + classifier.classOf(brokenLights)); classifier.justificationOf(brokenLights); } }