Skip to content
Snippets Groups Projects
Commit de314ab8 authored by DesireeWyrzylala's avatar DesireeWyrzylala
Browse files

to do list und sub-iforest implementation

parent e804c468
No related branches found
No related tags found
No related merge requests found
Showing with 87 additions and 8 deletions
bilder/dataset/comparing_datasets.png

149 KiB

# Auffäligkeiten
1. Es gibt Datensätze mit allgemeiner schlechter Anomalieerkennung, wobei ein / zwei / drei Modelle sehr gut darauf funktionieren
2. Bei Stock nach AUC-PR funtkionieren nur LSTMAD und CNN (beides neuronale Netze) und alle anderen Modelle haben werte um 0.1
3. Allgemein scheint es kein Modell zu geben, was pauschal die Anomalien gut bzw. sicher detektieren kann (insb. nicht auf allen Datensätzen)
4. Teils große Differenzen zw. AUC-PR und VUS-PR bei bestimmten Datensätzen, v.a. mit Punktanomalien (TAO, Stock, TODS).
5. Teils große Unterschiede zw. den VUS-PR Werten auf einzelnen Datensätzen zu den Autoren (z.B. TAO), trotz identischen Hyperparametern bzw. besserer Kombination
6. Unterschiedliches Ranking der Modelle je nach Metrik (Recall, AUC-PR und VUS-PR)
7. Stark abweichende durchschnittliche Trainingszeiten
Evtl. Durch:
+ Grid-Suche
+ Evaluation direkt mit einberechnet
+ Abweichende Hyperparameter
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)
# TO DO'S
+ Datensätze genauer untersuchen
+ Auffälligkeiten (Anomalien erkennbar?, Punkt- oder Sequenzanomalien, Eigenschaften)
+ Warum könnten bestimmte Modelle auf einigen Datensätze Vorteile haben?
+ Verstehen warum es allgemein eine Steigerung der Performanz gibt, mit entweder der gleichen Parameterkonstellation, wie von den Autoren vorgegeben oder bessere Kombination durch das Tuning pro Zeitserie, aber gleichzeitig eine teils deutlich schlechtere Metrik bei einzelnen Datensätzen (z.B. Tao)
+ Evtl. weil beste Hyperparameter anhand AUC-PR getestet wurden und nicht anhand VUS-PR, wie es vermutl. bei den Autoren gemacht wurde
+ Heißt vergleichen der Hyperparameter dieser Datensätze mit den optimalen Hyperparametern der Autoren
+ Bei Ungleichheit der Hyperparameter, diese stark abweichenden Zeitserien nochmal einzeln trainieren und Ergebnisse vergleichen
+ Kann man anhand des Datensatzes und der Anomalien ableiten, welche Methoden (dichte-,distanz-, neuronal basiert) am besten funktionieren könnte?
![](../bilder/dataset/comparing_datasets.png)
+ [https://thedatumorg.github.io/TSB-AD/](https://thedatumorg.github.io/TSB-AD/ "https://thedatumorg.github.io/TSB-AD/")
+ insb.:
+ UCR
+ TAO
+ TODS
+ Power
+ MGAB
+ Stock
+ SED
+ VUS-PR besser verstehen
+ Woher kommen Unterschiede zu AUC-PR, insb. bei Datensätzen mit Punktanomalien (TODS, TAO und Stock) ?
+ Wie funktioniert das?
+ Liegt ein Bias der Autoren?
+ Ranking der Modelle nach Anomalietyp
+ Statistisch vs. Neuronal
+ Dichtebasiert vs. Distanzbasiert
+ Ranking der Modelle allgemein
+ 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
......@@ -5,6 +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_clusters': 10}
params = {
'periodicity': [1, 2, 3],
'n_clusters': [10, 20, 30, 40],
......
......@@ -5,6 +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: {'window_size': 100, 'lr': 0.0008}
params = {
'window_size': [50, 100, 150],
'lr': [0.0004, 0.0008]
......
......@@ -5,6 +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: {'periodicity': 1, 'n_components': None}
params = {
'periodicity': [1, 2, 3],
'n_components': [0.25, 0.5, 0.75, None]
......
......@@ -4,7 +4,7 @@ import pathlib
sys.path.append(str(pathlib.Path.absolute)+ '../../')
from src.run_model_wrapper import main
#optimal hyperparameters from autors: 'POLY': {'periodicity': 1, 'power': 4}
#optimal hyperparameters from autors: {'periodicity': 1, 'n_neighbors': 50}
params = {
'n_neighbors': [10, 20, 30, 40, 50]
}
......
......@@ -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: 'POLY': {'periodicity': 1, 'power': 4}
#optimal hyperparameters from autors: {'periodicity': 2, 'kernel': 'rbf'}
params = {
'periodicity': [1, 2, 3],
'kernel': ['linear', 'poly', 'rbf', 'sigmoid']
......
......@@ -5,7 +5,7 @@ sys.path.append(str(pathlib.Path.absolute)+ '../../')
from src.run_model_wrapper import main
from src.utils.slidingWindows import find_length_rank
#optimal hyperparameters from autors: 'POLY': {'periodicity': 1, 'power': 4}
#optimal hyperparameters from autors: {'periodicity': 2, 'n_neighbors': 30}
params = {
'periodicity': [1, 2, 3],
'n_neighbors': [10, 20, 30, 40, 50]
......
......@@ -11,6 +11,7 @@ import warnings
warnings.simplefilter(action='ignore', category=FutureWarning)
warnings.simplefilter(action='ignore', category=UserWarning)
#optimal hyperparameter from autors: {'periodicity': 1}
params = {
'periodicity': [1, 2, 3]
}
......
......@@ -4,7 +4,7 @@ import pathlib
sys.path.append(str(pathlib.Path.absolute)+ '../../')
from src.run_model_wrapper import main
#optimal hyperparameters from autors: 'POLY': {'periodicity': 1, 'power': 4}
#optimal hyperparameters from autors: {'win_size': 5, 'lr': 0.002}
params = {
'win_size': [5, 50, 100],
'lr': [0.002, 0.0002]
......
......@@ -4,7 +4,7 @@ import pathlib
sys.path.append(str(pathlib.Path.absolute)+ '../../')
from src.run_model_wrapper import main
#optimal hyperparameters from autors: 'POLY': {'periodicity': 1, 'power': 4}
#optimal hyperparameters from autors: {'win_size': 100, 'lr': 0.001}
params = {
'win_size': [5, 50, 100],
'lr': [1e-3, 1e-4, 1e-5]
......
......@@ -4,7 +4,7 @@ import pathlib
sys.path.append(str(pathlib.Path.absolute)+ '../../')
from src.run_model_wrapper import main
#optimal hyperparameters from autors: 'POLY': {'periodicity': 1, 'power': 4}
#optimal hyperparameters from autors: {'window_size': 50, 'num_channel': [32, 32, 40]}
params = {
'window_size': [50, 100, 150],
'lr': [5e-5, 1e-4, 5e-4, 8e-4, 1e-3]
......
......@@ -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: 'POLY': {'periodicity': 1, 'power': 4}
#optimal hyperparameters from autors: {'n_estimators': 200}
params = {
'n_estimators': [25, 50, 100, 150, 200]
}
......
......@@ -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: 'POLY': {'periodicity': 1, 'power': 4}
#optimal hyperparameters from autors: {'periodicity': 2, 'n_neighbors': 50}
params = {
'n_neighbors': [10, 20, 30, 40, 50],
'method': ['largest', 'mean', 'median']
......
from IForest import IForest
import sys
import pathlib
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': 1, 'n_estimators': 150}
params = {
'periodicity': [1, 2, 3],
'n_estimators': [25, 50, 100, 150, 200]
}
def run_Sub_IForest(data, periodicity=1, n_estimators=100, max_features=1, n_jobs=1):
slidingWindow = find_length_rank(data, rank=periodicity)
clf = IForest(slidingWindow=slidingWindow, n_estimators=n_estimators, max_features=max_features, n_jobs=n_jobs)
clf.fit(data)
score = clf.decision_scores_
return score.ravel()
model = 'Sub_IForest'
output_path = '../../../docs/evaluation/'
#writes results in .csv
main(run_Sub_IForest,params,model,data_folders = '../../../data/', model_type='unsupervised',output_dir = output_path)
#pip3 install -r requirements.txt
# python src/models/desi/call_poly.py
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment