Repository navigation
Expand file tree
/
Copy pathmakeplots.py
More file actions
115 lines (85 loc) · 4.4 KB
/
Copy pathmakeplots.py
File metadata and controls
115 lines (85 loc) · 4.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
def make_boxplots(tests, save_path):
mses = pd.DataFrame(columns = tests.keys())
# maes = pd.DataFrame(columns = tests.keys())
r2s = pd.DataFrame(columns = tests.keys())
new_mses = pd.DataFrame(columns = tests.keys())
# new_maes = pd.DataFrame(columns = tests.keys())
new_r2s = pd.DataFrame(columns = tests.keys())
for key in tests.keys():
mses[key] = tests[key]["MSE"]
# maes[key] = tests[key]["MAE"]
r2s[key] = tests[key]["R2"]
new_mses[key] = tests[key]["NEW_MSE"]
# new_maes[key] = tests[key]["NEW_MAE"]
new_r2s[key] = tests[key]["NEW_R2"]
NO_MODELS = len(tests.keys())
model_names = [i for i in tests.keys()]
filter(lambda name: name != 'SVR', model_names)
fig, axs = plt.subplots(NO_MODELS, 2, figsize=(10, 20))
# Change title font size
plt.rc('figure', titlesize=40)
fig.suptitle(f'{save_path} dataset results'.capitalize(), x=0.5, y=0.965)
fig.tight_layout(pad=6.0)
title_font_size = 22
label_font_size = 22
for ax in axs:
ax[0].tick_params(axis='both', which='major', labelsize=18)
ax[1].tick_params(axis='both', which='major', labelsize=18)
for i in range(NO_MODELS):
sns.set_theme(style="white", palette=None)
old_new_mse = pd.DataFrame({
"MSE" : np.concatenate((mses.iloc[:, i], new_mses.iloc[:, i])),
"Data" : np.concatenate((np.repeat("Old", mses.shape[0]), np.repeat("New", new_mses.shape[0]))),
"Model" : np.repeat(model_names[i], mses.shape[0] + new_mses.shape[0])
})
b = sns.boxplot(x="MSE", y="Data", data=old_new_mse, ax=axs[i, 0], orient="h", width=0.5)
b.axes.set_title(model_names[i] + ' MSE',fontsize=title_font_size)
b.set_xlabel('MSE', fontsize=label_font_size)
b.set_ylabel('MSE value', fontsize=label_font_size)
old_new_r2 = pd.DataFrame({
"R2" : np.concatenate((r2s.iloc[:, i], new_r2s.iloc[:, i])),
"Data" : np.concatenate((np.repeat("Old", r2s.shape[0]), np.repeat("New", new_r2s.shape[0]))),
"Model" : np.repeat(model_names[i], r2s.shape[0] + new_r2s.shape[0])
})
b = sns.boxplot(x="R2", y="Data", data=old_new_r2, ax=axs[i, 1], orient="h", width=0.5)
b.axes.set_title(model_names[i] + ' R2',fontsize=title_font_size)
b.set_xlabel('R2', fontsize=label_font_size)
b.set_ylabel('R2 value', fontsize=label_font_size)
# save plot
plt.savefig(f"plots/{save_path}.png")
def generate_plot_from_csv(path, name):
print(name)
models = ['GradientBoostingRegressor', 'MLPRegressor', 'RandomForestRegressor', 'SGDRegressor']
tests = dict()
complete_means = pd.DataFrame(columns=['Model', 'MSE', 'NEW_MSE', 'R2', 'NEW_R2'])
for model_name in models:
tests[model_name] = pd.read_csv(f"{path}/{name}/{model_name}.csv")
means = tests[model_name].mean()
means = pd.DataFrame(means).transpose()
means = means.drop(columns=['Unnamed: 0', 'MAE', 'NEW_MAE'])
means['Model'] = model_name
means = means[['Model', 'MSE', 'NEW_MSE', 'R2', 'NEW_R2']]
complete_means = pd.concat([complete_means, means], ignore_index=True)
complete_means = complete_means.set_index('Model')
# bold max values between new and old
mask1 = complete_means['MSE'] < complete_means['NEW_MSE']
mask2 = complete_means['NEW_MSE'] < complete_means['MSE']
complete_means.loc[mask1, 'MSE'] = complete_means.loc[mask1, 'MSE'].apply(lambda x: f"\\textbf{{{x}}}")
complete_means.loc[mask2, 'NEW_MSE'] = complete_means.loc[mask2, 'NEW_MSE'].apply(lambda x: f"\\textbf{{{x}}}")
mask1 = complete_means['R2'] > complete_means['NEW_R2']
mask2 = complete_means['NEW_R2'] > complete_means['R2']
complete_means.loc[mask1, 'R2'] = complete_means.loc[mask1, 'R2'].apply(lambda x: f"\\textbf{{{x}}}")
complete_means.loc[mask2, 'NEW_R2'] = complete_means.loc[mask2, 'NEW_R2'].apply(lambda x: f"\\textbf{{{x}}}")
print(complete_means)
complete_means.style.to_latex(f"plots/latex/{name}.tex")
make_boxplots(tests, name)
return
if __name__ == "__main__":
generate_plot_from_csv("results", 'diabetes')
generate_plot_from_csv("results", 'insurance')
generate_plot_from_csv("results", 'wine')
generate_plot_from_csv("results", 'university')