Example usage for edu.stanford.nlp.classify CrossValidator computeAverage

List of usage examples for edu.stanford.nlp.classify CrossValidator computeAverage

Introduction

In this page you can find the example usage for edu.stanford.nlp.classify CrossValidator computeAverage.

Prototype

public double computeAverage(
        ToDoubleFunction<Triple<GeneralDataset<L, F>, GeneralDataset<L, F>, SavedState>> function) 

Source Link

Document

This computes the average over all folds of the function we're trying to optimize.

Usage

From source file:gr.aueb.cs.nlp.wordtagger.classifier.SVMWindows64Factory.java

License:Open Source License

/**
 * This method will cross validate on the given data and number of folds
 * to find the optimal C.  The scorer is how you determine what to
 * optimize for (F-score, accuracy, etc).  The C is then saved, so that
 * if you train a classifier after calling this method, that C will be used.
 *//* w ww .  j a  va 2s.c o m*/
public void crossValidateSetC(GeneralDataset<L, F> dataset, int numFolds, final Scorer<L> scorer,
        LineSearcher minimizer) {
    System.out.println("in Cross Validate");

    useAlphaFile = true;
    boolean oldUseSigmoid = useSigmoid;
    useSigmoid = true;

    final CrossValidator<L, F> crossValidator = new CrossValidator<L, F>(dataset, numFolds);
    final Function<Triple<GeneralDataset<L, F>, GeneralDataset<L, F>, CrossValidator.SavedState>, Double> score = fold -> {
        GeneralDataset<L, F> trainSet = fold.first();
        GeneralDataset<L, F> devSet = fold.second();
        alphaFile = (File) fold.third().state;
        //train(trainSet,true,true);
        SVMLightClassifier<L, F> classifier = trainClassifierBasic(trainSet);
        fold.third().state = alphaFile;
        return scorer.score(classifier, devSet);
    };

    Function<Double, Double> negativeScorer = cToTry -> {
        C = cToTry;
        if (verbose) {
            System.out.print("C = " + cToTry + " ");
        }
        Double averageScore = crossValidator.computeAverage(score);
        if (verbose) {
            System.out.println(" -> average Score: " + averageScore);
        }
        return -averageScore;
    };

    C = minimizer.minimize(negativeScorer);

    useAlphaFile = false;
    useSigmoid = oldUseSigmoid;
}