Source code for library.phases.phases_implementation.modelling.results_analysis.result_analysis



from library.phases.phases_implementation.dataset.dataset import Dataset
import pandas as pd 

import matplotlib.pyplot as plt
import seaborn as sns
import math

from abc import ABC, abstractmethod


[docs] class ResultAnalysis(ABC): def __init__(self, phase_results_df: pd.DataFrame): self.phase_results_df = phase_results_df
[docs] def plot_multiple_model_metrics(self, feature_list): """ Plots bar charts of multiple performance metrics across different models. Parameters ---------- feature_list : list of str List of metric names (features) to plot. Behavior -------- - Creates a grid of bar plots with 2 columns, adjusting rows as needed. - Each subplot shows the metric values for each model from `phase_results_df`. - Bars are annotated with their numeric values. - Unused subplots are removed for a cleaner layout. - X-axis labels are rotated for better readability. Returns ------- None """ num_features = len(feature_list) cols = 2 rows = math.ceil(num_features / cols) fig, axes = plt.subplots(rows, cols, figsize=(cols * 6, rows * 5)) axes = axes.flatten() # Flatten to iterate easily, even if 1 row for i, feature in enumerate(feature_list): ax = axes[i] sns.barplot(data=self.phase_results_df, x='modelName', y=feature, ax=ax) ax.set_title(f'{feature} by Model') ax.set_xlabel('Model Name') ax.set_ylabel(feature) ax.tick_params(axis='x', rotation=45) # Annotate values for container in ax.containers: ax.bar_label(container, fmt='%.4f', label_type='edge') # Hide any unused subplots for j in range(i + 1, len(axes)): fig.delaxes(axes[j]) plt.tight_layout() plt.show()
[docs] @abstractmethod def plot_results(self): """ scatterplot and histogram of the results """ pass
[docs] @abstractmethod def feature_importance(self): pass
[docs] @abstractmethod def extract_metrics(self): pass
[docs] class PreTuningResultAnalysis(ResultAnalysis): def __init__(self, phase_results_df: pd.DataFrame): super().__init__(phase_results_df)
[docs] def plot_results(self): pass
[docs] def feature_importance(self): pass
[docs] def extract_metrics(self): pass
[docs] class InTuningResultAnalysis(ResultAnalysis): def __init__(self, phase_results_df: pd.DataFrame): super().__init__(phase_results_df)
[docs] def plot_results(self): pass
[docs] def feature_importance(self): pass
[docs] def extract_metrics(self): pass
[docs] class PostTuningResultAnalysis(ResultAnalysis): def __init__(self, phase_results_df: pd.DataFrame): super().__init__(phase_results_df)
[docs] def plot_results(self): pass
[docs] def feature_importance(self): pass
[docs] def extract_metrics(self): pass