Calculate Chi^2 values for getAdj- formulas
This commit is contained in:
@ -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
|
||||||
|
|
||||||
|
|||||||
28
multi-run.py
28
multi-run.py
@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user