Calculate Chi^2 values for getAdj- formulas

This commit is contained in:
LSaldyt
2017-10-04 15:37:22 -06:00
parent b90bae2584
commit 8203cebb15
2 changed files with 31 additions and 5 deletions

View File

@ -67,6 +67,10 @@ class Copycat(object):
def run(self, initial, modified, target, iterations, testAdjFormulas=False): def run(self, initial, modified, target, iterations, testAdjFormulas=False):
self.workspace.resetWithStrings(initial, modified, target) self.workspace.resetWithStrings(initial, modified, target)
# I (LSaldyt) am very sorry for writing code like this.
# It will soon be deleted. I promise.
if testAdjFormulas: if testAdjFormulas:
formulas = self.temperature.adj_formulas() formulas = self.temperature.adj_formulas()
else: else:
@ -90,9 +94,9 @@ class Copycat(object):
for answer, d in answers.items(): for answer, d in answers.items():
d['avgtemp'] = d.pop('sumtemp') / d['count'] d['avgtemp'] = d.pop('sumtemp') / d['count']
d['avgtime'] = d.pop('sumtime') / d['count'] d['avgtime'] = d.pop('sumtime') / d['count']
formulaList.append(answers) formulaList.append((formula, answers))
if not testAdjFormulas: if not testAdjFormulas:
return formulaList[0] return formulaList[0][1]
else: else:
return formulaList return formulaList

View File

@ -1,6 +1,7 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import argparse, logging import argparse, logging
from copycat import Copycat, Reporter, plot_answers, save_answers from copycat import Copycat, Reporter, plot_answers, save_answers
from collections import defaultdict
class SimpleReporter(Reporter): class SimpleReporter(Reporter):
"""Reports results from a single run.""" """Reports results from a single run."""
@ -22,9 +23,30 @@ def main():
line = line.replace('\n', '') line = line.replace('\n', '')
a, b, c = line.split(',') a, b, c = line.split(',')
answerList = copycat.run(a, b, c, options.iterations, True) answerList = copycat.run(a, b, c, options.iterations, True)
for answers in answerList: results = dict()
for answer, d in sorted(iter(answers.items()), key=lambda kv: kv[1]['avgtemp']): for formula, answers in answerList:
print('%s: %d (avg time %.1f, avg temp %.1f)' % (answer, d['count'], d['avgtime'], d['avgtemp'])) answers = sorted(answers.items(), key=lambda kv : kv[1]['count'])
keys = [k for k, v in answers]
counts = [v['count'] for k, v in answers]
results[formula] = (keys, counts)
originalCounts = defaultdict(lambda : 0)
originalCounts.update(dict(zip(*results['original'])))
for formula, (keys, counts) in results.items():
if formula != 'original':
chi2 = 0
for answer, count in zip(keys, counts):
originalCount = originalCounts[answer]
if originalCount != 0:
chi2 += (count + originalCount) ** 2 / originalCount
print((formula, chi2))
#for answer, d in sorted(iter(answers.items()), key=lambda kv: kv[1]['avgtemp']):
#print('%s: %d (avg time %.1f, avg temp %.1f)' % (answer, d['count'], d['avgtime'], d['avgtemp']))
#filename = 'output/{}-{}-{}.csv'.format(a, b, c) #filename = 'output/{}-{}-{}.csv'.format(a, b, c)
#save_answers(answers, filename) #save_answers(answers, filename)