Second-order SCAFFOLD bias compensation / aggregate.py

Failed on benchmark

Raw ⬇ ZIP
 1import json, numpy as np
 2from experiment import simulate, theoretical_bias
 3
 4def one(n, mode, seed):
 5    return simulate(n,8,.028,mode,seed,rounds=6000,burn=1500)
 6for n in (8,64):
 7    print('N',n,'theory',theoretical_bias(.028,n,8))
 8    for mode in ('vanilla','output_correction','gradient_correction'):
 9        z=[one(n,mode,9000+i) for i in range(5)]
10        # output correction's relevant bias is mean_reported_x; other modes use mean_x.
11        vals=np.array([r['mean_reported_x'] for r in z])
12        print(mode,'mean',vals.mean(),'abs(mean)',abs(vals.mean()),'seed_abs_mean',np.abs(vals).mean(),'sd',vals.std())