From 1812921efbf0f8045e1a7961a6671357cf22465b Mon Sep 17 00:00:00 2001 From: DesireeWyrzylala <74858504+DesireeWyrzylala@users.noreply.github.com> Date: Thu, 13 Feb 2025 22:23:24 +0100 Subject: [PATCH] testen der hyperparameter und ergebnisse einiger modelle wenn stark abweichend --- docs/TO DO LISTE.md | 4 +- docs/evaluation/Vergleich der Ergebnisse.md | 116 ++++++++++++- .../desi/check_evaluation_content.ipynb | 2 +- src/models/desi/test_hyperparameters.ipynb | 161 ++++++++++++++++-- src/models/sofia_modelle/call_knn.py | 2 +- 5 files changed, 262 insertions(+), 23 deletions(-) diff --git a/docs/TO DO LISTE.md b/docs/TO DO LISTE.md index 4916bf2..8cff748 100644 --- a/docs/TO DO LISTE.md +++ b/docs/TO DO LISTE.md @@ -13,6 +13,7 @@ 8. Zwei der vier neuronalen Netze haben bessere Evaluations-metriken auf Sequenzanomalien, statt Punktanoamlien 9. Probleme in der Reproducibility bei kShape, trotz gleicher Hyperparameter und Datensätze haben wir Fehler debuggen müssen. 10. Probleme in der Reproducibility beim Testen der num_channels in CNN (stattdessen mit Lernrate getestet) +11. Probleme bei der Reproducibility bei LOF: Optimale Hyperparameter stimmen nicht mit den getesten überein # TO DO'S + Datensätze genauer untersuchen @@ -44,4 +45,5 @@ + nach Recall, AUC-PR und VUS-PR + Dichtebasiert vs. Distanzbasiert + Statistisch vs. Neuronal -+ Ausarbeiten der Algorithmen und Vorbereiten für die Hausarbeit \ No newline at end of file ++ Ausarbeiten der Algorithmen und Vorbereiten für die Hausarbeit ++ Histplot / Barplot erstellen mit Ergebnissen von VUS-PR bei TAO von den Autoren gegenüber unseren Ergebnissen für die Modelle, bei denen die Werte stark abweichen \ No newline at end of file diff --git a/docs/evaluation/Vergleich der Ergebnisse.md b/docs/evaluation/Vergleich der Ergebnisse.md index 0871f39..db4248d 100644 --- a/docs/evaluation/Vergleich der Ergebnisse.md +++ b/docs/evaluation/Vergleich der Ergebnisse.md @@ -412,6 +412,27 @@ + nach VUS-PR: + MGAB: 0.005586 (vgl. 0.0, + 0.005 , vermutl. gleich) +**TAO DATENSATZ** +*Optimale Hyperparameter der Autoren:* ++ {'win_size': 5, 'lr': 0.002} +*Hyperparameter nach Tuning pro Datensatz:* ++ {'win_size': 5, 'lr': 0.0002} ,257_TAO_id_1_Environment_tr_500_1st_3.csv ++ {'win_size': 5, 'lr': 0.0002}, 258_TAO_id_2_Environment_tr_500_1st_4.csv ++ {'win_size': 5, 'lr': 0.0002}, 259_TAO_id_3_Environment_tr_500_1st_7.csv +$\rightarrow$ Optimalen Hyperparameter pro Datensatz stimmen mit denen der Autoren überein. Das Ergebnis sollte daher für den Datensatz nicht abweichen +**Ergebnisse:** ++ Datei: 257_TAO_id_1_Environment_tr_500_1st_3.csv, + + AUC-PR: 0.3586081804879467, + + VUS-PR: 0.9728672536645818 ++ Datei: 258_TAO_id_2_Environment_tr_500_1st_4.csv, + + AUC-PR: 0.4041242440064773, + + VUS-PR: 0.9829327615168215 ++ Datei: 259_TAO_id_3_Environment_tr_500_1st_7.csv, + + AUC-PR: 0.27130311500372556, + + VUS-PR: 0.8345304743557422 ++ Durchschnittlicher AUC-PR: 0.34467851316604986 ++ Durchschnittlicher VUS-PR: 0.9301101631790485 + # LSTMAD + Prozessor: GPU + Modell: NVIDIA GeForce RTX 2060 SUPER @@ -547,9 +568,17 @@ + {'periodicity': 3, 'n_clusters': 20},258_TAO_id_2_Environment_tr_500_1st_4.csv + {'periodicity': 2, 'n_clusters': 40},259_TAO_id_3_Environment_tr_500_1st_7.csv *Werte mit optimalen Hpyerparametern der Autoren:* -+ 257_TAO_id_1_Environment_tr_500_1st_3.csv: -+ 258_TAO_id_2_Environment_tr_500_1st_4.csv: -+ 259_TAO_id_3_Environment_tr_500_1st_7.csv ++ Datei: 257_TAO_id_1_Environment_tr_500_1st_3.csv, + + AUC-PR: 0.12265257769439533, + + VUS-PR: 0.9040614352081129 ++ Datei: 258_TAO_id_2_Environment_tr_500_1st_4.csv, + + AUC-PR: 0.15678134000899518, + + VUS-PR: 0.9440441289414194 ++ Datei: 259_TAO_id_3_Environment_tr_500_1st_7.csv, + + AUC-PR: 0.053845356361248695, + + VUS-PR: 0.32750765229928963 ++ Durchschnittlicher **AUC-PR: 0.11109309135487976** ++ Durchschnittlicher **VUS-PR: 0.7252044054829406** # Sub-OCSVM + Prozessor: CPU + Modell: iCore 5 8th @@ -638,6 +667,26 @@ + nach VUS-PR: + MGAB 0.004639 (vgl. MGAB 0.00) +**TAO DATENSATZ** +*Optimale Hyperparameter der Autoren:* ++ {'n_neighbors': 50} +*Hyperparameter nach Tuning pro Datensatz:* ++ {'n_neighbors': 50} ,257_TAO_id_1_Environment_tr_500_1st_3.csv ++ {'n_neighbors': 50}, 258_TAO_id_2_Environment_tr_500_1st_4.csv ++ {'n_neighbors': 40}, 259_TAO_id_3_Environment_tr_500_1st_7.csv + +**Ergebnisse:** ++ Datei: 257_TAO_id_1_Environment_tr_500_1st_3.csv, + + AUC-PR: 0.24626115376452629, + + VUS-PR: 0.8847122136088094 ++ Datei: 258_TAO_id_2_Environment_tr_500_1st_4.csv, + + AUC-PR: 0.2088996299028087, + + VUS-PR: 0.934478804260389 ++ Datei: 259_TAO_id_3_Environment_tr_500_1st_7.csv, + + AUC-PR: 0.048932116715130855, + + VUS-PR: 0.31206376824211285 ++ Durchschnittlicher AUC-PR: 0.16803096679415527 ++ Durchschnittlicher VUS-PR: 0.7104182620371038 # Sub-LOF + Prozessor: CPU + Modell: iCore5 8th @@ -685,7 +734,28 @@ + nach VUS-PR: + (vgl. WSD 0.03) + Im Gegensatz zur schlechten Performanz der anderen Modelle auf dem Datensatz **MGAB** hat Sub-LOF bei den Autoren hier ein Vus-PR von **0.44** - + +**TAO DATENSATZ** +*Optimale Hyperparameter der Autoren:* ++ {'periodicity': 2, 'n_neighbors': 30} +*Hyperparameter nach Tuning pro Datensatz:* ++ {{'periodicity': 1, 'n_neighbors': 10} ,257_TAO_id_1_Environment_tr_500_1st_3.csv ++ {'periodicity': 1, 'n_neighbors': 20}, 258_TAO_id_2_Environment_tr_500_1st_4.csv ++ {'periodicity': 1, 'n_neighbors': 50}, 259_TAO_id_3_Environment_tr_500_1st_7.csv + +**Ergebnisse:** ++ Datei: 257_TAO_id_1_Environment_tr_500_1st_3.csv, + + AUC-PR: 0.11950767866796852, + + VUS-PR: 0.9015786393630423 ++ Datei: 258_TAO_id_2_Environment_tr_500_1st_4.csv, + + AUC-PR: 0.15483076390775474, + + VUS-PR: 0.9434105963694659 ++ Datei: 259_TAO_id_3_Environment_tr_500_1st_7.csv, + + AUC-PR: 0.06999046309145394, + + VUS-PR: 0.4013508985695418 ++ Durchschnittlicher AUC-PR: 0.11477630188905907 ++ Durchschnittlicher VUS-PR: 0.7487800447673499 + # Sub-KNN + Prozessor: CPU + Modell: iCore 5 8th @@ -729,4 +799,40 @@ + nach VUS-PR: + Daphnet : 0.035185 (vgl. 0.04, vermutl. gleich) + Im Gegensatz zur schlechten Performanz der anderen Modelle auf dem Datensatz **MGAB** hat Sub-LOF bei den Autoren hier ein Vus-PR von **0.24** -+ Bei Autoren hat Sub-KNN ein VUS-PR von 0.92 auf dem Datensatz TAO. Bei uns nur 0.68. Haben wir oder sie einen Fehler gemacht? Insgesamt hat sich bei uns die Leistung des Modells verbessert \ No newline at end of file ++ Bei Autoren hat Sub-KNN ein VUS-PR von 0.92 auf dem Datensatz TAO. Bei uns nur 0.68. Haben wir oder sie einen Fehler gemacht? Insgesamt hat sich bei uns die Leistung des Modells verbessert + +**TAO DATENSATZ** +*Optimale Hyperparameter der Autoren:* ++ {'n_neighbors': 50, 'method': 'largest', 'periodicity':2} +*Hyperparameter nach Tuning pro Datensatz:* ++ {'n_neighbors': 20, 'method': 'median','periodicity':1} ,257_TAO_id_1_Environment_tr_500_1st_3.csv ++ {'n_neighbors': 20, 'method': 'mean','periodicity':1}, 258_TAO_id_2_Environment_tr_500_1st_4.csv ++ {'n_neighbors': 50, 'method': 'largest','periodicity':1}, 259_TAO_id_3_Environment_tr_500_1st_7.csv + +**Ergebnisse:** ++ Datei: 257_TAO_id_1_Environment_tr_500_1st_3.csv, + + AUC-PR: 0.11646226439911839, + + VUS-PR: 0.9008211948983802 ++ Datei: 258_TAO_id_2_Environment_tr_500_1st_4.csv, + + AUC-PR: 0.14713017393481623, + + VUS-PR: 0.9399148903141962 ++ Datei: 259_TAO_id_3_Environment_tr_500_1st_7.csv, + + AUC-PR: 0.0657367850786509, + + VUS-PR: 0.3800981474497113 ++ Durchschnittlicher AUC-PR: 0.10977640780419518 ++ Durchschnittlicher VUS-PR: 0.7402780775540959 + +$\rightarrow$ VUS-PR dezent besser als bei unserem Test, aber noch stark abweichend von den Autoren durch die andere Periodizität (Fehler unsererseits. die falschen Hyperparameter wurden kopiert). Sonst erhalten wir gleiches Ergebnis. + +*Mit periodicity:1* ++ Datei: 257_TAO_id_1_Environment_tr_500_1st_3.csv, + + AUC-PR: 0.12329675188802566, + + VUS-PR: 0.9079681057410124 ++ Datei: 258_TAO_id_2_Environment_tr_500_1st_4.csv, + + AUC-PR: 0.15584484586202274, + + VUS-PR: 0.9463314499613164 ++ Datei: 259_TAO_id_3_Environment_tr_500_1st_7.csv, + + AUC-PR: 0.03747524809411396, + + VUS-PR: 0.19297952994706424 ++ Durchschnittlicher AUC-PR: 0.1055389486147208 ++ Durchschnittlicher VUS-PR: 0.682426361883131 \ No newline at end of file diff --git a/src/models/desi/check_evaluation_content.ipynb b/src/models/desi/check_evaluation_content.ipynb index 10eac46..31a3584 100644 --- a/src/models/desi/check_evaluation_content.ipynb +++ b/src/models/desi/check_evaluation_content.ipynb @@ -18,7 +18,7 @@ "from POLY import POLY\n", "import sys\n", "import pathlib\n", - "sys.path.append(str(pathlib.Path.absolute)+ '../../')\n", + "sys.path.append(str(pathlib.Path.absolute)+ '../../../')\n", "from src.utils.slidingWindows import find_length_rank\n", "from src.run_model_wrapper import main" ] diff --git a/src/models/desi/test_hyperparameters.ipynb b/src/models/desi/test_hyperparameters.ipynb index aac5ce7..65452fe 100644 --- a/src/models/desi/test_hyperparameters.ipynb +++ b/src/models/desi/test_hyperparameters.ipynb @@ -2,58 +2,189 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 62, "metadata": {}, "outputs": [], "source": [ + "import numpy as np\n", + "\n", "import sys\n", "import pathlib\n", - "sys.path.append(str(pathlib.Path.absolute)+ '../../')\n", + "sys.path.append(str(pathlib.Path.absolute)+ '../../../../../')\n", "from src.utils.slidingWindows import find_length_rank\n", - "from src.run_model_wrapper import main\n", - "from src.models.ahmad.KMeansAD import KMeansAD\n" + "from src.run_model_wrapper import preprocess_data\n", + "from src.models.sofia_modelle.KNN import KNN\n", + "from src.evaluation import get_metrics" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 70, "metadata": {}, "outputs": [], "source": [ "#Hyperparamater\n", - "params = {'periodicity': 2, 'n_clusters': 10}" + "params = {'n_neighbors': 50, 'method': 'largest', 'periodicity':1}" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 71, "metadata": {}, "outputs": [], "source": [ "#Fit Funktion\n", - "def run_KMeansAD_U(data, n_clusters=20, periodicity=1,n_jobs=1):\n", + "def run_Sub_KNN(data, n_neighbors=10, method='largest', periodicity=1, n_jobs=1):\n", " slidingWindow = find_length_rank(data, rank=periodicity)\n", - " clf = KMeansAD(k=n_clusters, window_size=slidingWindow, stride=1, n_jobs=n_jobs)\n", - " score = clf.fit_predict(data)\n", + " clf = KNN(slidingWindow=slidingWindow, n_neighbors=n_neighbors,method=method, n_jobs=n_jobs)\n", + " clf.fit(data)\n", + " score = clf.decision_scores_\n", " return score.ravel()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 72, "metadata": {}, "outputs": [], "source": [ - "model = 'run_KMeansAD_U'\n", - "output_path = '../../../docs/evaluation/'" + "#define paths to data and for storing files\n", + "data_folders = '../../../data/train/temp/'" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 73, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "#Ouptput: [{file_name:str,train_data:list,data:list, label:list, sliding_window:int}]\n", + "dataList = preprocess_data(data_folders)" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "257_TAO_id_1_Environment_tr_500_1st_3.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\desiw\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1565: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples. Use `zero_division` parameter to control this behavior.\n", + " _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "258_TAO_id_2_Environment_tr_500_1st_4.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\desiw\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1565: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples. Use `zero_division` parameter to control this behavior.\n", + " _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "259_TAO_id_3_Environment_tr_500_1st_7.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\desiw\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1565: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples. Use `zero_division` parameter to control this behavior.\n", + " _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n" + ] + } + ], + "source": [ + "results = dataList.copy()\n", + "\n", + "#train a model for each file and store metrics, file_name and hyperparameters \n", + "for idx in range(len(dataList)):\n", + " time_series = dataList[idx]\n", + " file_name = time_series['file_name']\n", + " print(file_name)\n", + " data = time_series['data']\n", + " label = np.array(time_series['label'])\n", + " train_data = time_series['train_data']\n", + " \n", + " #scores = run_LOF(train_data,data, **params)\n", + " scores = run_Sub_KNN(data, **params)\n", + "\n", + " slidingWindow = time_series['sliding_window']\n", + " metrics = get_metrics(scores, labels=label, slidingWindow=slidingWindow)\n", + " results[idx]['metrics']= metrics.copy()" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Datei: 257_TAO_id_1_Environment_tr_500_1st_3.csv, AUC-PR: 0.12329675188802566, VUS-PR: 0.9079681057410124\n", + "Datei: 258_TAO_id_2_Environment_tr_500_1st_4.csv, AUC-PR: 0.15584484586202274, VUS-PR: 0.9463314499613164\n", + "Datei: 259_TAO_id_3_Environment_tr_500_1st_7.csv, AUC-PR: 0.03747524809411396, VUS-PR: 0.19297952994706424\n", + "Durchschnittlicher AUC-PR: 0.1055389486147208\n", + "Durchschnittlicher VUS-PR: 0.682426361883131\n" + ] + } + ], + "source": [ + "mean_auc_pr = 0\n", + "mean_vus_pr = 0\n", + "for element in results:\n", + " file = element['file_name']\n", + " metrics = element['metrics']\n", + " auc_pr = metrics['AUC-PR']\n", + " vus_pr = metrics['VUS-PR']\n", + " print(f'Datei: {file}, AUC-PR: {auc_pr}, VUS-PR: {vus_pr}')\n", + " mean_auc_pr += auc_pr\n", + " mean_vus_pr += vus_pr\n", + "\n", + "print('Durchschnittlicher AUC-PR: ', (mean_auc_pr/len(results)))\n", + "print('Durchschnittlicher VUS-PR: ', (mean_vus_pr/len(results)))\n" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dict_keys(['AUC-PR', 'AUC-ROC', 'VUS-PR', 'VUS-ROC', 'Standard-F1', 'PA-F1', 'Event-based-F1', 'R-based-F1', 'Affiliation-F', 'Precision', 'Recall'])" + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results[0]['metrics'].keys()" + ] } ], "metadata": { diff --git a/src/models/sofia_modelle/call_knn.py b/src/models/sofia_modelle/call_knn.py index c70dac7..18a2e88 100644 --- a/src/models/sofia_modelle/call_knn.py +++ b/src/models/sofia_modelle/call_knn.py @@ -5,7 +5,7 @@ sys.path.append(str(pathlib.Path.absolute)+ '../../') from src.utils.slidingWindows import find_length_rank from src.run_model_wrapper import main -#optimal hyperparameters from autors: {'periodicity': 2, 'n_neighbors': 50} +#optimal hyperparameters from autors: {'n_neighbors': 50, 'method': 'mean'}, params = { 'n_neighbors': [10, 20, 30, 40, 50], 'method': ['largest', 'mean', 'median'] -- GitLab