def Run(self, params): print('running AcceptancePcn: %s' % jobs.params_to_string(params)) # Get filenames for inputs. deps = self.Dependencies(params) df = pandas.DataFrame(columns=[ 'alg', 'N', 'rho', 'iact_seconds', ]) for dep in deps: dep_outputs = jobs.Outputs(dep) assert len(dep_outputs) == 1 dep_output = dep_outputs[0] with h5py.File(dep_output) as hf: samples = np.array(hf['/samples']) acceptances = sum(samples[1:] != samples[:-1]) rate = acceptances / (len(samples) - 1) label = nice_alg_name(dep.params) df = df.append({ 'alg': label, 'N': dep.params['dataset']['N'], 'rho': dep.params['proposal']['params']['rho'], 'acceptance_rate': rate, }, ignore_index=True) print(df) hue_order = [ 'MH', 'SMH-1', 'SMH-2', 'FlyMC', ] plt.figure(figsize=[6.4, 3.2]) fig, subplots = plt.subplots(1, len(self.rhos)) for i in range(len(self.rhos)): ax = subplots[i] rho = self.rhos[i] sns.pointplot( ax=ax, x='N', y='acceptance_rate', data=df[df['rho'] == rho], hue='alg', hue_order=hue_order, markers=[markers[k] for k in hue_order], linestyles=[linestyles[k] for k in hue_order], palette=palette, ) current_axes = ax.axis() ax.axis([current_axes[0], current_axes[1], 0.0, 1.0]) if i == 0: legend = ax.legend() legend.set_title('') else: ax.get_legend().remove() ax.set(ylabel='') ax.yaxis.set_ticks([]) ax.yaxis.set_ticklabels([]) ticklabels = ax.xaxis.get_ticklabels() num_ticks = len(ticklabels) ax.xaxis.set_ticks([0, num_ticks-1]) ax.xaxis.set_ticklabels([ticklabels[0], ticklabels[-1]]) for i, l in enumerate(ax.xaxis.get_ticklabels()): if i != 0 and i != len(ax.xaxis.get_ticklabels()) - 1: l.set_visible(False) ax.set(xlabel=r'$n$') ax.set(ylabel=i == 0 and 'Acceptance Rate' or '') ax.set_title(r'$\rho=%0.1f$' % rho) plt.savefig(self.Outputs(params)[0], bbox_inches='tight', pad_inches=0)
def Run(self, params): print('running EssRandomWalk: %s' % jobs.params_to_string(params)) # Get filenames for inputs. deps = self.Dependencies(params) df = pandas.DataFrame(columns=[ 'alg', 'N', 'ess_seconds', ]) for dep in deps: dep_outputs = jobs.Outputs(dep) assert len(dep_outputs) == 1 dep_output = dep_outputs[0] label = nice_alg_name(dep.params) pickle_data = pickle.load(open(dep_output, 'rb')) # TODO rename this 'run' and restructure the pickled data for run in pickle_data['data']: df = df.append({ 'alg': label, 'N': dep.params['dataset']['N'], 'ess_seconds': 1.0 / run['iact_seconds'], }, ignore_index=True) print(df) hue_order = [ 'MH', 'SMH-1', 'SMH-2', 'FlyMC', ] if params['model_type'] == 'lr': hue_order.append('Zig-Zag') plt.figure(figsize=[6.4, 3.2]) ax = sns.pointplot( x='N', y='ess_seconds', data=df, hue='alg', hue_order=hue_order, markers=[markers[k] for k in hue_order], linestyles=[linestyles[k] for k in hue_order], palette=palette, ) ax.set(ylabel=r'Effective sample size per second') legend = ax.legend() legend.set_title('') ax.set(xlabel=r'$n$') ax.set(yscale='log') min_n = df['N'].min() max_n = df['N'].max() new_ticklabels = ax.xaxis.get_ticklabels() new_ticklabels[-2] = '' new_ticklabels[-4] = '' ax.xaxis.set_ticklabels(new_ticklabels) plt.savefig(self.Outputs(params)[0], bbox_inches='tight', pad_inches=0)
def Run(self, params): print('running EssPcn: %s' % jobs.params_to_string(params)) # Get filenames for inputs. deps = self.Dependencies(params) df = pandas.DataFrame(columns=[ 'alg', 'N', 'rho', 'ess_seconds', ]) for dep in deps: dep_outputs = jobs.Outputs(dep) assert len(dep_outputs) == 1 dep_output = dep_outputs[0] label = nice_alg_name(dep.params) pickle_data = pickle.load(open(dep_output, 'rb')) print('pickle_data:') print(pickle_data) # TODO rename this 'run' and restructure the pickled data for run in pickle_data['data']: df = df.append({ 'alg': label, 'N': dep.params['dataset']['N'], 'rho': dep.params['proposal']['params']['rho'], 'ess_seconds': 1.0 / run['iact_seconds'], }, ignore_index=True) print(df) hue_order = [ 'MH', 'SMH-1', 'SMH-2', 'FlyMC', ] plt.figure(figsize=[6.4, 3.2]) fig, subplots = plt.subplots(1, len(self.rhos)) for i in range(len(self.rhos)): ax = subplots[i] rho = self.rhos[i] sns.pointplot( ax=ax, x='N', y='ess_seconds', data=df[df['rho'] == rho], hue='alg', hue_order=hue_order, markers=[markers[k] for k in hue_order], linestyles=[linestyles[k] for k in hue_order], palette=palette, ) if i == 0: legend = ax.legend() legend.set_title('') ax.set(ylabel='First moment ESS per second') else: ax.get_legend().remove() ax.set(ylabel='') ax.yaxis.set_ticklabels([]) ax.yaxis.set_ticklabels([], minor=True) ax.set_title(r'$\rho = %0.1f$' % rho) ax.set(xlabel=r'$n$') ax.set(yscale='log') ticklabels = ax.xaxis.get_ticklabels() num_ticks = len(ticklabels) ax.xaxis.set_ticks([0, num_ticks - 1]) ax.xaxis.set_ticklabels([ticklabels[0], ticklabels[-1]]) for j, l in enumerate(ax.xaxis.get_ticklabels()): if j != 0 and j != len(ax.xaxis.get_ticklabels()) - 1: l.set_visible(False) # Square up axes. min_y = np.inf max_y = -np.inf for ax in subplots: axis = ax.axis() min_y = min(min_y, axis[2]) max_y = max(max_y, axis[3]) for ax in subplots: axis = ax.axis() ax.axis([axis[0], axis[1], min_y, max_y]) for i, ax in enumerate(subplots): if i != 0: ax.yaxis.set_ticklabels([]) ax.yaxis.set_ticklabels([], minor=True) plt.savefig(self.Outputs(params)[0], bbox_inches='tight', pad_inches=0)
def Run(self, params): print('running LikelihoodsPerIterationPlot: %s' % jobs.params_to_string(params)) # Get filenames for inputs. deps = self.Dependencies(params) df = pandas.DataFrame(columns=[ 'alg', 'N', 'likelihood_evaluations', 'iterations', ]) for dep in deps: dep_outputs = jobs.Outputs(dep) assert len(dep_outputs) == 1 dep_output = dep_outputs[0] label = nice_alg_name(dep.params) with h5py.File(dep_output) as hf: df = df.append({ 'alg': label, 'N': dep.params['dataset']['N'], 'iterations': np.array(hf['/samples']).shape[0], 'likelihood_evaluations': np.array(hf['/likelihood_evaluations'])[0], }, ignore_index=True) df['likelihoods_per_iteration'] = df['likelihood_evaluations'] / df['iterations'] print(df) hue_order = [ 'MH', 'SMH-1', 'SMH-2', ] poster = False if poster: context = { 'text.usetex': True, 'text.latex.preamble': '\\RequirePackage{cmbright}\n\\RequirePackage[default]{lato}', 'axes.facecolor': 'ffffff', 'axes.edgecolor': '000000', 'axes.labelcolor': 'ffffff', 'xtick.color': 'ffffff', 'ytick.color': 'ffffff', 'legend.edgecolor': '000000', 'legend.facecolor': 'ffffff', 'text.color': '000000', 'savefig.facecolor': '002147', } else: context = {} with plt.rc_context(context): fig = plt.figure(figsize=[6.4, 3.2]) ax = sns.pointplot( x='N', y='likelihoods_per_iteration', data=df, hue='alg', hue_order=hue_order, markers=[markers[k] for k in hue_order], linestyles=[linestyles[k] for k in hue_order], palette=palette, ) ax.set(ylabel=r'Likelihood evaluations per iteration') legend = ax.legend() legend.set_title('') ax.set(xlabel=r'$n$') ax.set(yscale='log') min_n = df['N'].min() max_n = df['N'].max() new_ticklabels = ax.xaxis.get_ticklabels() new_ticklabels[-2] = '' new_ticklabels[-4] = '' ax.xaxis.set_ticklabels(new_ticklabels) plt.savefig(self.Outputs(params)[0], bbox_inches='tight', pad_inches=0)