in src/rime/util/plotting.py [0:0]
def plot_rec_results(self, metric_name='recall'):
""" self is an instance of Experiment or ExperimentResult """
ir = pd.DataFrame(self.item_rec).T
ur = pd.DataFrame(self.user_rec).T
df = ir[[metric_name]] * 100
axname_itemrec = f"ItemRec {metric_name}@{self._k1} (x100)"
axname_userrec = f'UserRec {metric_name}@{self._c1} (x100)'
df = df.rename(columns={metric_name: axname_itemrec})
df[axname_userrec] = ur[metric_name] * 100
df = df.reset_index()
df['index'] = df['index'].apply(lambda x: x.replace('-Extra', '_ex').replace('-Item', '_item')
.replace('-User', '_user').replace('-Base', '')
.replace('-0', '_0').replace('-1', '_1'))
df['index'] = df['index'].apply(lambda x: 'ItemPopularity-' + x if x in ['Hawkes', 'HP', 'EMA'] else x)
df['index'] = df['index'].apply(lambda x: 'ItemPopularity-UserPopularity' if x == 'Pop' else x)
df['index'] = df['index'].apply(lambda x: x.replace('Rand', 'Random-None'))
df['index'] = df['index'].apply(lambda x: x.replace('-Pop', '-UserPopularity').replace('HP', 'HawkesPoisson'))
df['Base model'] = df['index'].apply(lambda x: x.split('-')[0])
df['Intensity modeling'] = df['index'].apply(lambda x: x.split('-')[1] if '-' in x else 'None')
sns.set(rc={'figure.figsize': (8, 5), "font.size": 20, "axes.titlesize": 16,
"axes.labelsize": 16, "xtick.labelsize": 10, "ytick.labelsize": 10},
style="white")
markers = {
'ItemPopularity': 'X',
'Transformer': 'o',
'RNN': 'P',
'Random': '$RND$',
'BPR': '$BPR$',
'GraphConv': '$GC$',
'GraphConv_ex': '$GC\'$',
'ALS': '$ALS$',
'LogisticMF': '$LMF$',
'LDA': '$LDA$',
'BPR_item': '$BPR_i$',
'BPR_user': '$BPR_u$'}
large = 3000
big = 1000
sm = 80
sizes = {
'ItemPopularity': sm,
'Transformer': sm,
'RNN': sm,
'Random': big,
'BPR': big,
'GraphConv': 600,
'GraphConv_ex': big,
'ALS': big,
'LogisticMF': big,
'LDA': big,
'BPR_item': big,
'BPR_user': big}
markers.update({x: f"${x}$" for x in df['Base model'] if x not in markers})
sizes.update({x: large for x in df['Base model'] if x not in sizes})
figure = sns.relplot(
x=axname_itemrec, y=axname_userrec, style='Base model', size='Base model', sizes=sizes,
hue_order=['UserPopularity', 'EMA', 'HawkesPoisson', 'Hawkes', 'None'], markers=markers,
linewidth=0.25, style_order=list(sizes.keys()), size_order=list(sizes.keys()),
hue='Intensity modeling', data=df, facet_kws={'sharex': False, 'sharey': False}, legend='full')
ax = figure.fig.axes[0]
pop = df[df['index'] == 'ItemPopularity-UserPopularity'].iloc[0]
ax.axvline(x=pop[axname_itemrec], c='grey', linestyle='--', alpha=0.6, lw=1)
ax.axhline(y=pop[axname_userrec], c='grey', linestyle='--', alpha=0.6, lw=1, label='popularity baseline')
return figure