Mercurial > repos > goeckslab > pycaret_compare
comparison pycaret_classification.py @ 0:915447b14520 draft
planemo upload for repository https://github.com/goeckslab/Galaxy-Pycaret commit d79b0f722b7d09505a526d1a4332f87e548a3df1
author | goeckslab |
---|---|
date | Wed, 11 Dec 2024 05:00:00 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:915447b14520 |
---|---|
1 import logging | |
2 | |
3 from base_model_trainer import BaseModelTrainer | |
4 | |
5 from dashboard import generate_classifier_explainer_dashboard | |
6 | |
7 from pycaret.classification import ClassificationExperiment | |
8 | |
9 from utils import add_hr_to_html, add_plot_to_html | |
10 | |
11 LOG = logging.getLogger(__name__) | |
12 | |
13 | |
14 class ClassificationModelTrainer(BaseModelTrainer): | |
15 def __init__( | |
16 self, | |
17 input_file, | |
18 target_col, | |
19 output_dir, | |
20 task_type, | |
21 random_seed, | |
22 test_file=None, | |
23 **kwargs): | |
24 super().__init__( | |
25 input_file, | |
26 target_col, | |
27 output_dir, | |
28 task_type, | |
29 random_seed, | |
30 test_file, | |
31 **kwargs) | |
32 self.exp = ClassificationExperiment() | |
33 | |
34 def save_dashboard(self): | |
35 LOG.info("Saving explainer dashboard") | |
36 dashboard = generate_classifier_explainer_dashboard(self.exp, | |
37 self.best_model) | |
38 dashboard.save_html("dashboard.html") | |
39 | |
40 def generate_plots(self): | |
41 LOG.info("Generating and saving plots") | |
42 plots = ['confusion_matrix', 'auc', 'threshold', 'pr', | |
43 'error', 'class_report', 'learning', 'calibration', | |
44 'vc', 'dimension', 'manifold', 'rfe', 'feature', | |
45 'feature_all'] | |
46 for plot_name in plots: | |
47 try: | |
48 if plot_name == 'auc' and not self.exp.is_multiclass: | |
49 plot_path = self.exp.plot_model(self.best_model, | |
50 plot=plot_name, | |
51 save=True, | |
52 plot_kwargs={ | |
53 'micro': False, | |
54 'macro': False, | |
55 'per_class': False, | |
56 'binary': True | |
57 } | |
58 ) | |
59 self.plots[plot_name] = plot_path | |
60 continue | |
61 | |
62 plot_path = self.exp.plot_model(self.best_model, | |
63 plot=plot_name, save=True) | |
64 self.plots[plot_name] = plot_path | |
65 except Exception as e: | |
66 LOG.error(f"Error generating plot {plot_name}: {e}") | |
67 continue | |
68 | |
69 def generate_plots_explainer(self): | |
70 LOG.info("Generating and saving plots from explainer") | |
71 | |
72 from explainerdashboard import ClassifierExplainer | |
73 | |
74 X_test = self.exp.X_test_transformed.copy() | |
75 y_test = self.exp.y_test_transformed | |
76 | |
77 explainer = ClassifierExplainer(self.best_model, X_test, y_test) | |
78 self.expaliner = explainer | |
79 plots_explainer_html = "" | |
80 | |
81 try: | |
82 fig_importance = explainer.plot_importances() | |
83 plots_explainer_html += add_plot_to_html(fig_importance) | |
84 plots_explainer_html += add_hr_to_html() | |
85 except Exception as e: | |
86 LOG.error(f"Error generating plot importance(mean shap): {e}") | |
87 | |
88 try: | |
89 fig_importance_perm = explainer.plot_importances( | |
90 kind="permutation") | |
91 plots_explainer_html += add_plot_to_html(fig_importance_perm) | |
92 plots_explainer_html += add_hr_to_html() | |
93 except Exception as e: | |
94 LOG.error(f"Error generating plot importance(permutation): {e}") | |
95 | |
96 # try: | |
97 # fig_shap = explainer.plot_shap_summary() | |
98 # plots_explainer_html += add_plot_to_html(fig_shap, | |
99 # include_plotlyjs=False) | |
100 # except Exception as e: | |
101 # LOG.error(f"Error generating plot shap: {e}") | |
102 | |
103 # try: | |
104 # fig_contributions = explainer.plot_contributions( | |
105 # index=0) | |
106 # plots_explainer_html += add_plot_to_html( | |
107 # fig_contributions, include_plotlyjs=False) | |
108 # except Exception as e: | |
109 # LOG.error(f"Error generating plot contributions: {e}") | |
110 | |
111 # try: | |
112 # for feature in self.features_name: | |
113 # fig_dependence = explainer.plot_dependence(col=feature) | |
114 # plots_explainer_html += add_plot_to_html(fig_dependence) | |
115 # except Exception as e: | |
116 # LOG.error(f"Error generating plot dependencies: {e}") | |
117 | |
118 try: | |
119 for feature in self.features_name: | |
120 fig_pdp = explainer.plot_pdp(feature) | |
121 plots_explainer_html += add_plot_to_html(fig_pdp) | |
122 plots_explainer_html += add_hr_to_html() | |
123 except Exception as e: | |
124 LOG.error(f"Error generating plot pdp: {e}") | |
125 | |
126 try: | |
127 for feature in self.features_name: | |
128 fig_interaction = explainer.plot_interaction( | |
129 col=feature, interact_col=feature) | |
130 plots_explainer_html += add_plot_to_html(fig_interaction) | |
131 except Exception as e: | |
132 LOG.error(f"Error generating plot interactions: {e}") | |
133 | |
134 try: | |
135 for feature in self.features_name: | |
136 fig_interactions_importance = \ | |
137 explainer.plot_interactions_importance( | |
138 col=feature) | |
139 plots_explainer_html += add_plot_to_html( | |
140 fig_interactions_importance) | |
141 plots_explainer_html += add_hr_to_html() | |
142 except Exception as e: | |
143 LOG.error(f"Error generating plot interactions importance: {e}") | |
144 | |
145 # try: | |
146 # for feature in self.features_name: | |
147 # fig_interactions_detailed = \ | |
148 # explainer.plot_interactions_detailed( | |
149 # col=feature) | |
150 # plots_explainer_html += add_plot_to_html( | |
151 # fig_interactions_detailed) | |
152 # except Exception as e: | |
153 # LOG.error(f"Error generating plot interactions detailed: {e}") | |
154 | |
155 try: | |
156 fig_precision = explainer.plot_precision() | |
157 plots_explainer_html += add_plot_to_html(fig_precision) | |
158 plots_explainer_html += add_hr_to_html() | |
159 except Exception as e: | |
160 LOG.error(f"Error generating plot precision: {e}") | |
161 | |
162 try: | |
163 fig_cumulative_precision = explainer.plot_cumulative_precision() | |
164 plots_explainer_html += add_plot_to_html(fig_cumulative_precision) | |
165 plots_explainer_html += add_hr_to_html() | |
166 except Exception as e: | |
167 LOG.error(f"Error generating plot cumulative precision: {e}") | |
168 | |
169 try: | |
170 fig_classification = explainer.plot_classification() | |
171 plots_explainer_html += add_plot_to_html(fig_classification) | |
172 plots_explainer_html += add_hr_to_html() | |
173 except Exception as e: | |
174 LOG.error(f"Error generating plot classification: {e}") | |
175 | |
176 try: | |
177 fig_confusion_matrix = explainer.plot_confusion_matrix() | |
178 plots_explainer_html += add_plot_to_html(fig_confusion_matrix) | |
179 plots_explainer_html += add_hr_to_html() | |
180 except Exception as e: | |
181 LOG.error(f"Error generating plot confusion matrix: {e}") | |
182 | |
183 try: | |
184 fig_lift_curve = explainer.plot_lift_curve() | |
185 plots_explainer_html += add_plot_to_html(fig_lift_curve) | |
186 plots_explainer_html += add_hr_to_html() | |
187 except Exception as e: | |
188 LOG.error(f"Error generating plot lift curve: {e}") | |
189 | |
190 try: | |
191 fig_roc_auc = explainer.plot_roc_auc() | |
192 plots_explainer_html += add_plot_to_html(fig_roc_auc) | |
193 plots_explainer_html += add_hr_to_html() | |
194 except Exception as e: | |
195 LOG.error(f"Error generating plot roc auc: {e}") | |
196 | |
197 try: | |
198 fig_pr_auc = explainer.plot_pr_auc() | |
199 plots_explainer_html += add_plot_to_html(fig_pr_auc) | |
200 plots_explainer_html += add_hr_to_html() | |
201 except Exception as e: | |
202 LOG.error(f"Error generating plot pr auc: {e}") | |
203 | |
204 self.plots_explainer_html = plots_explainer_html |