Java Code Examples for meka.core.Result#setValue()

The following examples show how to use meka.core.Result#setValue() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: Evaluation.java    From meka with GNU General Public License v3.0 5 votes vote down vote up
/**
 * CVModel - Split D into train/test folds, and then train and evaluate on each one.
 * @param	h		 a multi-output classifier
 * @param	D      	 test data Instances
 * @param	numFolds number of folds of CV
 * @param	top    	 Threshold OPtion (pertains to multi-label data only)
 * @param	vop    	Verbosity OPtion (which measures do we want to calculate/output)
 * @return	Result	raw prediction data with evaluation statistics included.
 */
public static Result cvModel(MultiLabelClassifier h, Instances D, int numFolds, String top, String vop) throws Exception {
	Result r_[] = new Result[numFolds];
	for(int i = 0; i < numFolds; i++) {
		Instances D_train = D.trainCV(numFolds,i);
		Instances D_test = D.testCV(numFolds,i);
		if (h.getDebug()) System.out.println(":- Fold ["+i+"/"+numFolds+"] -: "+MLUtils.getDatasetName(D)+"\tL="+D.classIndex()+"\tD(t:T)=("+D_train.numInstances()+":"+D_test.numInstances()+")\tLC(t:T)="+Utils.roundDouble(MLUtils.labelCardinality(D_train,D.classIndex()),2)+":"+Utils.roundDouble(MLUtils.labelCardinality(D_test,D.classIndex()),2)+")");
		r_[i] = evaluateModel(h, D_train, D_test); // <-- should not run stats yet!
	}
	Result r = MLEvalUtils.combinePredictions(r_);
	if (h instanceof MultiTargetClassifier || isMT(D)) {
		r.setInfo("Type","MT-CV");
	}
	else if (h instanceof MultiLabelClassifier) {
		r.setInfo("Type","ML-CV");
		try {
			r.setInfo("Threshold",String.valueOf(Double.parseDouble(top)));
		} catch(Exception e) {
			System.err.println("[WARNING] Automatic threshold calibration not currently enabled for cross-fold validation, setting threshold = 0.5.\n");
			r.setInfo("Threshold",String.valueOf(0.5));
		}
	}
	r.setInfo("Verbosity",vop);
	r.output = Result.getStats(r, vop);
	// Need to reset this because of CV
	r.setValue("Number of training instances",D.numInstances());
	r.setValue("Number of test instances",D.numInstances());
	return r;
}
 
Example 2
Source File: Evaluation.java    From meka with GNU General Public License v3.0 4 votes vote down vote up
/**
 * EvaluateModel - Build model 'h' on 'D_train', test it on 'D_test'.
 * Note that raw multi-label predictions returned in Result may not have been thresholded yet.
 * However, data statistics, classifier info, and running times are inpregnated into the Result here.
 * @param	h		a multi-dim. classifier
 * @param	D_train	training data
 * @param	D_test 	test data
 * @return	raw prediction data (no evaluation yet)
 */
public static Result evaluateModel(MultiXClassifier h, Instances D_train, Instances D_test) throws Exception {

	long before = System.currentTimeMillis();
	// Set test data as unlabelled data, if SemisupervisedClassifier
	if (h instanceof SemisupervisedClassifier) {
		((SemisupervisedClassifier)h).introduceUnlabelledData(MLUtils.setLabelsMissing(new Instances(D_test)));
	}
	// Train
	h.buildClassifier(D_train);
	long after = System.currentTimeMillis();

	//System.out.println(":- Classifier -: "+h.getClass().getName()+": "+Arrays.toString(h.getOptions()));

	// Test
	long before_test = System.currentTimeMillis();
	Result result = testClassifier(h,D_test);
	long after_test = System.currentTimeMillis();

	result.setValue("Number of training instances",D_train.numInstances());
	result.setValue("Number of test instances",D_test.numInstances());
	result.setValue("Label cardinality (train set)",MLUtils.labelCardinality(D_train));
	result.setValue("Label cardinality (test set)",MLUtils.labelCardinality(D_test));

	result.setValue("Build Time",(after - before)/1000.0);
	result.setValue("Test Time",(after_test - before_test)/1000.0);
	result.setValue("Total Time", (after_test - before) / 1000.0);

	result.setInfo("Classifier",h.getClass().getName());
	result.setInfo("Options",Arrays.toString(h.getOptions()));
	result.setInfo("Additional Info",h.toString());
	result.setInfo("Dataset",MLUtils.getDatasetName(D_train));
	result.setInfo("Number of labels (L)",String.valueOf(D_train.classIndex()));
	//result.setInfo("Maxfreq_set",MLUtils.mostCommonCombination(D_train,result.L));

	String model = h.getModel();
	if (model.length() > 0)
		result.setModel("Model",h.getModel());

	return result;
}
 
Example 3
Source File: Evaluation.java    From meka with GNU General Public License v3.0 4 votes vote down vote up
public static Result evaluateModelM(MultiXClassifier h, Instances D_train, Instances D_test, String top, String vop) throws Exception {
	// Train
	long before = System.currentTimeMillis();
			/*if (h instanceof SemisupervisedClassifier) { // *NEW* for semi-supervised 
				((SemisupervisedClassifier)h).setUnlabelledData(MLUtils.setLabelsMissing(new Instances(D_test)));
			}*/
	h.buildClassifier(D_train);
	long after = System.currentTimeMillis();

	//System.out.println(":- Classifier -: "+h.getClass().getName()+": "+Arrays.toString(h.getOptions()));

	// Test
	long before_test = System.currentTimeMillis();
	Result result = testClassifierM(h,D_test);
	long after_test = System.currentTimeMillis();

	result.setValue("N_train",D_train.numInstances());
	result.setValue("N_test",D_test.numInstances());
	result.setValue("LCard_train",MLUtils.labelCardinality(D_train));
	result.setValue("LCard_test",MLUtils.labelCardinality(D_test));

	result.setValue("Build_time",(after - before)/1000.0);
	result.setValue("Test_time",(after_test - before_test)/1000.0);
	result.setValue("Total_time",(after_test - before)/1000.0);

	result.setInfo("Classifier_name",h.getClass().getName());
	result.setInfo("Classifier_ops",Arrays.toString(h.getOptions()));
	result.setInfo("Classifier_info",h.toString());
	result.setInfo("Dataset_name",MLUtils.getDatasetName(D_train));
	//result.setInfo("Maxfreq_set",MLUtils.mostCommonCombination(D_train,result.L));

	if (h instanceof MultiTargetClassifier || isMT(D_test)) {
		result.setInfo("Type","MT");
	}
	else if (h instanceof MultiLabelClassifier) {
		result.setInfo("Type","ML");
	}
	result.setInfo("Threshold",MLEvalUtils.getThreshold(result.predictions,D_train,top)); // <-- only relevant to ML (for now), but we'll put it in here in any case
	result.setInfo("Verbosity",vop);
	result.output = Result.getStats(result, vop);
	return result;
}