Train classifiers using MCL and MSP

From Jstacs
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
//read FastA-files
Sample[] data = {
         new DNASample( args[0] ),
         new DNASample( args[1] )
};
AlphabetContainer container = data[0].getAlphabetContainer();

//equivalent sample size =^= ESS
double essFg = 4, essBg = 4;
//create ScoringFunction, here PWM
NormalizableScoringFunction pwmFg = new BayesianNetworkScoringFunction( container, data[0].getElementLength(), essFg, true, new InhomogeneousMarkov(0) );
NormalizableScoringFunction pwmBg = new BayesianNetworkScoringFunction( container, data[1].getElementLength(), essBg, true, new InhomogeneousMarkov(0) );

//create parameters of the classifier
int threads = AbstractMultiThreadedOptimizableFunction.getNumberOfAvailableProcessors();
GenDisMixClassifierParameterSet cps = new GenDisMixClassifierParameterSet( container, data[0].getElementLength(),
		//optimization parameter
		Optimizer.QUASI_NEWTON_BFGS, 1E-9, 1E-11, 1, false, KindOfParameter.ZEROS, true, threads
);
//create classifiers
MSPClassifier[] cl = {
         //MCL
         new MSPClassifier( cps, pwmFg, pwmBg ),
         //MSP with composite prior (here this equivalent to a transformed product-Dirichlet)
         new MSPClassifier( cps, new CompositeLogPrior(), pwmFg, pwmBg ),
};

//do what ever you like

//e.g., train
for( int i = 0; i < cl.length; i++ ){
	cl[i].train( data );
}

//e.g., evaluate (normally done on a test data set)
MeasureParameters mp = new MeasureParameters( false, 0.95, 0.999, 0.999 );
for( int i = 0; i < cl.length; i++ ){
	System.out.println( cl[i].evaluate( mp, true, data ) );
}