diff --git a/project-cancer-classification-pca-nn.ipynb b/project-cancer-classification-pca-nn.ipynb index 49859d0..c32a729 100644 --- a/project-cancer-classification-pca-nn.ipynb +++ b/project-cancer-classification-pca-nn.ipynb @@ -315,11 +315,43 @@ "import pickle\n", "\n", "class ExperimentationalExperiments():\n", + " \"\"\"\n", + " Diese Klasse dient zur Durchführung und Verwaltung von Experimenten im Rahmen\n", + " des maschinellen Lernens, insbesondere für die Krebsklassifikation.\n", + "\n", + " Attribute:\n", + " results : Dict\n", + " Speichert die Ergebnisse der durchgeführten Experimente.\n", + " \"\"\"\n", "\n", " def __init__(self) -> None:\n", + " \"\"\" Konstruktor der Klasse. Initialisiert 'results' als None. \"\"\"\n", " self.results = None\n", "\n", " def run_single_experiment(self, train_loader: DataLoader, valid_loader: DataLoader, n_pca_components: int, n_epochs: int = 200, learning_rate: int = 0.0005, verbose: bool = True, experiment_num: int = None) -> Tuple:\n", + " \"\"\"\n", + " Führt ein einzelnes Experiment mit dem spezifizierten DataLoader, PCA-Komponenten und weiteren Parametern durch.\n", + "\n", + " Parameter:\n", + " train_loader : DataLoader\n", + " Der DataLoader für den Trainingsdatensatz.\n", + " valid_loader : DataLoader\n", + " Der DataLoader für den Validierungsdatensatz.\n", + " n_pca_components : int\n", + " Anzahl der PCA-Komponenten, die im Modell verwendet werden.\n", + " n_epochs : int, optional\n", + " Anzahl der Epochen für das Training (Standardwert ist 200).\n", + " learning_rate : float, optional\n", + " Lernrate für den Optimierer (Standardwert ist 0.0005).\n", + " verbose : bool, optional\n", + " Gibt an, ob der Trainingsfortschritt angezeigt werden soll (Standardwert ist True).\n", + " experiment_num : int, optional\n", + " Nummer des Experiments.\n", + "\n", + " Rückgabewerte:\n", + " Tuple\n", + " Ein Tupel bestehend aus Listen der Trainings- und Validierungsverluste sowie der Genauigkeiten.\n", + " \"\"\"\n", " if not isinstance(n_pca_components, int):\n", " raise TypeError(\"n_pca_components must be an integers!\")\n", "\n", @@ -428,6 +460,29 @@ " return train_losses, valid_losses, train_accuracies, valid_accuracies\n", "\n", " def run_single_pca_experiment(self, train_loader: DataLoader, valid_loader: DataLoader, n_pca_components: int, n_experiments: int, n_epochs: int = 200, learning_rate: int = 0.0005, verbose: bool = True) -> List:\n", + " \"\"\"\n", + " Führt eine Serie von Experimenten mit verschiedenen Konfigurationen für die PCA-Komponenten durch.\n", + "\n", + " Parameter:\n", + " train_loader : DataLoader\n", + " Der DataLoader für den Trainingsdatensatz.\n", + " valid_loader : DataLoader\n", + " Der DataLoader für den Validierungsdatensatz.\n", + " n_pca_components : int\n", + " Anzahl der PCA-Komponenten, die im Modell verwendet werden.\n", + " n_experiments : int\n", + " Anzahl der durchzuführenden Experimente.\n", + " n_epochs : int, optional\n", + " Anzahl der Epochen für das Training (Standardwert ist 200).\n", + " learning_rate : float, optional\n", + " Lernrate für den Optimierer (Standardwert ist 0.0005).\n", + " verbose : bool, optional\n", + " Gibt an, ob der Trainingsfortschritt angezeigt werden soll (Standardwert ist True).\n", + "\n", + " Rückgabewerte:\n", + " List\n", + " Eine Liste von Ergebnissen der einzelnen Experimente.\n", + " \"\"\"\n", " if not isinstance(n_pca_components, int):\n", " raise TypeError(\"n_pca_components must be an integers!\")\n", "\n", @@ -441,6 +496,27 @@ " \n", "\n", " def run(self, n_pca_components: List[int], n_experiments: int, n_epochs: int = 200, learning_rate: int = 0.0005, batch_size: int = 64, verbose: bool = True) -> Dict:\n", + " \"\"\"\n", + " Hauptmethode zum Ausführen von Experimenten mit verschiedenen Anzahlen von PCA-Komponenten.\n", + "\n", + " Parameter:\n", + " n_pca_components : List[int]\n", + " Eine Liste von Anzahlen der PCA-Komponenten, die in den Experimenten verwendet werden sollen.\n", + " n_experiments : int\n", + " Anzahl der durchzuführenden Experimente pro PCA-Komponentenanzahl.\n", + " n_epochs : int, optional\n", + " Anzahl der Epochen für das Training (Standardwert ist 200).\n", + " learning_rate : float, optional\n", + " Lernrate für den Optimierer (Standardwert ist 0.0005).\n", + " batch_size : int, optional\n", + " Batch-Größe für das Laden der Daten (Standardwert ist 64).\n", + " verbose : bool, optional\n", + " Gibt an, ob der Trainingsfortschritt angezeigt werden soll (Standardwert ist True).\n", + "\n", + " Rückgabewerte:\n", + " Dict\n", + " Ein Wörterbuch, das die Ergebnisse der Experimente für jede Anzahl von PCA-Komponenten enthält.\n", + " \"\"\"\n", " if not isinstance(n_pca_components, list):\n", " raise TypeError(\"n_pca_components must be a list of integers!\")\n", "\n", @@ -473,6 +549,18 @@ " return results\n", "\n", " def plot_and_save_results(self, results: List[Tuple], n_pca_components: int) -> None:\n", + " \"\"\"\n", + " Erstellt und speichert Plots für die Ergebnisse der Experimente.\n", + "\n", + " Parameter:\n", + " results : List[Tuple]\n", + " Eine Liste von Tupeln mit den Ergebnissen der Experimente.\n", + " n_pca_components : int\n", + " Anzahl der PCA-Komponenten, für die die Ergebnisse geplottet werden sollen.\n", + "\n", + " Keine Rückgabewerte, da die Methode Plots speichert.\n", + " \"\"\"\n", + " \n", " # Mittelwerte und Standardabweichungen berechnen\n", " train_losses, valid_losses, train_accuracies, valid_accuracies = zip(*results)\n", "\n",