import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
sns.set(style="darkgrid")
sns.set_palette("tab10")
### Plotting
[docs]def plot_accuracies_per_tag(title, **kwargs):
if kwargs is None:
print("Need accuracies to plot")
return
classes = set(sum([list(kwargs[exp].keys()) for exp in kwargs], []))
classes = list(classes)
classes.remove("__OVERALL__")
classes = ["Overall"] + sorted(classes)
experiments = {}
for exp in kwargs:
experiments[exp] = {
k: kwargs[exp][k] for k in kwargs[exp] if k != "__OVERALL__"
}
experiments[exp]["Overall"] = kwargs[exp]["__OVERALL__"]
df = pd.DataFrame([{"experiment": exp, **experiments[exp]} for exp in experiments])
df = pd.melt(df, id_vars="experiment", var_name="type", value_name="accuracy")
fig, ax = plt.subplots(1, 1, figsize=(16, 6))
plt.sca(ax)
ax.tick_params(axis="x", rotation=90)
ax.set_ylim((0.5, 1.05))
sns.factorplot(
ax=ax,
x="type",
y="accuracy",
hue="experiment",
data=df,
kind="bar",
order=classes,
legend_out=True,
)
handles, labels = ax.get_legend_handles_labels()
l = ax.legend(
handles=handles,
labels=labels,
title=title,
frameon=True,
fancybox=True,
framealpha=0.8,
facecolor="#FFFFFF",
)
return fig
[docs]def plot_distributedness(title, top_neurons_per_tag):
fig, ax = plt.subplots(1, 1, figsize=(16, 6))
tags = sorted(top_neurons_per_tag.keys())
number_of_neurons = [len(top_neurons_per_tag[tag]) for tag in tags]
ax = sns.barplot(x=tags, y=number_of_neurons, color="yellowgreen")
ax.tick_params(axis="x", rotation=90)
ax.set_ylabel("Number of Important Neurons")
ax.set_title(title)
[docs]def plot_accuracies(
title,
overall_acc,
top_10_acc,
random_10_acc,
bottom_10_acc,
top_15_acc,
random_15_acc,
bottom_15_acc,
top_20_acc,
random_20_acc,
bottom_20_acc,
):
exps = [
"Full",
" ",
"Top 10%",
"Random 10%",
"Bottom 10%",
" ",
"Top 15%",
"Random 15%",
"Bottom 15%",
" ",
"Top 20%",
"Random 20%",
"Bottom 20%",
]
concise_exps = [
"",
"Full",
" ",
" ",
"10% Neurons",
" ",
" ",
" ",
"15% Neurons",
" ",
" ",
" ",
"20% Neurons",
" ",
" ",
]
accs = np.array(
[
0,
overall_acc,
0,
top_10_acc,
random_10_acc,
bottom_10_acc,
0,
top_15_acc,
random_15_acc,
bottom_15_acc,
0,
top_20_acc,
random_20_acc,
bottom_20_acc,
0,
]
)
min_value = np.min(accs[accs > 0.01])
colors = [
(0, 0, 0),
"limegreen",
(0, 0, 0),
"dodgerblue",
"gold",
"orangered",
"g",
"dodgerblue",
"gold",
"orangered",
"g",
"dodgerblue",
"gold",
"orangered",
"g",
(0, 0, 0),
]
ax = sns.barplot(x=concise_exps, y=accs, palette=colors)
ax.set_ylim((max(min_value - 0.1, 0), 1.04))
ax.set_title(title)
handles = [ax.patches[1], ax.patches[3], ax.patches[4], ax.patches[5]]
labels = ["All Neurons", "Top Neurons", "Random Neurons", "Bottom Neurons"]
ax.legend(
handles=handles,
labels=labels,
frameon=True,
fancybox=True,
ncol=2,
framealpha=0.8,
facecolor="#FFFFFF",
)