Mercurial > hg > aimc
diff experiments/scripts/cnbh-syllables/results_plotting/gen_results.py @ 100:ae195c41c7bd
- Python results plotting (finally).
- Proper results reporting script.
- Test on ALL talkers. The results script then generates a summary based on all the various subsets.
- Fixed chown users (hopefully sudos to be deleted entirely soon)
- More...
author | tomwalters |
---|---|
date | Mon, 13 Sep 2010 18:34:23 +0000 |
parents | |
children | 9416e88d7c56 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/experiments/scripts/cnbh-syllables/results_plotting/gen_results.py Mon Sep 13 18:34:23 2010 +0000 @@ -0,0 +1,142 @@ +#!/usr/bin/env python +# encoding: utf-8 +""" +gen_results.py + +Created by Thomas Walters on 2010-09-12. +""" + +import sys +import getopt +import re + + +help_message = ''' +Generate a file containing all the results for a run of the +syllable recognition experiment. Expected input is a 'misclassificaions' +file of the type generated by run_test_instance.sh, along with the locations +of files containing the training talkers and all the talkers that the system +was tested on. + +Arguments: +-i --input_file +-t --train_talkers +-s --test_talkers +-o --output_filename +-c --value_count +-p --spoke_pattern +''' + +class Usage(Exception): + def __init__(self, msg): + self.msg = msg + + +def main(argv=None): + if argv is None: + argv = sys.argv + try: + try: + opts, args = getopt.getopt(argv[1:], "hi:t:s:o:c:p:v", + ["help", "input_file=", "train_talkers=", + "test_talkers=", "output_filename=", + "value_count=", "spoke_pattern="]) + except getopt.error, msg: + raise Usage(msg) + + # defaults + input_file = "misclassified_syllables_iteration_15" + train_talkers = "training_talkers" + test_talkers = "testing_talkers" + output_filename = "results.txt" + total_value_count = 185 + spoke_pattern_file = "spoke_pattern.txt" + + # option processing + for option, value in opts: + if option == "-v": + verbose = True + if option in ("-h", "--help"): + raise Usage(help_message) + if option in ("-i", "--input_file"): + input_file = value + if option in ("-t", "--train_talkers"): + train_talkers = value + if option in ("-s", "--test_talkers"): + test_talkers = value + if option in ("-c", "--value_count"): + total_value_count = int(value) + if option in ("-p", "--spoke_pattern_file"): + spoke_pattern_file = value + + except Usage, err: + print >> sys.stderr, sys.argv[0].split("/")[-1] + ": " + str(err.msg) + print >> sys.stderr, "\t for help use --help" + return 2 + + results = dict() + f = open(input_file, 'r') + for line in f: + values = line.strip().split(' ') + results[values[1]]=100*(1-float(values[0])/total_value_count) + + f = open(test_talkers, 'r') + test_talkers_list = f.readlines() + f.close() + + f = open(train_talkers, 'r') + train_talkers_list = f.readlines() + f.close() + + spoke_pattern = [] + f = open(spoke_pattern_file, 'r') + for line in f: + spoke_pattern.append(line.strip().split(' ')) + + all_talkers_list = [] + all_talkers_list.extend(train_talkers_list) + all_talkers_list.extend(test_talkers_list) + + # Here I make the rather rash assumption that the model was tested on all talkers + # this should be true if the training and testing was done using my scripts. + for t in all_talkers_list: + results.setdefault(t.strip(), 100.0) + + total_score = 0.0 + element_count = 0 + for t in train_talkers_list: + total_score += results[t.strip()] + element_count += 1 + score = total_score / element_count + print ("# Score on training talkers: %.1f%%" % score) + + total_score = 0.0 + element_count = 0 + for t in all_talkers_list: + total_score += results[t.strip()] + element_count += 1 + score = total_score / element_count + print ("# Score on all talkers: %.1f%%" % score) + + total_score = 0.0 + element_count = 0 + for t in test_talkers_list: + total_score += results[t.strip()] + element_count += 1 + score = total_score / element_count + print ("# Score on test talkers: %.1f%%" % score) + + score = results[spoke_pattern[0][0]] + print ("# Score on central talker: %.1f" % score) + + for s in xrange(1,9): + print ("# Results for spoke %d" % s) + for p in xrange(0, 7): + score = results[spoke_pattern[s][p]] + m = re.match('(.*)p(.*)s', spoke_pattern[s][p]) + gpr = m.group(1) + vtl=m.group(2) + print ("%s %s %s" % (gpr, vtl, score)) + +if __name__ == "__main__": + sys.exit(main())