Package edu.msu.cme.rdp.classifier.train.validation.crossvalidate

Source Code of edu.msu.cme.rdp.classifier.train.validation.crossvalidate.CrossValidateMain

/*
* Copyright (C) 2012 Michigan State University <rdpstaff at msu.edu>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

package edu.msu.cme.rdp.classifier.train.validation.crossvalidate;

import edu.msu.cme.rdp.classifier.cli.CmdOptions;
import edu.msu.cme.rdp.classifier.train.validation.NBClassifier;
import edu.msu.cme.rdp.classifier.train.validation.leaveoneout.LeaveOneOutTesterMain;
import static edu.msu.cme.rdp.classifier.train.validation.leaveoneout.LeaveOneOutTesterMain.LENGTH_DESC;
import static edu.msu.cme.rdp.classifier.train.validation.leaveoneout.LeaveOneOutTesterMain.LENGTH_LONG_OPT;
import static edu.msu.cme.rdp.classifier.train.validation.leaveoneout.LeaveOneOutTesterMain.LENGTH_SHORT_OPT;
import static edu.msu.cme.rdp.classifier.train.validation.leaveoneout.LeaveOneOutTesterMain.OUTFILE_DESC;
import static edu.msu.cme.rdp.classifier.train.validation.leaveoneout.LeaveOneOutTesterMain.OUTFILE_LONG_OPT;
import static edu.msu.cme.rdp.classifier.train.validation.leaveoneout.LeaveOneOutTesterMain.OUTFILE_SHORT_OPT;
import static edu.msu.cme.rdp.classifier.train.validation.leaveoneout.LeaveOneOutTesterMain.QUERYFILE_DESC;
import static edu.msu.cme.rdp.classifier.train.validation.leaveoneout.LeaveOneOutTesterMain.QUERYFILE_LONG_OPT;
import static edu.msu.cme.rdp.classifier.train.validation.leaveoneout.LeaveOneOutTesterMain.QUERYFILE_SHORT_OPT;
import static edu.msu.cme.rdp.classifier.train.validation.leaveoneout.LeaveOneOutTesterMain.TRAIN_SEQFILE_DESC;
import static edu.msu.cme.rdp.classifier.train.validation.leaveoneout.LeaveOneOutTesterMain.TRAIN_SEQFILE_LONG_OPT;
import static edu.msu.cme.rdp.classifier.train.validation.leaveoneout.LeaveOneOutTesterMain.TRAIN_SEQFILE_SHORT_OPT;
import static edu.msu.cme.rdp.classifier.train.validation.leaveoneout.LeaveOneOutTesterMain.TRAIN_TAXONFILE_DESC;
import static edu.msu.cme.rdp.classifier.train.validation.leaveoneout.LeaveOneOutTesterMain.TRAIN_TAXONFILE_LONG_OPT;
import static edu.msu.cme.rdp.classifier.train.validation.leaveoneout.LeaveOneOutTesterMain.TRAIN_TAXONFILE_SHORT_OPT;
import java.io.File;
import java.io.IOException;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.apache.commons.cli.PosixParser;

/**
*
* @author wangqion
*/
public class CrossValidateMain {

    private static Options options = new Options();
    static {
        options.addOption(new Option(TRAIN_SEQFILE_SHORT_OPT, TRAIN_SEQFILE_LONG_OPT, true, TRAIN_SEQFILE_DESC));
        options.addOption(new Option(TRAIN_TAXONFILE_SHORT_OPT, TRAIN_TAXONFILE_LONG_OPT, true, TRAIN_TAXONFILE_DESC));
        options.addOption(new Option(OUTFILE_SHORT_OPT, OUTFILE_LONG_OPT, true, OUTFILE_DESC));
        options.addOption(new Option(LENGTH_SHORT_OPT, LENGTH_LONG_OPT, true, LENGTH_DESC));
        options.addOption(new Option(CmdOptions.MIN_BOOTSTRAP_WORDS_SHORT_OPT, CmdOptions.MIN_BOOTSTRAP_WORDS_LONG_OPT, true, CmdOptions.MIN_WORDS_DESC));
        options.addOption("f", "fraction", true, "fraction of the complete set as test set, default is 0.1");
        options.addOption("r", "rdmRank", true, "if specified, random select a fraction of taxa at the given rank, " +
            "and use all the sequence assigned to the selected taxa as test set. If rank is not specified, " +
            "a fraction of sequences will be selected from the source file to use as test set");
    }

    /**
     * This is the main method for cross validation test.
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException{
        String tax_file = null;
        String source_file = null;
        String out_file = null;
        Integer partialLength = null// default is full length
        float fraction = 0.1f;
        String rdmSelectedRank = null;
        int min_bootstrap_words = NBClassifier.MIN_BOOTSTRSP_WORDS;
        try {
            CommandLine line = new PosixParser().parse(options, args);
            if (line.hasOption(TRAIN_TAXONFILE_SHORT_OPT) ) {
              tax_file = line.getOptionValue(TRAIN_TAXONFILE_SHORT_OPT);
            } else {
                throw new ParseException("Taxonomy file must be specified");
            }
            if (line.hasOption(TRAIN_SEQFILE_SHORT_OPT) ) {
              source_file = line.getOptionValue(TRAIN_SEQFILE_SHORT_OPT);
            } else {
                throw new ParseException("Source training fasta file must be specified");
            }
            if (line.hasOption(OUTFILE_SHORT_OPT) ) {
              out_file = line.getOptionValue(OUTFILE_SHORT_OPT);
            } else {
                throw new ParseException("Output file must be specified");
            }

            if (line.hasOption(LENGTH_SHORT_OPT) ) {
;              partialLength = new Integer(line.getOptionValue(LENGTH_SHORT_OPT));
            }
            if (line.hasOption("fraction") ) {
              fraction = Float.parseFloat(line.getOptionValue("fraction"));
            }
            if (line.hasOption("rdmRank") ) {
                rdmSelectedRank = line.getOptionValue("rdmRank");
            }
            if (line.hasOption(CmdOptions.MIN_BOOTSTRAP_WORDS_SHORT_OPT)) {
                min_bootstrap_words = Integer.parseInt(line.getOptionValue(CmdOptions.MIN_BOOTSTRAP_WORDS_SHORT_OPT));
                if (min_bootstrap_words < NBClassifier.MIN_BOOTSTRSP_WORDS) {
                    throw new IllegalArgumentException(min_bootstrap_words + " must be at least " + NBClassifier.MIN_BOOTSTRSP_WORDS);
                }               
            }
           
        } catch (ParseException ex) {
            new HelpFormatter().printHelp(120, "CrossValidateMain", "", options, "", true);
            return;
        }
       
        boolean useSeed = true// use seed for random number generator

        CrossValidate theObj = new CrossValidate();
        theObj.runTest(new File(tax_file), new File(source_file), new File(out_file), rdmSelectedRank, fraction, partialLength, useSeed, min_bootstrap_words);


    }
}
TOP

Related Classes of edu.msu.cme.rdp.classifier.train.validation.crossvalidate.CrossValidateMain

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.